我是组装新手。在试图弄清楚 BIOS 做什么时,我使用gdb来跟踪它。然而,我发现了一些对我来说很奇怪的事情。
代码段是这样的:
[f000:d129] 0xfd129: mov eax,0x8f
[f000:d12f] 0xfd12f: out 0x70,al
[f000:d131] 0xfd131: in al,0x71
[f000:d133] 0xfd133: in al,0x92
[f000:d135] 0xfd135: or al,0x2
[f000:d137] 0xfd137: out 0x92,al
我想知道为什么 BIOS 会连续从端口 0x71 和 0x92 读取。第二条指令会覆盖从端口 0x71 读取的值吗?那么为什么它从端口 0x71 读取呢?
谢谢!
IO口0x70为“CMOS/RTC索引寄存器”,IO口0x71为“CMOS/RTC数据寄存器”。要访问 CMOS 中的某些内容,您应该设置索引,然后读取/写入数据寄存器。
对于某些 RTC 芯片,如果您设置索引并且不读取或写入数据寄存器,则芯片处于未定义状态。这意味着如果你想为以后设置一个索引,你必须从数据寄存器中读取以避免现在和以后之间的“未定义状态”。
换句话说; 读取的值不相关 - 读取会导致副作用,而重要的是副作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句