我有一段代碼運行在實模式和printf在屏幕上的消息,我使用DOSBox中0.7作爲我的執行環境。下面是代碼請告訴我不對這個實模式代碼
jmp 0x7c0:start
start:
mov ax, cs ; set up segments
mov ds, ax
mov es, ax
mov al,03h
mov ah,0
int 10h
welcome db "This is insane now"
mov si, welcome
call print_string
print_string:
lodsb ; grab a byte from SI
or al, al ; logical or AL by itself
jz .done ; if the result is zero, get out
mov ah, 0x0E
int 0x10 ; otherwise, print out the character!
jmp print_string
.done:
ret
我能夠裝配該代碼罰款,但是當我運行它,它只是掛在那兒和消息,我可以在Linux終端看到
Illegal read from b0671921, CS:IP 7c0: 4468
這是我如何組裝它
nasm PRINT.ASM -o out.com
我試圖尋找在谷歌這條消息,並發現它可能是與DOSBox中的一個問題。
任何人都可以讓我知道在這裏可以是問題?
你想寫一個引導程序? COM文件被加載到地址0x100,所以你不能以這種方式運行bootloader。您必須創建一個虛擬軟盤驅動器或硬盤驅動器,並在第一個扇區中放置引導加載程序二進制文件。而且,你的歡迎字符串缺少NUL終結符,不應該放在代碼中間,因爲CPU不知道代碼和數據之間的區別。 – Michael
如果你真的想創建一個.COM文件(而不是引導程序),你應該使用'[org 0x100]'並且在開始時刪除'jmp'(並且用你的字符串變量解決上述問題)。 – Michael
謝謝Micheal,會試試看。 –