;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
![]()