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
指令,就不会有那个信息了。
程序正常结束,说明程序运行正常,但不能保证结果正确。