私はこのコードをHello worldブートローダに使用しています。 "Hello world \ n"を印刷する代わりに、単に 'H'を出力してハングします。私はloadsbを使用してメッセージを正常に出力しましたが、なぜこのアプローチが機能しないのか理解できません。Hello Worldのブートローダが最初の文字の後ろにぶら下がっています
[ORG 0x7c00]
[BITS 16]
xor ax, ax ;make it zero
mov ds, ax
mov ecx, msg
bios_print:
mov al, [ecx]
add ecx,1
cmp al, 0 ;zero=end of str
je hang ;get out
cmp al,100
jge hang
mov ah, 0x0E
int 0x10
jmp bios_print
hang:
jmp hang
msg db 'Hello World', 13, 10, 0
times 510-($-$$) db 0
db 0x55
db 0xAA
編集: 私はあなたのプログラムは、あなたがそれをコード化されてきた方法で正確に働いている[BITS 16]
コンピュータが起動したときに '[BITS 64] 'を使用して、16ビットモードになっているのはなぜですか? – Earlz