这个程序给定的一些数据:dh行号8,dl 列号3,cl 为显示颜色2
要求在屏幕8行3列显示"Welcome to masm!",结尾0.
这题目显然要求进行字符是否等于0判断,需要用到jcxz命令。而cl用来显示颜色,那么显然不需要用loop 指令。
在做些题犯的错误是:1、把3列当做起始显示值来做为内存偏移地址,而第三列起始值应为4,所以dl +1
2、用了loop指令,本题因为把cl作为颜色显示值,用loop指令会改变cl,所以循环用jmp进行跳回进行赋值。
以下代码,运行能正常显示到屏幕。
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
mov ch,0
call h_l ;调用子程序获取bx值,也就是160*8+4,注意这句不要放到循环体中
s: push cx
mov cl,[si] ;将内存中的数值依次存入cl中,当cl=0时,执行ret
jcxz ok ;用来判断cx=0如果是,跳转
mov di,1
mov es:[bx],cl
pop cx
mov es:[bx+di],cl
inc si
inc di
add bx,2
jmp short s
ok: ret
h_l: mov al,160
mul dh
add al,dl
add al,1
mov bx,ax
ret
code ends
end start |