出去玩了两天 一回来就碰到问题了!
本帖最后由 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:31000:3 e8 01 00 call s pop ip ip指向1000:71000:6 40 inc ax1000:7 58 s:pop ax ax=6
汗,,我打就没打进去,, 1000:3 e8 01 00 call s 跳过去执行完后就返回到下句inc执行,又不是要返回到本句再执行,当然要保存的是下句的偏移地址了。
1000:6 40 inc ax
1000:7 58 s:pop ax
本帖最后由 S_18 于 2013-7-29 19:34 编辑
Dardy 发表于 2013-7-29 18:26 static/image/common/back.gif
1000:3 e8 01 00 call s 跳过去执行完后就返回到下句inc执行,又不是要返回到本句再执行,当然 ...
还是有点不懂 是跳过去啊。 额太蠢 给我讲一下整个流程好吗? 这个你单步跑一次就明白了。。别人讲得再细,都不如你自己走一篇程序来得深刻 SilverMagic 发表于 2013-7-29 20:14 static/image/common/back.gif
楼主弄错了一点,call压入的不是当前指令地址,而是call后面下条指令的地址哦~
内存地址 机器码 ...
哈哈 我喜欢你的头像,但是为什么是PUSH IP=6啊。 SilverMagic 发表于 2013-7-29 20:20 static/image/common/back.gif
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? 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 DEF 10 565123 发表于 2013-7-29 20:28 static/image/common/back.gif
8H+8H=10H
8+8=16
16的16进制表示法就是10
恩 会了。谢谢 那个答案写着ip=7,搞得我奇怪了这么久
页:
[1]