鱼C论坛

 找回密码
 立即注册
查看: 2977|回复: 12

出去玩了两天 一回来就碰到问题了!

[复制链接]
发表于 2013-7-29 16:42:32 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 S_18 于 2013-7-29 17:40 编辑

汇编语言 检测点10.2 那个没看明白 AX为什么是6?  不是=3吗?
下面的程序执行后,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           inc ax
1000:7     58         s:pop ax       ax=6

最佳答案

查看完整内容

楼主弄错了一点,call压入的不是当前指令地址,而是call后面下条指令的地址哦~ 内存地址 机器码 汇编指令 执行后情况 1000:0 b8 00 00 mov ax,0 ;ax=0 ip指向1000:3 1000:3 e8 01 00 call s ;这步“相当”于下面3个汇编指令,这都是CPU做的 ;PUSH CS==1000压入inc ax这条指令的地址 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2013-7-29 16:42:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-29 18:14:59 | 显示全部楼层
汗,,我打就没打进去,, 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-29 18:26:49 | 显示全部楼层
1000:3     e8 01 00     call s      跳过去执行完后就返回到下句inc执行,又不是要返回到本句再执行,当然要保存的是下句的偏移地址了。
1000:6     40           inc ax
1000:7     58         s:pop ax      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-29 19:23:54 | 显示全部楼层
本帖最后由 S_18 于 2013-7-29 19:34 编辑

还是有点不懂 是跳过去啊。 额  太蠢 给我讲一下整个流程好吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-29 19:56:50 | 显示全部楼层
这个你单步跑一次就明白了。。别人讲得再细,都不如你自己走一篇程序来得深刻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-29 20:19:07 | 显示全部楼层
SilverMagic 发表于 2013-7-29 20:14
楼主弄错了一点,call压入的不是当前指令地址,而是call后面下条指令的地址哦~
内存地址    机器码        ...

哈哈 我喜欢你的头像,但是为什么是PUSH IP=6啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2013-7-29 20:20:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-29 20:22:58 | 显示全部楼层
SilverMagic 发表于 2013-7-29 20:20
1000:6     inc ax
因为call要压入下条指令的地址,而inc ax的地址是CS:IP == 1000:6,所以你懂的~

喔!知道了!但是 还有检测点10.3

内存地址   机器码           汇编指令            执行后情况

1000:0    b8 00 00          mov ax,0           ax=0,ip指向1000:3

1000:3    9a 09 00 00 10    call far ptr s     pop cs,pop ip,ip指向1000:9

1000:8    40                inc ax

1000:9    58                s:pop ax           ax=8h

                            add ax,ax          ax=10h

                            pop bx             bx=1000h

                            add ax,bx          ax=1010h
  add ax,ax 怎么是10H  ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-29 20:28:21 | 显示全部楼层
8H+8H=10H
8+8=16
16的16进制表示法就是10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8 9 A   B   C   D  E  F   10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-29 20:34:21 | 显示全部楼层
565123 发表于 2013-7-29 20:28
8H+8H=10H
8+8=16
16的16进制表示法就是10

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

使用道具 举报

头像被屏蔽
发表于 2013-7-29 20:39:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-21 21:05:08 | 显示全部楼层
那个答案写着ip=7,搞得我奇怪了这么久
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-19 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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