assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8 ;行数
mov dl,3 ;列数
mov cl,01110001B;颜色
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: ;
mov bh, cl ;保存颜色到bx高位
mov ax,25 ; 每行25个
mul dh ; 计算偏移位置 ax = dh * al
mov dh ,0 ; dh用完了
add ax, dx ; 得到最终偏移位置 = 行偏移+列偏移
add ax,0B800h ; 此时es指向要显示的首位置
mov es, ax
mov di,0 ; 存储位置
put_str:
mov cl,ds:[si]
mov ch,0
jcxz ok ; 如果cx=0就结束
;不等于0就把字符串复制过去
mov bl,cl
mov es:[di], bx
add di,2
inc si
jmp short put_str;短转移
ok : ret
code ends
end start