鱼C论坛

 找回密码
 立即注册
查看: 1806|回复: 4

[已解决]指令

[复制链接]
发表于 2017-11-22 13:42:26 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
mov sp,10h
mov ax,0123h
mov ds:[0],ax
call word ptr ds:[0]
执行后为何ip为0123,什么时候赋值ip的?执行call指令的时候不是先push lp吗,那说明应该在执行call指令前就应该赋值ip了啊,
最佳答案
2017-11-22 22:48:40
兄弟,你说的完全不是一个方向啊,你仔细看下书上说的咯

压入的是call指令下一条指令的IP地址。要不过程返回时,往哪里去呢,肯定是call的下一条指令。

0123是要跳转去的地方的IP值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-22 19:47:31 | 显示全部楼层
IP是指示下一条程序地址的。

看你提问情况,你是不是把IP误认为是SP了?

IP和CS配合。调用CALL指令的时候,先压栈,然后把ds:[0]的值给IP,程序跳转到CS:IP处执行。

DS:[0]的值是0123H,所以IP当然是0123H了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 19:51:31 | 显示全部楼层
执行call指令的时候不是先push lp吗?

没有任何指令可以在后面加IP寄存器,要改变IP寄存器的值,也就是说IP寄存器是不会出现在你编写的源程序里面的。

只有那些隐式指令才可以,比如类似jmp之类的强制或者条件跳转指令、比如CALL,比如ret,iret等等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-22 21:43:14 From FishC Mobile | 显示全部楼层
兰陵月 发表于 2017-11-22 19:47
IP是指示下一条程序地址的。

看你提问情况,你是不是把IP误认为是SP了?

是否可以理解为压入的是下一条指令的ip,而值为0123,所以ip为0123?也就是jmp cs,[0123]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 22:48:40 | 显示全部楼层    本楼为最佳答案   
兄弟,你说的完全不是一个方向啊,你仔细看下书上说的咯

压入的是call指令下一条指令的IP地址。要不过程返回时,往哪里去呢,肯定是call的下一条指令。

0123是要跳转去的地方的IP值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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