独自のブートローダーを作成することにしました。
ビデオモードを 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
私はどこかで炎上し、できる限り読みました。誰かがスタックのセットアップについて言及しましたが、それが私の問題との関連性を理解していません。
助けていただければ幸いです。