3
我做了簡單的代碼,應該寫入VGA內存。x86彙編直接寫入VGA簡單操作系統
org 07c00h
mov eax,0xb8000
mov bx,msg
call printstr
printstr:
mov al,byte[bx]
mov byte[eax],al
inc eax
mov byte[eax],1
inc eax
inc bx
cmp byte[bx],0
je end
jmp printstr
end:
jmp end
msg: db "Hello world!",0
times 510-($-$$) db 0
dw 0xaa55
但是,當我在QEMU中運行它時,它不會寫「Hello world」。 我組裝了使用NASM。 Image
我想用「Hello world!」在第一行覆蓋前12個字符。
有誰知道爲什麼給我這個結果?
謝謝。我沒有使用分段尋址,因爲我不熟悉它,而且我不確定我是否理解它。 – Smax
嗯,我從來沒有寫過x86操作系統或引導程序,但我猜測CPU是以實模式啓動的,因此,在切換到保護模式之前,您必須使用分段地址。 – Michael
自386開始,即使在實模式下也可以使用32位尋址。只有結果線性地址的前20位(或21位)纔會被使用。 – avakar