assembly 添加彩色文本(我的自定义MBR)

carvr3hs  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(99)

我用汇编语言写了一个程序,用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

字符串

gpfsuwkq

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 * 可以 * 自行打印彩色字符。添加以下行:

mov  ax, 0012h   ; BIOS.SetVideoMode 16-color 640x480
int  10h

字符串
解决不拆分一行msg的方法是在文本中插入颜色信息,并以转义字符为前缀。为此,我将使用**%**符号:

; IN (ds:si) OUT (si) MOD (ax,bx)
colorPrint:
    mov  bl, 07h  ; Default WhiteOnBlack 
    lodsb         ; String is not empty for sure
.a: cmp  al, '%'
    jne  .b       ; It is not our escape
    lodsb
    cmp  al, '%'  ; Use %% to print a single % character
    je   .b
    mov  bl, al   ; Setting a new color attribute
    jmp  .c
.b: mov  ah, 0Eh  ; BIOS.Teletype
    int  10h
.c: lodsb
    test al, al
    jnz  .a       ; Repeat while not at end-of-string
    ret
; ----------------
msg: db "You can now insert and install", 13, 10
     db "%", 02h, "your new OS", "%", 07h, 13, 10
     db "right now.", 0


从上图中,只有“您的新操作系统”显示为绿色。其余部分显示为白色。

相关问题