题目:
代码:
assume cs:codedata segmentdb 'Welcome to masm!',0data endscode segmentstart: mov dh,8mov dl,3mov cl,2mov ax,datamov ds,axmov si,0call show_strmov ax,4c00hint 21hshow_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],alinc siadd bx,2loop s;如果字符不是0,就是没有结束将会继续运行下去。ok: ret
code ends
end start
代码截图:
运行结果:
OK