社区
汇编语言
帖子详情
call指令运行后IP的变化情况
ZXDMCL
2007-06-24 10:22:53
设SP为1000H,若在代码段的0410H单元有一条CALL 0420H指令,执行该指令后,栈顶(SP)/(SP+1)为____。
结果是13H/04H.请问具体如何这具体是如何执行的?
...全文
574
5
打赏
收藏
call指令运行后IP的变化情况
设SP为1000H,若在代码段的0410H单元有一条CALL 0420H指令,执行该指令后,栈顶(SP)/(SP+1)为____。 结果是13H/04H.请问具体如何这具体是如何执行的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fallblood
2007-06-28
打赏
举报
回复
在调用call前会保存下条指令地址,以备在过程调用返回时将下条指令ret给IP使用.
...
指令地址1: call 0420
指令地址2: int 3 (假设)
保存指令地址2,然后进入call内部.如果有参数的话,也会push进参数.
由于这里没有使用push,因此栈顶部应该就是指令地址2所在地址.
再由16位汇编的内存模式来看,答案就是这个样子了.
32位看多了,16位的已经忘记光了...
ZXDMCL
2007-06-26
打赏
举报
回复
呵呵.谢谢啊.
我另外查了一些资料,也大概是这么讲的.
zhgwbzhd
2007-06-24
打赏
举报
回复
如果按照楼上的去解释,应该是没有任何问题的。
但是我刚开始看他的题的时候,还以为,他让说名栈顶sp的值呢,那样的话,当然没有办法知道栈顶的值是多少了。
如果他要知道栈顶保存的值,那就是IP了。
dongyi940333
2007-06-24
打赏
举报
回复
书上是这样写的:
CPU将CALL 0420H指令的机器码读入,IP指向了CALL 0420H后的指令,然后CPU执行CALL 0420H指令,将当前的IP值(就是CALL 0420H后面那条指令的偏移地址,由于CALL指令的长度为3,所以当前的IP值为0410+3=0413H)压栈,所以结果是13H/04H.
关于执行情况我是看的王爽的汇编语言第10章,初学,不对之处,请原谅!!
hustsatellite
2007-06-24
打赏
举报
回复
从这些信息不能推断,call指令会保存段和ip(远调用保存段)
有关call
指令
执行时CS和
IP
的值问题
1.问题:以下
指令
执行完后,ax的值? 内存地址 机器码 汇编
指令
执行后
情况
1000:0 b8 00 00 mov ax,0 ; ax=0
ip
指向1000:3 1000:3 e8 01 00 call s ; pop
ip
ip
指向1000:7 1000:6 40
汇编初学——call和ret
指令
的执行过程(函数的调用)
首先: cpu执行call
指令
时,相当于执行了(push
ip
) 和 (jmp near ptr 标号): (sp)=(sp)−2 ((ss)∗16+(sp))=(
ip
) (
ip
)=(
ip
)+16位位移 ret
指令
用栈中的数据,修改
IP
的内容,从而实现近转移; cpu执行ret
指令
时,(相当于pop
ip
): (
ip
)=((ss)∗16+(sp)) (sp)=(sp)+2 retf
指令
用栈中的数据,修改CS和
IP
的内容,从而实现远转移。 cpu执行retf
指令
时,(相当于pop
ip
和 pop cs):.
8086CPU-汇编
指令
ret与call
一、 ret
指令
: 通过栈中的数据(ss:sp)修改
ip
(cs:
ip
)的内容,实现近转移 ret
指令
等价于 pop
ip
(
ip
)=((ss)*16+(sp)) (sp)=(sp)+2 retf
指令
: 通过栈中的数据(ss:sp)修改cs和
ip
中的内容,实现远转移 retf
指令
等价于 pop
ip
pop cs (
ip
)=((ss)*16+(sp)) (sp)=(sp)+2 (cs)=((ss)*16+(sp)) (sp)=(sp)+2 二、 call s
指令
: 将当前
ip
(cs:
ip
)的值压入栈(ss
汇编中函数调用过程中,栈到底是怎样
变化
的?call、ret、
指令
分别有什么样的作用?
汇编中函数调用过程中,栈到底是怎样
变化
的?call、ret、
指令
分别有什么样的作用?
CALL和RET
指令
(1)
第十章(1)
汇编语言
21,496
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章