;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