壹个闲人 发表于 2011-11-16 21:49:44

没有程序返回的程序段,程序为什么能返回?

汇编原代码中的
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 21:49:45

本帖最后由 风扫地 于 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-17 08:52:29

风扫地 发表于 2011-11-16 23:27 static/image/common/back.gif
楼主确定




很感谢你的关注,首先,它的确能正常运行并返回。但你说你在试验的过程中被卡住了,我看了你的截图后,发现你的连接命令link test;这一行有问题,即TEST没有后缀名;另外,你的单步跟踪也仅仅是在CMD.EXE里进行的,而我们调试是在DEBUG里调试的。
关于我提的这个问题,我的初步想法是,源代码中全部是一些伪指令,它们都由编译器识别并转换为机器码,后来根据这个思路,我又做了一个试验,就是把OFFSET伪指令改写成非伪指令,这样就有两份功能一样的程序,其编译后的机器码应该相同,可对比结果并不相同。这个问题我会进一步跟进!

风扫地 发表于 2011-11-17 14:07:22

壹个闲人 发表于 2011-11-17 08:52 static/image/common/back.gif
很感谢你的关注,首先,它的确能正常运行并返回。但你说你在试验的过程中被卡住了,我看了你的截图后,发 ...

linktest;    这里有个分号。

link test.obj
的效果是一样的。
你可以试试。。

壹个闲人 发表于 2011-11-17 14:28:54

风扫地 发表于 2011-11-17 14:07 static/image/common/back.gif
linktest;    这里有个分号。

link test.obj


我刚试了,效果的确一样。但你在CMD里跟踪调试,应该是不可以的。而且你调试的步骤,我看那指令,也不是程序的指令,要不你用U指令查一下,看正常编译了没?我的是正常编译了的。

风扫地 发表于 2011-11-17 14:31:14

反编译的结果是这样的,..

壹个闲人 发表于 2011-11-17 14:47:20

风扫地 发表于 2011-11-17 14:31 static/image/common/back.gif
反编译的结果是这样的,..

我编译的结果是这样的:


风扫地 发表于 2011-11-17 14:49:00

壹个闲人 发表于 2011-11-17 14:47 static/image/common/back.gif
我编译的结果是这样的:

没有返回。。载入不同的段就有不同的指令。。只有最前面的指令是相同的。

eons 发表于 2011-11-17 16:58:27

桌面\2.jpg桌面\1.jpg好奇怪。我打这个程序,进debug查看了下代码,然后退出,在运行这个文件,一开始是出错,估计地址给占用了,所以被T了出去。但是点了下关闭,再来运行一次,就能返回了。

壹个闲人 发表于 2011-11-17 18:22:07

eons 发表于 2011-11-17 16:58 static/image/common/back.gif
好奇怪。我打这个程序,进debug查看了下代码,然后退出,在运行这个文件,一开始是出错,估计地址给占用了, ...

呵呵,疑问是进步的开始。

刺客信条 发表于 2013-6-4 22:22:50

有点晕。。。。

黄种人 发表于 2014-6-27 15:07:07

有点深奥,暂时不懂

七月你好 发表于 2014-6-30 14:38:06

多多看看别人的疑问与回答对自己是种帮助。{:7_148:}支持各位
页: [1]
查看完整版本: 没有程序返回的程序段,程序为什么能返回?