1.题目

2.源程序
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start:
mov dh,11 ;行
mov dl,70 ;列
mov cl,24h ;颜色属性
mov ax,data
mov ds,ax ;ds 指向数据段
mov si,0 ;用于迭代数据
call show_str ;IP入栈,调用子程序show_str
mov ax,4c00h ;子程序执行完后,IP出栈,执行该条命令
int 21h
show_str: ;子程序入口
mov ax,0B800H ;es 寄存器指向显存单元
mov es,ax
mov al,160 ;计算显存位置,dh 行,dl 列,一行160个字节
mov bl,dh ;ax目前没用了,用于保存乘法结果
mul bl
mov dh,0
add ax,dx ;显存位置还要加上列dl,ax的结果保存要显示的显存内存单元地址
mov bx,ax ;测试的时候ax不能用 [ax+di],把结果送到了bx
mov dh,cl ;显存单元用bx保存了,用dh颜色属性存放在高位中
mov di,0 ;循环显存内容
pushData:
mov cl,ds:[si]
mov ch,0
jcxz ok ;jczx功能:cx != 0,继续向下执行,cx=0,执行ok标号指令
mov dl,cl ;低位存放字符的ASCII码
mov word ptr es:[bx+di],dx ;
inc si
add di,2
jmp short pushData