1
我有這樣的代碼,是應該打印一個字符串的第一個字母:空的結束改變了串
mov bx, message ; Move the address of the message to bx
add bx, 0x7c00 ; Adding the padding of bootsector to bx
mov al, [bx] ; Move the value at the address in bx to al
int 0x10 ; Interrupt drawing the character in al to screen
爲什麼不這項工作:
message:
db "Test", 0
但這個工程:
message:
db "Test", 0, 0
第一個打印一些隨機字符,第二個總是我的消息的第一個字母。
該代碼與NASM一起編譯到.bin中,並作爲Bochs中的引導扇區運行。
**編輯
全碼:
mov ah, 0x0e
message:
db 'Booting MainOPS', 0
printTheMessage:
mov bx, message
add bx, 0x7c00
mov al, [bx]
int 0x10
jmp $
times 510 - ($-$$) db 0
dw 0xaa55
這不是[MCVE]。你很可能將您的字符串放入代碼路徑中。更多的人這樣做比我想象的要多。另外,學會使用bochs調試器。 – Jester
@Jester我加了整個代碼。它基本上沒有區別,因爲它幾乎是我的整個代碼。是的,任何事情都可能我不是專業人士,所以這可能是愚蠢的。我正在學習如何使用它。 – Maineri
btw,在開始時使用'[org 0x7c00]'來避免必須通過'add bx,0x7c00' ...來調整偏移量...(但是即使這樣也只能用於更常見的BIOS,因爲一些罕見的將不會從' 0000:7C00',但其他東西像'07C0:0000',所以從'cs'複製的'ds'將會出錯......等等,你根本就沒有設置ds,這是另一個主要問題,你很幸運,Bochs是如此「自然」的環境,在寄存器中啓動你的啓動加載器,並具有常識值。編寫*魯棒性*引導程序相當棘手。 – Ped7g