assume cs:code,ds:data,ss:stackdata segment db 'Welcome to masm!',0data ends stack segment db 128 dup (0) stack ends code segmentstart: mov ax,data ;数据段初始化 mov ds,ax mov si,0 mov ax,stack mov ss,ax mov sp,128 mov dh,12 ;显示器行位置 mov dl,35 ;显示器列位置 mov cl,2 ;字符串属性 call show_str mov ax,4c00h int 21h show_str: ;名称:show_str ;功能:在指定的位置,用指定的颜色,显示一个用0 结束的字符串 ;参数:(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79), ; (cl)=颜色,ds:si指向字符串的首地址 ;返回:无 push ax ;防止寄存器冲突,子程序 push es ;用到的寄存器全部入栈 push di ;所谓的“保护现场 ” push si push dx push cx mov ax,0B800H ;显存初始地址 mov es,ax mov di,0 ;行列转换显存区偏移地址 mov al,dh mov dh,0a0h ;80个字符,160个字节 mul dh add dl,dl ;第三列,第六个字节 add al,dl mov di,ax mov dl,cl ;将属性值换为dl s: mov cl,[si] mov ch,0 jcxz ok mov es:[di],cl mov es:[di+1],dl inc si ;字符向后加一个 add di,2 ;显存向后加两个 loop s ok: pop cx ;恢复现场 pop dx pop si pop di pop es pop ax ret ;子程序到此结束 code endsend start