我用汇编语言写了一个程序,用NASM把 *.asm文件转换成 *.bin文件。完成后,我把它替换到我虚拟硬盘的第一个扇区(在vmWare中)。我是汇编新手(也是这个论坛的新手)。它会在重启后在屏幕上打印一条消息。
第1行:您现在可以插入并安装
第二行:您的新操作系统
第三行:现在
我现在的问题是:我如何将文本(例如仅从第2行开始)打印成另一种颜色?也许是绿色.或红色?
其余的代码应该保持正常的白色/灰色。我只想改变这一行!
这将是伟大的,如果有人能解释它如何工作,为什么它的工作,然后(我希望它会:P),因为我想提高我的组装技能。
这是我从现在开始的代码:
; nasm -f bin test.asm -o test.bin
BITS 16
ORG 0x7c00
jmp start
start:
mov ax,cs
mov ds,ax
mov si,msg
call print
print:
push ax
cld
next:
mov al,[si]
cmp al,0
je done
call printchar
inc si
jmp next
done:
jmp $
printchar:
mov ah,0x0e
int 0x10
ret
msg: db "You can now insert and install ",13,10,"your new OS ",13,10,"right now ", 0
times 510 - ($-$$) db 0
dw 0xaa55
字符串
1条答案
按热度按时间gpfsuwkq1#
BIOS可以显示彩色字符。有关详细信息,请参阅Displaying characters with DOS or BIOS。
我现在的问题是:我如何将文本(例如仅从第2行开始)打印成另一种颜色?也许是绿色.或红色?
其余的代码应该保持正常的白色/灰色。我只想改变这一行!
但是有没有办法把它包含到我的代码中而不分裂“msg:“行?
如果你坚持使用文本视频模式3(16色80 x25),那么我建议你在Q/A中寻找与BIOS相关的代码片段,我已经提供了一个链接。本质上,你将背靠背地执行BIOS. WriteWriteterAndAttribute函数09 h和BIOS.Teletype函数0 Eh。
如果您准备切换到图形视频模式,如18(16色640 x480),则BIOS.Teletype功能0 Eh * 可以 * 自行打印彩色字符。添加以下行:
字符串
解决不拆分一行msg的方法是在文本中插入颜色信息,并以转义字符为前缀。为此,我将使用**%**符号:
型
从上图中,只有“您的新操作系统”显示为绿色。其余部分显示为白色。