|
发表于 2012-9-3 09:22:20
|
显示全部楼层
早上好~ 楼主。
问题 :8086cpu中ip是怎么知道要自动加2或3的
分析, cpu 的执行指令的过程
1, 从cs:ip指向的内存单元读取指令, 读取的指令进入指令缓冲器
2, ip =ip+读取指令的长度, 从而指向下一条指令 (现在知道了吗?)
3,指行指令,重复上面的过程
比如:( 假设 )
cs = 1000 , ip = 0
(内存) (汇编指令对应的内存的内容) (汇编指令)
1000:0 b80000 ( 十六进制) mov ax, 0
1000:3 050100 add ax, 1
1000 : 6 40 inc ax
你看 cs = 1000 , ip = 0, 这时cpu将从cs:ip指向的内存单元读取指令, 读取的指令进入指令缓冲器, 也就是 b80000 (mov ax, 0), ip =ip+读取指令的长度, 也就是 ip = ip+3 因为 b80000 (mov ax, 0)占 3个 字节, 所以加3 , 加3后指向了 1000:3 ,这时cpu将从cs:ip指向的内存单元读取指令, 读取的指令进入指令缓冲器, 也就是 050100 (add ax, 1), ip =ip+读取指令的长度, 也就是 ip = ip+3 加3后指向了 1000:6 ,这时cpu将从cs:ip指向的内存单元读取指令, 读取的指令进入指令缓冲器, 也就是 40 (inc ax), ip =ip+读取指令的长度, 也就是 ip = ip+1
好了~ 楼主 我描述完毕 希望能帮助你 |
|