|
主题 : : 有关ip跳转的反思与分析 [待解决] |
回复[ 8次 ]
点击[ 598次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-12-29 11:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:14
信誉值:6
注册日期:2010-12-20 13:34 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__3___。
1指令# 1000:0 mov ax,8
2指令# 1000:3 jmp ax
3指令# 1000:5 mov ax,0
4指令# 1000:8 mov bx,ax
5指令# 1000:10 jmp bx
1、 4
2、 5
3、 6
4、 7
解析:1000:0 起始地址 ip 0
1000:0 movax,8 读取1指令ip0-3(由0指向3) 指向2指令
第1次
1000:3 jmp ax 执行1指令, 指向3指令 ip 3-5
第2次
执行2指令:ip跳至8[1000:5 mov ax,0 跳过不执行,直接到ip=8处] 指向4指令 ip 5-8
第3次
1000:8 mov bx,ax 读取4指令 ip指向0a 指向5指令
第4次
1000:10 jmp bx 执行4指令 读取下一指令 ip指向0c(0a+2)
第5次
执行5指令 ip跳至8 指向4指令
第6次
至此到10处指令执行完毕,然后在地址8和10处不停的跳。跳来跳去,不知道cpu累不累,也许今天太冷,跳跳暖和下。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-01-21 16:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-01-18 13:14 |
|
|
|
|
|
[第2楼]
[ 回复时间:2011-01-29 21:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-01-26 21:21 |
|
|
|
|
|
[第3楼]
[ 回复时间:2011-03-01 11:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36 |
检测题的答案最少是4次吧,我算着也是3次,检测题对了4个题,错了一个题,估计就是这个错了 | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-03-02 22:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36 |
执行了6次,jmp一次读取指令,一次执行跳转,2个JMP一共是4次,一共就是6次了 | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-03-15 09:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-10 19:01 |
|
|
|
|
|
[第6楼]
[ 回复时间:2011-03-30 00:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-27 23:50 |
|
|
|
|
|
[第7楼]
[ 回复时间:2011-04-20 18:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:1
注册日期:2011-04-18 07:21 |
是 6次,但是不是按顺序执行的。
1指令# 1000:0 mov ax,8 //把8赋值给ax,IP++
2指令# 1000:3 jmp ax //读取jmp ax,IP++ ,执行jmp ax IP == 8.跳转到指令4 IP++
3指令# 1000:5 mov ax,0 //跳过
4指令# 1000:8 mov bx,ax //读取mov bx,ax IP++
5指令# 1000:10 jmp bx //读取jmp bx,IP++.执行jmp bx.IP++.至此进入死循环。
一共6次。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-11-18 16:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:0
注册日期:2011-11-18 12:33 |
一共是6次,cpu在执行命令的时候是先修改IP,然后执行命令。
指令# 1000:0 mov ax,8 修改一次IP,cs:ip指向下一条要执行的指令;
指令# 1000:3 jmp ax 先修改一次IP,然后jmp指令本身修改一次IP,jmp指令修改IP之后cs:ip指向
1000:8,所以下一次cpu直接从1000:8处读取指令;
指令# 1000:5 mov ax,0 这条直接跳过,不执行;
指令# 1000:8 mov bx,ax 先修改IP,然后执行指令;
指令# 1000:10 jmp bx 先修改IP,使之指向下一条指令,然后执行jmp命令修改一次指令。
所以一共有6次修改IP,现阶段如果不算jmp这个指令,每个指令都仅仅修改一次IP,jmp有点特殊,因为他本身就是修改IP的,所以如果算cpu修改几次IP的时候遇到它要多加上一次。 | | |