鱼C论坛

 找回密码
 立即注册
查看: 3555|回复: 12

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

[复制链接]
发表于 2011-11-16 21:49:44 | 显示全部楼层 |阅读模式
5鱼币
汇编原代码中的
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
必须加上我一开始说的程序返回的程序段才能返回,求解!

最佳答案

查看完整内容

楼主确定 这个可以? 我编译的这个已经卡在这里几分钟了。楼主的返回是碰巧? 跟踪的结果是这样的。。的确没有返回。 用debug跟踪发现。。单步执行到这里退出。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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

这个可以?


我编译的这个已经卡在这里几分钟了。楼主的返回是碰巧? 1.jpg



跟踪的结果是这样的。。的确没有返回。
用debug跟踪发现。。单步执行到这里退出。。
3.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-11-17 08:52:29 | 显示全部楼层

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

使用道具 举报

发表于 2011-11-17 14:07:22 | 显示全部楼层
壹个闲人 发表于 2011-11-17 08:52
很感谢你的关注,首先,它的确能正常运行并返回。但你说你在试验的过程中被卡住了,我看了你的截图后,发 ...

link  test;    这里有个分号。

link test.obj
的效果是一样的。
你可以试试。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-11-17 14:28:54 | 显示全部楼层
风扫地 发表于 2011-11-17 14:07
link  test;    这里有个分号。

link test.obj

我刚试了,效果的确一样。但你在CMD里跟踪调试,应该是不可以的。而且你调试的步骤,我看那指令,也不是程序的指令,要不你用U指令查一下,看正常编译了没?我的是正常编译了的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-11-17 14:31:14 | 显示全部楼层
反编译的结果是这样的,..
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-11-17 14:47:20 | 显示全部楼层
风扫地 发表于 2011-11-17 14:31
反编译的结果是这样的,..

我编译的结果是这样的:
QQ截图20111117144840.jpg

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-11-17 14:49:00 | 显示全部楼层
壹个闲人 发表于 2011-11-17 14:47
我编译的结果是这样的:

没有返回。。载入不同的段就有不同的指令。。只有最前面的指令是相同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2011-11-17 16:58:27 | 显示全部楼层

                               
登录/注册后可看大图

                               
登录/注册后可看大图
好奇怪。我打这个程序,进debug查看了下代码,然后退出,在运行这个文件,一开始是出错,估计地址给占用了,所以被T了出去。但是点了下关闭,再来运行一次,就能返回了。

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
Angel丶L + 2 + 2 感谢帮助楼主解答

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2011-11-17 18:22:07 | 显示全部楼层
eons 发表于 2011-11-17 16:58
好奇怪。我打这个程序,进debug查看了下代码,然后退出,在运行这个文件,一开始是出错,估计地址给占用了, ...

呵呵,疑问是进步的开始。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-4 22:22:50 | 显示全部楼层
有点晕。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-27 15:07:07 | 显示全部楼层
有点深奥,暂时不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-30 14:38:06 | 显示全部楼层
多多看看别人的疑问与回答对自己是种帮助。{:7_148:}支持各位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表