题目:
代码:
assume cs:code
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
call show_str
mov ax,4c00h
int 21h
show_str:
mov ax,0b800h;保存起始地址!
mov es,ax;起始地址写入es寄存器中
mov al,160;一行80个字符,一共160个字节
dec dh;行号从0开始
mul dh;乘以行号就可以得到行号部分的偏移地址啦
mov bx,ax;保存所得到的的结果数据
mov al,2;单列2个字节
mul dl;相乘得出列占多少字节。
sub ax,2;一列是两个字节,那么结果减去2个字节也是无可厚非的!
add bx,ax;这次再相加就是全部的数据啦。
mov al,cl;就一种颜色
s: mov cl,[si] ;移动data区域中的第一个字符进入cl中进行检测
jcxz ok;检测是否走到了最后
mov dx,[si];放入数据
mov es:[bx],dx;放入es中
mov es:[bx+1],al
inc si
add bx,2
loop s;如果字符不是0,就是没有结束将会继续运行下去。
ok: ret
code ends
end start
代码截图:
运行结果:
OK