Als ein pädagogisches Projekt habe ich beschlossen, einen sehr einfachen Boot-Loader zu schreiben. Ein Boot-Loader, der nichts startet, aber eine Nachricht anzeigt. Aus irgendeinem Grund kann ich in den Videospeicher schreiben, aber der ASCII-Wert des letzten Buchstabens ist 7 größer als es sein sollte und ein Zitat folgt der Nachricht.Writting zu 0xB800 im 16-Bit-Modus zeigt ein "G" und ein Zitat
Hier ist mein Code:
bits 16 ; 16-bit Real Mode
org 0x7c00 ; BIOS boot origin
jmp main ;Jump to start main() entry-point
main:
mov ax, 0xB800
mov ds, ax
mov si, 0x0
mov [si], byte 'A'
add si, 2
mov [si], byte 'A'
add si, 2
mov [si], byte 'A'
add si, 2
mov [si], byte 'A'
add si, 2
mov [si], byte 'A'
hlt
times 510 - ($-$$) db 0
dw 0xAA55
Hier ist der Ausgang:
AAAAH"
Lesen Sie, was 'hlt' tut. Hinweis: Ein Interrupt kann es aufwecken, so dass Ihr Programm fortgesetzt wird und wahrscheinlich auf einen Befehl trifft, der diesen Effekt hat. PS: Lerne einen Debugger zu benutzen. – Jester
Was ist deine Frage? – adrianmcmenamin
Versuchen Sie, jmp $ anstelle von Halt zu verwenden. – rcgldr