【发布时间】:2017-08-18 09:36:14
【问题描述】:
我想在我的程序集引导加载程序中打印 ▀、▄ 和 ■ 等字符。但是当我这样做时:
Println:
lodsb
or al, al
jz complete
mov ah, 0x0e
int 0x10
jmp Println
complete:
call PrintNwL
PrintNwL:
mov al, 0
stosb
mov ah, 0x0E
mov al, 0x0D
int 0x10
mov al, 0x0A
int 0x10
ret
Msg db 'Message with specia character ■', 0x0
mov si, Msg
call Println
特殊字符被奇怪的其他字符替换。 感谢您的帮助
【问题讨论】:
-
您可能必须使用可以在此处找到的十六进制 ASCII 值(代码页 437 扩展 ASCII 字符)对字符进行编码:en.wikipedia.org/wiki/Code_page_437。例如,这应该打印您提到的 3 个字符。
Msg db 'Message with specia character',0xDC,' and', 0xDF, ' and', 0xFE, 0x0 -
检查您的编辑器对源文件使用的编码。在这些时候,utf-8 在任何现代操作系统中都是事实上的标准(在像 MS Win 这样过时的操作系统上,您可能会遇到不同的编码),而您需要经典的 ASCII(实际上不是经典的,那只是 7 位,但 PC 扩展的VGA 特殊字符。顺便说一句,IIRC,一些 BIOS 的某些代码的字符可能略有不同(主要是本地语言的国家字符),但图形方块/框架应该适用于大多数字符。如果您的编辑器直接支持 ASCII 编码,您可以就这样写,否则使用字节值。
标签: assembly special-characters bootloader