在传统 BIOS 引导加载程序中打印特殊(非拉丁)字符
Printing special (non-Latin) characters in a legacy-BIOS bootloader
我正在制作一个简单的引导程序。我想在屏幕上打印一些非拉丁文字,但无法正确打印字符“ü”。如何让我的 OS 打印字符像 ü
?我已经搜索过了,但找不到任何相关信息。
main.asm
[org 0x7c00]
call clear
mov bx, SELAM
call print
call print_nl
mov bx, NABER
call print
jmp $
%include "print.asm"
SELAM:
db 'Selamun Aleyküm.', 0
NABER:
db 'Nabün?', 0
times 510 - ($-$$) db 0
dw 0xaa55
print.asm
print:
pusha
start:
mov al, [bx]
cmp al, 0
je done
mov ah, 0x0e
int 0x10
add bx, 1
jmp start
done:
popa
ret
print_nl:
pusha
mov ah, 0x0e
mov al, 0x0a
int 0x10
mov al, 0x0d
int 0x10
popa
ret
clear:
pusha
mov ah, 0x00
mov al, 0x03
int 0x10
popa
ret
我使用 NASM 作为汇编程序。
几乎所有 IBM 兼容计算机都使用代码页 437 来生成文本,我想您必须手动创建某种查找 table。
您用来编写源文本的编辑器可能不会将字符“ü”的 ASCII 代码映射到数字 129。但是执行引导加载程序的计算机将使用代码页 437(在启动时),并且因此要求 129 显示“ü”。
您可以像这样在文本中手动插入正确的 ASCII 码:
SELAM:
db 'Selamun Aleyk', 129, 'm.', 0
NABER:
db 'Nab', 129, 'n?', 0
还有一个大写版本的“Ü”:
SELAM:
db 'SELAMUN ALEYK', 154, 'M.', 0
NABER:
db 'NAB', 154, 'N?', 0
我正在制作一个简单的引导程序。我想在屏幕上打印一些非拉丁文字,但无法正确打印字符“ü”。如何让我的 OS 打印字符像 ü
?我已经搜索过了,但找不到任何相关信息。
main.asm
[org 0x7c00]
call clear
mov bx, SELAM
call print
call print_nl
mov bx, NABER
call print
jmp $
%include "print.asm"
SELAM:
db 'Selamun Aleyküm.', 0
NABER:
db 'Nabün?', 0
times 510 - ($-$$) db 0
dw 0xaa55
print.asm
print:
pusha
start:
mov al, [bx]
cmp al, 0
je done
mov ah, 0x0e
int 0x10
add bx, 1
jmp start
done:
popa
ret
print_nl:
pusha
mov ah, 0x0e
mov al, 0x0a
int 0x10
mov al, 0x0d
int 0x10
popa
ret
clear:
pusha
mov ah, 0x00
mov al, 0x03
int 0x10
popa
ret
我使用 NASM 作为汇编程序。
几乎所有 IBM 兼容计算机都使用代码页 437 来生成文本,我想您必须手动创建某种查找 table。
您用来编写源文本的编辑器可能不会将字符“ü”的 ASCII 代码映射到数字 129。但是执行引导加载程序的计算机将使用代码页 437(在启动时),并且因此要求 129 显示“ü”。
您可以像这样在文本中手动插入正确的 ASCII 码:
SELAM:
db 'Selamun Aleyk', 129, 'm.', 0
NABER:
db 'Nab', 129, 'n?', 0
还有一个大写版本的“Ü”:
SELAM:
db 'SELAMUN ALEYK', 154, 'M.', 0
NABER:
db 'NAB', 154, 'N?', 0