어셈블리가 처음입니다. 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
오 예. 마스크 할 수없는 인터럽트를 마스크하는 아이디어는 사악합니다. 우리는 다시 이것을 가져 오면 안됩니다. 한숨... –