【问题标题】:Print special character in assembly bootloader在程序集引导加载程序中打印特殊字符
【发布时间】: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


【解决方案1】:

感谢 Michael Petch 和 Ped7g 对我的问题发表评论。 我尝试了你的两个建议,都奏效了。

这是我使用的方法:

  • 在汇编文件中以纯文本形式写入特殊字符(不像 Michael Petch 建议的那样)
  • DOS 编码保存文件(我使用 sublime text 作为文本编辑器)
  • 使用 NASM 构建它并在 BIOS 中显示字符

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2013-07-07
    • 2021-07-19
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多