遇到一个汇编的问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 12:07:40
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

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

至于出现: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
指令,就不会有那个信息了。

program terminated normally.
程序正常结束,说明程序运行正常,但不能保证结果正确。