没有程序返回的程序段,程序为什么能返回?
汇编原代码中的mov ax, 4c00h
int 21h
程序段实现的功能是程序返回。但下面的程序里没有该程序返回的程序段:
assume cs:codesg
codesg segment
start:mov ax, offset start
s:mov ax, offset s
codesg ends
end start
我的问题就是,上面的源代码编译运行后,为什么能正常返回呢?
另外,我做了一个试验,就是加了一行指令,则程序就不能正常返回了:
assume cs:codesg
codesg segment
start:mov ax, offset start
s:mov ax, offset s
mov ax, 10h
codesg ends
end start
必须加上我一开始说的程序返回的程序段才能返回,求解!
本帖最后由 风扫地 于 2011-11-16 23:40 编辑
楼主确定
assume cs:codesg
codesg segment
start:mov ax, offset start
s:mov ax, offset s
codesg ends
end start
这个可以?
我编译的这个已经卡在这里几分钟了。楼主的返回是碰巧?
跟踪的结果是这样的。。的确没有返回。
用debug跟踪发现。。单步执行到这里退出。。
风扫地 发表于 2011-11-16 23:27 static/image/common/back.gif
楼主确定
很感谢你的关注,首先,它的确能正常运行并返回。但你说你在试验的过程中被卡住了,我看了你的截图后,发现你的连接命令link test;这一行有问题,即TEST没有后缀名;另外,你的单步跟踪也仅仅是在CMD.EXE里进行的,而我们调试是在DEBUG里调试的。
关于我提的这个问题,我的初步想法是,源代码中全部是一些伪指令,它们都由编译器识别并转换为机器码,后来根据这个思路,我又做了一个试验,就是把OFFSET伪指令改写成非伪指令,这样就有两份功能一样的程序,其编译后的机器码应该相同,可对比结果并不相同。这个问题我会进一步跟进! 壹个闲人 发表于 2011-11-17 08:52 static/image/common/back.gif
很感谢你的关注,首先,它的确能正常运行并返回。但你说你在试验的过程中被卡住了,我看了你的截图后,发 ...
linktest; 这里有个分号。
和
link test.obj
的效果是一样的。
你可以试试。。 风扫地 发表于 2011-11-17 14:07 static/image/common/back.gif
linktest; 这里有个分号。
和
link test.obj
我刚试了,效果的确一样。但你在CMD里跟踪调试,应该是不可以的。而且你调试的步骤,我看那指令,也不是程序的指令,要不你用U指令查一下,看正常编译了没?我的是正常编译了的。 反编译的结果是这样的,.. 风扫地 发表于 2011-11-17 14:31 static/image/common/back.gif
反编译的结果是这样的,..
我编译的结果是这样的:
壹个闲人 发表于 2011-11-17 14:47 static/image/common/back.gif
我编译的结果是这样的:
没有返回。。载入不同的段就有不同的指令。。只有最前面的指令是相同的。 桌面\2.jpg桌面\1.jpg好奇怪。我打这个程序,进debug查看了下代码,然后退出,在运行这个文件,一开始是出错,估计地址给占用了,所以被T了出去。但是点了下关闭,再来运行一次,就能返回了。
eons 发表于 2011-11-17 16:58 static/image/common/back.gif
好奇怪。我打这个程序,进debug查看了下代码,然后退出,在运行这个文件,一开始是出错,估计地址给占用了, ...
呵呵,疑问是进步的开始。 有点晕。。。。 有点深奥,暂时不懂 多多看看别人的疑问与回答对自己是种帮助。{:7_148:}支持各位
页:
[1]