♂我是上帝♂ 发表于 2014-5-14 23:16:37

一个汇编程序调试时发现的问题

本帖最后由 ♂我是上帝♂ 于 2014-5-15 14:13 编辑



代码 1.asm
data segment
string1 db 'Move the cursor backward. '
string2 db 'Move the cursor backward. '
mess1 db 'Match.',13,10,'$'
mess2 db 'No Match!',13,10,'$'
data ends
prog segment
assume cs:prog, ds:data, es:data
start:
   mov ax,data
   mov ds,ax
   mov es,ax
   lea si,string1
   lea di,string2
   mov cx,26d
   cld
begin:
   cmpsb
   jneoutmess2
   loop begin
   jcxz outmess1
   
   
outmess1:
   lea dx,mess1
   mov ah,09h
   int 21h
   ;mov ah,0ah
   ;int 21h
   jmp close
outmess2:
   lea dx,mess2
   mov ah,09h
   int 21h
   ;mov ah,0ah
   ;int 21h   

   
close: mov ah,4ch
   int 21h
prog ends
end start
--------------------------------------------------------------
现象
当我编译 链接完成这个程序后,直接在dos里运行程序,没有输出字符串"match"。但是当我进入debug后用g命令调试该程序,得到输出,并用q命令退出后,再直接运行该程序后,就可得到输出。

直接运行

无输出字符串

debug调试后再退出,直接运行

我的问题是:
为什么会这样?进入debug再退出后改变了什么吗?使得程序能够输出。
求诸位大神不吝赐教。



枫界易城 发表于 2014-5-15 14:04:56

过来看看!,,,,,,,,

huha88 发表于 2014-6-30 14:59:31


我来拿奖励的:lol::lol:

七月你好 发表于 2014-6-30 15:17:06

还没学习到这里,来看看。
页: [1]
查看完整版本: 一个汇编程序调试时发现的问题