初次接触汇编,求帮助小弟我用的是masm5.0 win732,读取pci device一个数据到cmos 41h,为什么数据老是显示09?代码如下

初次接触汇编,求帮助我用的是masm5.0 win732,读取pci device一个数据到cmos 41h,为什么数据老是显示09?代码如下
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。