assume cs:a
b segment
db 'Welcome to masm!',0
b ends
a segment
;此程序的行数和列数均从1开始。即行数为1-25;列数为1-80
start: mov ax,b
mov ds,ax
mov dh,20;代表行数
mov dl,3;代表列数
mov cl,2;绿色字符
mov si,0
mov di,0
mov ax,0b800h
mov es,ax;显存段地址
call showstr
mov ax,4c00h
int 21h
showstr:mov al,160
sub dh,1
;将行数减1存入dh中,以备计算该行的偏移地址。
mul dh;计算行的偏移地址,其结果在默认在AX中。
mov bx,ax;将ax的值赋予bx,以计算列地址
;计算列数地址
mov al,2;存入列数基值
mul dl;计算列地址,结果存在ax中。
sub ax,2
add ax,bx;行地址和列地址相加取得最终偏移地址
mov di,ax
mov bl,cl;存储字符颜色
s: mov cl,[si]
mov ch,0
jcxz p
mov al,[si]
mov es:[di],al
mov byte ptr es:[di+1],bl
add di,2
inc si
jmp short s
p:ret
a ends
end start |