我正在汇编中创建iso文件,并希望为文本添加颜色(在本例中为:红色)。
有人知道怎么做吗?
[BITS 16]
[ORG 0x7C00]
jmp main
main:
mov si, string ; si=string
call printstr
jmp $
printstr:
lodsb ; al=&si[0]
cmp al,0 ;FLAGS = 0
jnz print
ret
print:
mov ah,0Eh
int 10h
jmp printstr
string db "HELLO WORLD!",13,10,0
times 510 - ($-$$) db 0
dw 0xAA55
2条答案
按热度按时间xfb7svmp1#
作为初步建议,始终设置引导加载程序所依赖的段寄存器。在这里,由于
lodsb
与[ORG 0x7C00]
一起存在,因此必须设置DS=0
。最好还要确保方向标志DF处于已知状态。简单的
cld
就足够了。回答您的问题。您使用的BIOS.Teletype函数0Eh可以产生所需的红色**,但只能在图形视频模式下**。因此,下一个解决方案将起作用:
然而,如果你想使用文本视频模式,那么BIOS.WriteCharacterWithAttribute函数09h是正确的选择。
BL
现在保存一个属性字节,该字节同时指定2种颜色(低半字节中的前景和高半字节中的背景),并且一个额外的参数使用CX
寄存器。示例:
3hvapo4f2#
您可以使用Int 10/AH:0x 09。它与Int 10/AH:0x 0 E具有相同的参数,只是BH是文本颜色。只需在代码中添加以下行即可。
我使用的另一个替代方法,由于BIOS功能,在保护模式下不可用。使用0x 0 B800处的内存。通用代码则变为:
用于调查此问题的其他资源包括: