以 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
作为一个教育项目,我决定编写一个极其简单的引导加载程序。一个不启动任何东西但显示一条消息的引导加载程序。出于某种原因,我可以写入视频内存,但最后一个字母的 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