鱼C论坛

 找回密码
 立即注册
查看: 2840|回复: 5

汇编10.3监测点

[复制链接]
发表于 2014-10-26 18:44:21 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 Ъγ:_小ツ雨oο 于 2014-10-26 18:48 编辑

依据位移进行转移的call、 1.png 这个AX=6是哪里来的,
还有 call 标号(将当前的ip压栈后,转到标号处执行指令)
为什么要把当前的ip压入栈呢,直接call到标号处不就得了。
还有call执行时,要sp=sp-2,,ss*16+sp=ip  push ip  call 标号
这里 sp 为什么要-2.。   
求 详解 call  




最佳答案

查看完整内容

ax = 6 这里的'6'是栈顶的内容 call 不是将当前的IP压入栈,是将当前指令的下一条指令(inc ax)的IP压入栈中 因为一个栈是以字为单位(视情况而定)进行操作的,并且IP占两个字节(视情况而定),所以 sp 要减 2,为了让 sp 一直指向栈顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-26 18:44:22 | 显示全部楼层
本帖最后由 风之残月 于 2014-10-30 21:07 编辑

ax = 6 这里的'6'是栈顶的内容
call 不是将当前的IP压入栈,是将当前指令的下一条指令(inc ax)的IP压入栈中
因为一个栈是以字为单位(视情况而定)进行操作的,并且IP占两个字节(视情况而定),所以 sp 要减 2,为了让 sp 一直指向栈顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-27 07:59:26 | 显示全部楼层
ax=6是因为单步调试后,中断造成的,书本前面有过实验,中断后会在栈里保存一下数据。把ip压入栈是因为子程序返回cal时可以很方便的用ret指令从栈中找出返回原程序的ip地址。sp=sp-2建议你再看看前面的关于push和pop的栈的章节,是因为用push指令时,会先将sp-2,使栈顶指向下一个单元。因为栈都是以字位单位进行的,所以要减去2.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-27 17:08:56 | 显示全部楼层
1.  pop ax这一句是将栈顶的值(在这里值是6)给了ax
2.  call是将下一条命令的ip压入栈,不是将当前ip压入栈,这样做是为了配合ret命令,使call调用过程执行完成后可以继续执行call后面的指令(详见ret指令)
3.  调用call后要将ip入栈,而ip占两个字节,当然要把sp的值减少2呀(应为sp始终要指向栈顶)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-16 13:08:09 | 显示全部楼层
好吧,已经解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-17 22:48:42 | 显示全部楼层
不会啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 00:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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