鱼C论坛

 找回密码
 立即注册
查看: 2146|回复: 5

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

[复制链接]
发表于 2012-7-2 13:24:59 | 显示全部楼层 |阅读模式
1鱼币
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个字节?

最佳答案

查看完整内容

我们知道cs:ip只能够指向一个内存,例如 mov ax,1 的机器码就是b8 01 00, cs:ip指向的只是b8这个内存,并不可能同时指向 b8 01 00 三个内存,所以:(下面是我的推测,并不代表完全真实)cpu要读入的指令是什么,和cpu要读入的指令长度是多少,关键就看cs:ip当前指向的内存值,cpu应该是先读入 b8 这个数值,然后再读入01,再读入00,每个内存都要读入和运算一次,cup对每个内村的读入和运算规则应该是一致的,至于怎么达成指令, ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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内部的结构和运算规则的话,自己去查找资料吧,因为这不是汇编入门的知识,我也建议楼主暂时不要深究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-2 13:53:25 | 显示全部楼层
根据代码的第一个字节的数值,有的要看两个字节内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-2 14:00:13 | 显示全部楼层
靠指令对应的机器码的长度 比如 mov ax,1000 对应的机器码B8E803   机器码位3个字节 IP就自动加+3指向下一条指令  sub ax,ax 对应机器码2BC0 为2个字节 IP就加2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-6 11:00:44 | 显示全部楼层
这个属于指令的最初定义了,指令的长度是隐含定义到机器码里面的,你要是想深入了解的话,可以看一下计算机组成原理,那里面有详细解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-6 12:31:02 | 显示全部楼层

谢谢,我会去看下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 09:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表