2

単純な 'Hello World' メッセージを出力するだけの FASM または NASM でコンパイルされた単純な ISA Option Rom プログラムをテストしようとしています。

問題は、文字列が出力される代わりに、QEMU でテストすると予期しない文字がいくつか表示されることです。ただし、属性は機能し、テキストの色を変更しますが、何時間もの Google 検索の後でこれを理解することはできません。

最適な推測は、間違ったメモリ アドレスがusingからORGにコピーされているため、コマンドを設定する必要があるということです。何か案は??ALSILODSB

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   
4

2 に答える 2