data segment
temp db ?
data ends
.386
code segment
assume cs:code,ds:data
start:
mov dx,0cf8h
mov eax,80070080h;最低位数据为:42h
out dx,eax
mov dx,0cfch
in eax,dx
mov temp,al
mov al,41h
out 70h,al
jmp $+2
mov al,temp
out 71h,al
mov ah,4ch
int 21h
code ends
end start
------解决方案--------------------
在 Win7 下运行这个代码?可以正常运行的吗?直接操作端口,应该是被保护而屏蔽了的,所以即便有结果也不是真正的内容。在纯 dos 环境下试试吧。
------解决方案--------------------
用 Masm 的话,你这源程序确实有些问题,dos16 类程序,为了使用 eax 这样的寄存器和新增的指令,应该在程序的开头加上
.model small ; 可根据实际模式修改 small 为 tiny 或其它
.386 ; 这两语句顺序不能变,这是个约定
这代码只能在纯 dos 下运行,不可以在 windows 的命令行窗口下,即便不报错,结果也可能不对。至于你这个代码功能上是否有问题,没做过 pci device 方面的,就不了解了。
------解决方案--------------------
你直接向CMOS地址41h中写42h能写进去吗?如果能的话肯定是读PCI配置数据没读出来,你调试一下看看读出来的到底是42h还是09h。