我是新装配。在试图找出BIOS的功能时,我使用gdb来追踪它。但是,我发现了一些非常奇怪的东西。
代码段是这样的:BIOS从不同端口读取两次到同一行中的同一寄存器
[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读取?
谢谢!
端口0x70还用于禁用/启用NMI,如果位7为0,则启用NMI,如果位7为1,则禁用NMI。因此,代码禁用NMI,然后根据您给出的原因进行虚拟读取端口0x71。 –
@RossRidge:花了我好几年才终于忘记了可怕的“忽略灾难性的硬件故障并继续勇敢地向前发展”的可能性。我现在好悲伤。 ;-) – Brendan
哦,是的 - 屏蔽非屏蔽中断的想法是邪恶的。我们真的不应该再提起这件事。叹... –