鱼C论坛

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

检测点10.4问题

[复制链接]
发表于 2014-10-18 13:49:36 | 显示全部楼层 |阅读模式

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

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

x

题目:下面的程序执行后,ax中的数据是多少?


[c-sharp] view plaincopy


  • 内存地址      机器码      汇编指令  
  • 1000:0        b8 00 00     mov ax,0  
  • 1000:2        ff d0         call ax  
  • 1000:5        40            inc ax  
  •       
  • 1000:6        58            mov bp,sp  
  •                              add ax,[bp]  
  • 怎么知道SP的值 的



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

使用道具 举报

发表于 2014-10-30 11:01:00 | 显示全部楼层
同问,好心人给讲讲:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-30 11:12:53 | 显示全部楼层
call ax ;这句为段内间接调用,其中ax是相对于当前代码段的偏移量,即6
;也就是说call ax 这句实际上是调用1000:6处的代码。但是cpu在执行1000:6处的代码之前会先将ip(下一条指令的偏移量,也就是5)入栈,以便能在call返回时找到执行call之前将要执行的下一条指令(即inc ax),然后再将6赋给ip(不过这点对此题没有影响)。

做完这些后,cpu开始执行1000:6处代码

mov bp,sp;栈顶指针保存至bp

add ax,[bp];这句是将栈顶的数据与ax中的值相加然后放到ax中,由于整

个过程中只有在call 之前将 ip入栈,所以此时[bp]应该为5,ax最后为11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-30 15:21:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-9 16:53:03 | 显示全部楼层
zhangleitj 发表于 2014-10-30 11:12
call ax ;这句为段内间接调用,其中ax是相对于当前代码段的偏移量,即6
;也就是说call ax 这句实际上是 ...

add ax,[bp]这句不应该是将ds:[bp]处的值与ax相加吗,为什么是ss:[bp]处的值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-11 15:43:51 | 显示全部楼层
lqjstc 发表于 2014-11-9 16:53
add ax,这句不应该是将ds:处的值与ax相加吗,为什么是ss:处的值?

这个在百度上搜一下就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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