単純な 'Hello World' メッセージを出力するだけの FASM または NASM でコンパイルされた単純な ISA Option Rom プログラムをテストしようとしています。
問題は、文字列が出力される代わりに、QEMU でテストすると予期しない文字がいくつか表示されることです。ただし、属性は機能し、テキストの色を変更しますが、何時間もの Google 検索の後でこれを理解することはできません。
最適な推測は、間違ったメモリ アドレスがusingからORG
にコピーされているため、コマンドを設定する必要があるということです。何か案は??AL
SI
LODSB
use16 ; ISA module operates in the 16-bit segment.
DB 55h, 0AAh ; Boot signature
DB 01h ; Block size in sectors (200h each)
xor ax, ax ; make it zero
mov ds, ax
start:
mov si, text_string ; Put string position into SI
call print_string ; Call our string-printing routine
.bounce:
jmp .bounce ; Jump here - infinite loop!
print_string: ; Routine: output string in SI to screen
.repeat:
;mov ah, 09h ; int 10h 'print char' function
; mov bh, 0x00
; mov bl, 0x03
; mov cx, 1h
lodsb ; Get character from string
or al,al
jz .done
mov ah, 0x0E
int 0x10
; If char is zero, end of string
; int 10h ; Otherwise, print it
mov bh, 00h
mov ah, 03h
int 10h
mov ah, 02h
mov bh, 00h
inc dl
int 10h
jmp .repeat
.done:
mov al, 'D'
mov bh,0x00
mov cx,1
mov ah,0ah
int 10h
ret
text_string db 'Hello World!',,0
times 512-($-$$) db 0