0

独自のブートローダーを作成することにしました。

ビデオモードを 3 に設定し (qemu はすでに 3 に設定していますが)、ビデオメモリを直接変更して、画面の最初の行の最初の文字に「A」を出力することができました。

[org 0x7C00] ;Address BIOS loads the bootloader into
[bits 16]

;Set video mode to mode 3
mov al, 0x03
mov ah, 0x00
int 0x10

mov ax, 0xB800
mov es, ax
mov bx, 0
mov [es:bx], byte 65
mov [es:bx+1], byte 0x0F

;cli

JMP $       ;Infinite loop, hang it here.

times 510 - ($ - $$) db 0   ;Fill the rest of sector with 0
dw 0xAA55         ;Add boot signature at the end of bootloader

コメントアウトされた cli 命令に注意してください。セミコロンとセミコロンのみを削除すると、「A」が出力されなくなります。IF フラグをクリアすると、メモリ内の内容に影響を与えるという副作用が生じる可能性があることを理解していません。誰かがこれに光を当てることができれば、それは素晴らしいことです.

ああ、価値があるのは、ブートローダーを実行するために使用するコマンドです

nasm -o bl.bin bl.asm
qemu -fda bl.bin

私はどこかで炎上し、できる限り読みました。誰かがスタックのセットアップについて言及しましたが、それが私の問題との関連性を理解していません。

助けていただければ幸いです。

4

1 に答える 1

0

ビデオカードハードウェアに依存!一部のビデオ カードは、すべてのビデオ モードを直接サポートしていませんが、シミュレートのみを行います。したがって、割り込みを介して、コードの内部部分が数ミリ秒ごとにこのメモリをグラフィックカードメモリにコピーする責任があります。割り込みをオフにすると、グラフィック カードの内部ビデオ メモリの更新もオフになります。CLI 命令はすべてのソフトウェア割り込みを無効にするため、ハードウェア命令のみが存在するため、BIOS は正しく機能しません。CLI 命令は、メモリまたは IO ポートへの読み取りまたは書き込みの同期にのみ使用できます。私の答えを確認するには、CLI 命令を実行する前に約 6 ミリ秒の短い一時停止を行うと、文字が表示されます。

于 2010-06-03T08:46:54.683 に答える