我有一个简单的程序,它必须读取PCI configuration space
(仅适用于第一个PCI设备)。但它不起作用。 YASM:PCI设备检查汇编语言
18: warning: value doesnt fit in 8 bit fild
19: warning: value doesnt fit in 8 bit fild
下面是代码:
[use 32]
[org 0x7c00]
start:
mov ah, 0x3
int 0x10 ;clear screen
;forming the PCI address
push ax
or ah, 10000000b
xor al, al
or al, 00000001b
shl eax, 16
pop ax
xor al, al
xor ah, ah
push eax
out 0xcf8, eax
in eax, 0xcfc
mov edi, field
stosd
mov si, di
call print_str
ret
field:
print_str:
;print a string in si
mov ax, 0xb800
mov es, ax
xor di, di
mov cx, 128
rep movsw
ret
times 510 - ($ - $$) db 0
dw 0xaa55
感谢。
P.S.我正在使用Bochs进行仿真,并且使用YASM作为汇编程序
谢谢。但程序不做任何事情(它确实清除了检查的屏幕)。是所有'输入/输出'操作还是只需要32位(如'eax'等)? – Vanzef 2013-03-22 16:06:49
@Vanzef在您的代码中添加了更多问题的解释。 ['in'](http://web.itu.edu.tr/kesgin/mul06/intel/instr/in.html)和['out'](http://web.itu.edu.tr/kesgin /mul06/intel/instr/out.html)只允许8位直接端口地址,而'al','ax'和'eax'则是一样的。对于16位端口地址,必须使用'dx'。 – nrz 2013-03-22 16:34:39
...而且你不想要“32位”! – 2013-03-22 17:56:20