XXXXXXX 发表于 2012-7-2 13:24:59

第2章中CPU与CS与IP与指令的问题

CPU利用CS:IP从内存中读取一条指令到指令缓冲器中,IP增加该指令的长度。        指令以二进制码存储在内存中,
CPU读指令时如何判断读到什么时候才算读完一条        指令?


1000:0         mov ax,1000          (3个字节)
1000:3         sub ax,ax               (2个字节)
1000:5
CS=1000,ip=0,指令在内存中都是一串二进制数,CPU怎么知道第一次读3个字节,第2次读2个字节?

jianqitao 发表于 2012-7-2 13:25:00

本帖最后由 jianqitao 于 2012-7-2 14:41 编辑

我们知道cs:ip只能够指向一个内存,例如 mov ax,1 的机器码就是b8 01 00, cs:ip指向的只是b8这个内存,并不可能同时指向 b8 01 00 三个内存,所以:(下面是我的推测,并不代表完全真实)cpu要读入的指令是什么,和cpu要读入的指令长度是多少,关键就看cs:ip当前指向的内存值,cpu应该是先读入 b8 这个数值,然后再读入01,再读入00,每个内存都要读入和运算一次,cup对每个内村的读入和运算规则应该是一致的,至于怎么达成指令,那就要了解cpu的内部结构了,例如B8这个数据,我们还原成二进制就是10111000b,其中可以包含多个信息,例如第7和第8位代表继续往下读入内存的个数,10b就是十进制的2,也就是继续往下读入2个内存,也就完成了一条指令了,这些都是猜测,具体是怎么实现的要楼主自己去了解。如果你想了解CPU内部的结构和运算规则的话,自己去查找资料吧,因为这不是汇编入门的知识,我也建议楼主暂时不要深究

小马过河 发表于 2012-7-2 13:53:25

根据代码的第一个字节的数值,有的要看两个字节内容

变得不一样 发表于 2012-7-2 14:00:13

靠指令对应的机器码的长度 比如 mov ax,1000 对应的机器码B8E803   机器码位3个字节 IP就自动加+3指向下一条指令sub ax,ax 对应机器码2BC0 为2个字节 IP就加2

1144290241 发表于 2012-7-6 11:00:44

这个属于指令的最初定义了,指令的长度是隐含定义到机器码里面的,你要是想深入了解的话,可以看一下计算机组成原理,那里面有详细解释

XXXXXXX 发表于 2012-7-6 12:31:02

1144290241 发表于 2012-7-6 11:00 static/image/common/back.gif
这个属于指令的最初定义了,指令的长度是隐含定义到机器码里面的,你要是想深入了解的话,可以看一下计算机 ...

谢谢,我会去看下
页: [1]
查看完整版本: 第2章中CPU与CS与IP与指令的问题