以 16 位模式写入 0xB800 显示一个 "G" 和一个引号

Writting to 0xB800 in 16 bit mode shows a "G" and a quote

作为一个教育项目,我决定编写一个极其简单的引导加载程序。一个不启动任何东西但显示一条消息的引导加载程序。出于某种原因,我可以写入视频内存,但最后一个字母的 ASCII 值比预期的大 7,并且消息后有引号。

这是我的代码:

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

这是输出:

AAAAH"

好的,将 hlt 更改为 jmp $ 解决了问题。这是工作代码:

bits 16
org 0x7c00

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'

    jmp $

times 510 - ($-$$) db 0
dw 0xAA55