zhoutong 发表于 2011-11-5 17:51:44

监测点2.3的一个问题,迷糊了!头有点晕!

本帖最后由 zhoutong 于 2011-11-5 17:52 编辑

下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP的值是多少?
Mov ax,bx
sub ax,ax
jmp ax

第一,这里面的ax和bx没有一个固定的值这个怎么算?
第二 CS:IP把地址段和偏移地址送到地址加法器(地址段 * 16 + 偏移地址 = 物理地址) 然后在送到输入输出控制电路,输入输出控制电路把20位地址经过地址总线送到内存并找到地址,然后经过数据总线又到输入输出控制电路,输入输出控制电路把找到的地址送到指令缓冲器,指令缓冲器把找到的地址送到执行控制器,最后执行控制器把找到的地址赋给AX。
按照这个思路我的思想是
先把bx的值移动到ax然后是ax的值减去ax的值赋给ax最后修改ip的值依次循环!?
这个怎么求没有具体的数值?

yipwing 发表于 2011-11-5 18:06:38

本帖最后由 yipwing 于 2011-11-5 18:11 编辑

你管他有没有值,cpu认的是指令..
mov ax,bx 第一次
sub ax,ax 第二次
jmp ax IP第三次   
第四次在jmp后的地方
补充下: IP指向的是下条指令...那么cpu修改IP也就是执行指令后修改IP...
注意题目的问题...

既然这样,我把答案给你吧..
第一次:读取mov ax,bx之后第二次:读取sub ax,ax之后第三次:读取jmp ax之后第四次:执行jmp ax修改IP

zyp2011_mit 发表于 2011-11-5 19:08:31

上面说的有道理~

18555587 发表于 2011-11-5 19:14:01

Mov ax,bx(只修改一次IP)
sub ax,ax(只修改一次IP)
jmp ax(加入指令缓冲器修改一次IP,执行后又修改一次IP)
所以一共4次修改IP

zhoutong 发表于 2011-11-5 19:49:32

谢谢版主老大!
我明白了!
页: [1]
查看完整版本: 监测点2.3的一个问题,迷糊了!头有点晕!