请汇编高手看一下这个显示10H到100H ASCII码的小程序

来源:百度知道 编辑:UC知道 时间:2024/06/16 15:33:16
code segment para'code'
assume cs:code
main proc
start: push ds
mov ax,0
push ax
mov cx,90h
mov bx,0
mov dl,10h
a: mov ah,02h
int 21h
inc bx
push dx
mov dl,0
mov ah,02h
int 21h
pop dx
inc dl
cmp bx,16
jnz b
sub bx,bx
push dx
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
pop dx
b: loop a
ret
main endp
code ends
end start

功能是显示ASCII码为10H到100H的15行X15列的所有字符。
我用MASM5.0汇编连接好后运行发现程序不断的执行,显示倒是正确,就是不停地显示,像黑客帝国那样。。。
不知道为什么,望高手指教
一楼能说说为啥这样改么,我按你改的调试运行就只能显示两个字符了。。。

按题意,应该是显示ASCII码【10H,FFH】的15行X16列的所有字符。之所以出现不停显示的现象,是因为你把显示字符数(CX,你设的初值不对,应该是240,不是90H)和控制行数混在一起了。这样做,既没有达到显示15行X16列的240个字符的结果,还多显示了144-9=135次。

把CX改成15就对了。内循环显示一行16个字符,外循环控制显示行数15,循环结束,自然就把这240个字符显示完整了。

inc dl
cmp bx,16
改成
inc dl
jnc Q1
mov ah,4ch
int 21h
Q1:cmp bx,16