assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8 ;行号
mov dl,3 ;列号
mov cl,2 ;颜色
mov ax,data
mov ds,ax
mov si,0 ;ds:si指向data segment定义的数据
call show_str ;调用show_str函数
mov ax,4c00h
int 21h
show_str:push cx ;由于前面用cl来指颜色
push si ;
mov al,0a0h ;160位一行
dec dh ;行数减1
mul dh ;al乘以dh,积为ax
mov bx,ax
mov al,2
mul dl ;由于每个字占两位,低位为字,高位为颜色
sub ax,2 ;减去自己本身占的2位
add bx,ax ;计算字母显示的位置
mov ax,0b800h ;写入内存b8000~bffff中的内容可以显示到屏幕上
mov es,ax
mov di,0 ;es:di指向将被写入的内存空间
mov al,cl ;将颜色放到al中
mov ch,0
s:mov cl,ds:[si] ;将ds:si中的字母放到cl中
jcxz ok ;当cx中的值为0时,跳到ok处
mov es:[bx+di],cl ;
mov es:[bx+di+1],al ;al中之前存储了颜色
inc si
add di,2
jmp short s
ok:pop si
pop cx
ret
code ends
end start