. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  有关ip跳转的反思与分析  [待解决] 回复[ 8次 ]   点击[ 598次 ]  
bzyxtsg
[帖 主]   [ 发表时间: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累不累,也许今天太冷,跳跳暖和下。
vvfire
[第1楼]   [ 回复时间:2011-01-21 16:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-18 13:14
进入死循环了
a88510
[第2楼]   [ 回复时间:2011-01-29 21:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-26 21:21
按T执行,你不执行就没事==
walykyy
[第3楼]   [ 回复时间:2011-03-01 11:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36
检测题的答案最少是4次吧,我算着也是3次,检测题对了4个题,错了一个题,估计就是这个错了
walykyy
[第4楼]   [ 回复时间:2011-03-02 22:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36
执行了6次,jmp一次读取指令,一次执行跳转,2个JMP一共是4次,一共就是6次了
andy2guo815
[第5楼]   [ 回复时间:2011-03-15 09:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-10 19:01
是六次的
yang1037483576
[第6楼]   [ 回复时间:2011-03-30 00:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-27 23:50
恩  是六次 没错 不过小心jmp
kim
[第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次。
foraolita
[第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的时候遇到它要多加上一次。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved