鱼C论坛

 找回密码
 立即注册
查看: 3292|回复: 10

检测点10.4

[复制链接]
发表于 2012-3-5 17:37:52 | 显示全部楼层 |阅读模式

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

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

x
程序执行后,ax的值是多少?
内存地址               机器码                      汇编指令
1000:0                b8 06 00                 mov ax,6
1000:2                  ff   d0                   call ax
1000 :5                    40                          inc ax
1000 :6                                                  mov bp,sp
                                                               add ax,[bp]


怎么知道SP的值???






                               
登录/注册后可看大图
该贴已经同步到 KK学脚本的微博
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-5 19:41:35 | 显示全部楼层
本帖最后由 莫名其妙 于 2012-3-5 19:54 编辑

这里你不需要知道sp具体是多少 !    为什么
这里不是让你计算sp 的 是为了让你知道 call 指令 执行的意思是什么


内存地址               机器码                      汇编指令
1000:0                b8 06 00                 mov ax,6 ; ax=6,ip指向1000:3
1000:3                  ff   d0                   call ax    ;push  ip  jmp 16位寄存器为ip的地方   ip指向1000:6 因为是call 16位寄存器 此时内保

                                                                                   存的是下一条指令的ip地址也就 是push进去的是0005

1000:5                  40                          inc ax  ;这条指令暂时跳过

1000 :6                                                  mov bp,sp  ;跳到这里执行  这里不管sp是多少 因为用不上 看下面



                                                               add ax,[bp]   ;这里 ds:[bp] +ax     ds:[bp] 内保存的是什么 ?
因为bp等与sp所以 sp指向的内存单元内保存的是什么?
  保存的是刚才call 命令时push进来的 下一段代码的地址 也就是ip=0005      
所以 这里 调用的跟sp的大小没关          这里只是调用sp指向内存单元的数据 0005

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2012-3-5 19:49:53 | 显示全部楼层
Capture.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-9 18:09:52 | 显示全部楼层
:D:D:D懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-14 17:27:47 | 显示全部楼层
莫名其妙 发表于 2012-3-5 19:41
这里你不需要知道sp具体是多少 !    为什么
这里不是让你计算sp 的 是为了让你知道 call 指令 执行的意思是 ...

高手. 一语惊醒梦中人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-16 12:14:00 | 显示全部楼层
莫名其妙 发表于 2012-3-5 19:41
这里你不需要知道sp具体是多少 !    为什么
这里不是让你计算sp 的 是为了让你知道 call 指令 执行的意思是 ...

你写错了吧 兄弟【bp】默认的段地址是SS 不是DS 是栈段 而不是数据段的 而你写的是ds:[bp]纯属误导人啊 我说我看了半天 都不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-16 12:53:33 From FishC Mobile | 显示全部楼层
爱人等于爱自 发表于 2012-7-16 12:14
你写错了吧 兄弟【bp】默认的段地址是SS 不是DS 是栈段 而不是数据段的 而你写的是ds:纯属误导人啊 我说我 ...

哥,你自己都说了。。bp默认是ss为段地址。那么,加了段前缀,ds:[bp],是强制使bp的段地址为ds。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-18 10:44:59 | 显示全部楼层
敉沧 发表于 2012-7-16 12:53
哥,你自己都说了。。bp默认是ss为段地址。那么,加了段前缀,ds:,是强制使bp的段地址为ds。

那有一点我不明白了哦 call ax 执行2步 第一步是将call下一条指令压入栈 那就是将 005压入栈段 而不是数据段,你强制使bp的段地址为DS段 试问DS段和栈段的段地址是一样的吗?也就是说 DS:bp和ss:bp指向的内容都是刚才的偏移地址005吗? 你怎么知道DS:bp存储的内容也是005呢? push命令执行的是压入栈中哦 如果DS和ss指向的地址不是同一个地址的话 那DS:bp指向的位置就是错误的哦 不知道我说的对不对 请赐教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-1-17 15:49:45 | 显示全部楼层
学习学习再学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-25 10:40:29 | 显示全部楼层
本帖最后由 远山 于 2016-4-25 10:41 编辑
爱人等于爱自 发表于 2012-7-18 10:44
那有一点我不明白了哦 call ax 执行2步 第一步是将call下一条指令压入栈 那就是将 005压入栈段 而不是数 ...


我觉得你说的对,确实不能用ds段,2楼的前辈应该是笔误写成了ds:sp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-30 12:40:14 | 显示全部楼层
了解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 01:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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