在屏幕上显示一段带颜色的文字(汇编)

;object: show string with color
;writer: mike
;time: 2020.10.26

assume cs:code,ds:data,ss:stack


data segment
        db    'welcome to masm',0


data ends

stack segment stack
        db 128 dup(0)



stack ends

code segment

start:    

        mov ax,stack
        mov ss,ax
        mov sp,128         ;设置栈地址



        mov bx,data
        mov ds,bx
        mov si,0              ;数据从哪里来

        mov bx,0B800H
        mov es,bx
        mov di,160*8
        add di,3*2            ;数据到哪里去,不要问为什么

        call showString

        mov ax,4C00H
        int 21H


;=====================================


showString:
        push cx           ;为防止子程序改变主程序的值,因此将寄存器的值保存到内存中
        push ds
        push es
        push si
        push di
        mov cx,0           ;这里相当于一个loop,这里执行一次循环
showString1:
        mov cl,ds:[si]      ;判断是否到了字符串结尾
        jcxz showStringReg   ;只针对cx 寄存器
        mov es:[di+0],cl
        mov byte ptr es:[di+1],00000010B ; 在字符后面加上了颜色

        add di,2
        inc si
        jmp showString    

showStringReg:
        pop di        ;取出内存中的值
        pop si
        pop es
        pop ds
        pop cx
        ret

code ends
end

原文地址:https://www.cnblogs.com/zijidefengge/p/13900202.html