|
发表于 2016-12-16 10:33:48
|
显示全部楼层
本帖最后由 兰陵月 于 2016-12-16 13:04 编辑
所以按照上面图片中的解释:
内存地址 机器码 汇编指令
................ ..................... ..............
本处指令读取后执行前,CS:IP=1000:0000,本条执行执行完后,CPU执行CS:IP指向的指令
1000:0 b8 00 00 mov ax,0
1、读取b8 00 00,2、CS:IP=1000:0003,3、执行指令 mov ax,0
1000:3 e8 01 00 call s
1、读取e8 01 00,2、CS:IP=1000:0006(IP=IP+本条指令长度即3,所以IP=3+3),3、执行call s
CALL S执行过程:①将当前的IP或CS和IP压入栈:当前IP=6,所以将6压入栈;②转移到S处执行。
1000:6 40 inc ax
1000:7 58 s:pop ax
1、读取pop ax,2、CS:IP=1000:0008(此前经过CALL指令,IP的值已经变成了7);3、执行pop ax。
最后一条第2部为什么IP变成8,请详细阅读CALL指令的执行,里面解释了如何跳转,跳转的长度是多少,例如本例题中的短转移,标号S的值怎么来的,S实际上就是IP+0001,即6+1(这个6就是读取第2部指令完后IP的值,这个0001也就是e8 01 00的后两个字节),S在题目中代表跳转的偏移值,如果跳的更远,比如说跳到1000:8,则e8后面就应该是02 00,即e8 02 00。
不知道这样解释,楼主是否清楚~~~
诶~这个蛋疼的排版,你将就着看吧~~ |
评分
-
查看全部评分
|