+ -
当前位置:首页 → 问答吧 → 关于CS:IP寻址,王爽书不明白的问题。

关于CS:IP寻址,王爽书不明白的问题。

时间:2011-05-17

来源:互联网

我看王爽的书(第二版),第二章第10节“CS和IP”看不下去了。

第26页,

(1)8086CPU当前状态:CS中的内容为2000H,IP中的内容为0000H:
(2)内存20000H-20009H单元存放着可执行的机器码;
(3)内存20000H-20009H单元存放的机器码对应的汇编指令如下。

地址:20000H-20002H,内容:B8 23 01,长度:3 Byte,对应汇编指令:mov ax,0123H
地址:20003H-20005H,内容:BB 03 00,长度:3 Byte,对应汇编指令:mov bx,0003H
地址:20006H-20007H,内容:89 D8,长度:2 Byte,对应汇编指令:mov ax,bx
地址:20008H-20009H,内容:01 D8,长度:2 Byte,对应汇编指令:add ax,bx

好现在问题来了:我们知道内存单元里面的机器码可以是数据也可以是指令,从表面上看不出来的。但是那个长度 3 Byte,长度 2 Byte, 都是怎么来的,谁规定出来的。凭什么不是4 Byte, 1 Byte。从表面上无法分辨啊。

希望有明白人教我。


作者: manmount   发布时间: 2011-05-17

B8 23 01
不是占了3位
所以就是3 byte了

作者: MSOKD   发布时间: 2011-05-17

指令的编码长度是CPU设计者决定的。

作者: punkping   发布时间: 2011-05-17

按第一个字节确定是啥指令,再算指令占用的尺寸

作者: Areslee   发布时间: 2011-05-17

cpu自动算出来的

作者: Lactoferrin   发布时间: 2011-05-17

B8 23 01,这是三个字节,所以长度是3个byte。
89 D8,这是两个字节,所以长度是2个byte。
感觉这不难理解啊,从表面上很容易就看出来了。楼主怎么说从表面上看不出来呢?

作者: haojiahuo50401   发布时间: 2011-05-17

楼主的问题 非主流啊 !  

地址:20000H-20002H,内容:B8(该操作码的意思是给ax送立即数) 23(所送数据的低8位) 01(所送数据的高8位),长度:3 Byte(描述CPU做什么操作占1个字节+该操作所需要用到的2个字节),对应汇编指令:mov ax,0123H 
下面的就可以顺藤摸瓜了!
地址:20003H-20005H,内容:BB(类推 该操作码的意思就是告诉CPU往BX送立即数) 03 00,长度:3 Byte,对应汇编指令:mov bx,0003H
地址:20006H-20007H,内容:89 D8,长度:2 Byte,对应汇编指令:mov ax,bx
地址:20008H-20009H,内容:01 D8,长度:2 Byte,对应汇编指令:add ax,bx
  希望这样讲楼主能看明白!!

作者: weidao1210   发布时间: 2011-05-17

编码有规则的,看头一个字节就知道有没有第二个字节,看前两个字节就知道有没有第三个字节,就像UTF8一样。

别人也没有说CPU预先就知道是几个字节长的指令吧,可能CPU是一个字节一个字节的读入或者是每次固定4个字节读入进去识别的呢。

作者: kyotrue   发布时间: 2011-05-17