遇到一个汇编的问题

assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:mov dh,8h
mov dl,3h
mov cl,2h
mov ax,data
mov ds,ax
mov si,0h
call show_str
mov ax,4c00h
int 21h
show_str:
push cx
push si
push bx
push ax
push ds
push bp
push es
mov ax,0b800h
mov es,ax
mov ah,cl
mov cx,0h
mov si,0h
mov bx,0h
mov di,0h
mov bp,dx
s:mov cl,ds:[si]
jcxz ok1
mov al,ds:[si]
mov es:[di+bx],ax
inc si
add di,2h
mov cl,dh
jcxz ok2
dec dh
jmp short s
ok1:mov si,0h
jmp short s
ok2:mov di,0h
add bx,00a0h
mov cl,dl
jcxz ok
dec dl
mov al,dl
mov dx,bp
mov dl,al
jmp short s
ok:pop es
pop bp
pop ds
pop ax
pop bx
pop si
pop cx
ret
code ends
end start

上面的用masm编译,然后在debug上按g运行。的出来的却是:黑底绿字
Welcome t
o masm!we
program terminated normally
-0sm!welc
但是按照小弟的理解出现的应该不是这样的。而是这样的:黑底绿字
Welcome t
o masm!W
elcome to
masm!Wel

(program terminated normally)为什么会出现这么一句话?
是不是我写的,代码里面有什么错误。要怎么才能消除这个错误呢???
烦恼·啊~~
请大哥帮我看一下~~~~
是不是,在执行程序的时候碰到了,中断指令,使得出现这个效果??

程序运行正常,只是未达到预想的结果,说明在细节方面还需要改进和调试。

至于出现:program terminated normally
这个很正常。因为你是在debug里运行的,当执行了结束程序指令之后,debug就会显示这个信息。

进入debug之后,光标在第一行,也就是0行0列。输入g命令一回车,光标自然移到下一行。程序运行结束,也就是执行完
mov ax,4c00h
int 21h
指令之后,光标仍然在第二行,就是1行0列,但debug显示信息的时候,它是自动把光标移到当前位置的下一行,也就是第三行(2行0列),与程序运行结果混在了一起,从而给你造成了程序错误的错觉。

进debug之后,执行g11,不执行
mov ax,4c00h
int 21h
指令,就不会有那个信息了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-17
program terminated normally.
程序正常结束,说明程序运行正常,但不能保证结果正确。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网