アセンブリが初めてです。 BIOSの機能を把握しようとしているうちに、私はgdbを使ってそれをトレースします。しかし、私は本当に奇妙なものを見つけました。
コードセグメントは、このです:BIOSは異なるポートから同じ行の同じレジスタに2回読み込みます
[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から読み出しなぜだろう。 2番目の命令はポート0x71から読み取った値をカバーしますか?では、なぜポート0x71から読み取るのですか?
ありがとうございました!
ポート0x70は、NMIを無効/有効にするためにも使用されます。ビット7が0の場合、NMIが有効になり、ビット7が1の場合、NMIは無効になります。したがって、コードはNMIを無効にして、あなたが与えた理由でポート0x71のダミーリードを実行しています。 –
@RossRidge:恐ろしい "致命的なハードウェアの失敗を無視して、勇敢に前向きに認識できない"可能性を最後に忘れるまでには数年かかりました。私は今悲しいです。 ;-) – Brendan
ああ、マスキング不可能な割り込みをマスクするアイデアは単なる悪です。私たちは本当にこれを再び起こすべきではありません。一口... –