鱼C论坛

 找回密码
 立即注册
查看: 3255|回复: 3

关于ret的疑问

[复制链接]
发表于 2017-6-13 10:07:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 songmingze 于 2017-6-13 10:15 编辑

疑问1  ip=ss*16+sp         ip这个寄存最大是16位     ss*16+sp  最大可能是20位   这个是不是有问题?
疑问2   ret   老师说先 执行1  ip=ss*16+sp      执行2   sp=sp+2。我认为先执行2,在执行1,参见下图,否则根本无法正确赋值
2017-06-13_094324.png
图片1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-13 10:40:17 | 显示全部楼层
本帖最后由 kyowjw01 于 2017-6-13 10:44 编辑

第一个问题,ip=ss*16+sp → ip = 0    (ss*16+sp)这个是代表栈段栈指针所指向的值,显然这边是0.所以会返回到codesg的起始地址,从而执行mov ax,4c00h int 21h来结束程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-13 10:43:24 | 显示全部楼层
第二个问题,栈的机制是这样子的,规定是不能改变的。当你取出0这个值(也就是ss*16+sp所指向的值)的时候,肯定会sp=sp+2,把你前面的push操作用pop还原,这里的话是指 指向你定义的栈的栈顶位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-13 10:46:35 | 显示全部楼层
建议你再看一下视频或者书。我讲的有可能有些不规范。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 02:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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