组成原理

1.指令的分类

下面的这个图里面简单的进行了相关的指令的分类:诸如我们的这个四地址指令,三地址指令和我们的二地址指令以及我们的一地址指令,实际上也存在着零地址指令;

不同的地址的指令都存在这个OP码,也就是我们的操作码,换言之这个OP表示的就是我们的这个指令接下来会进行怎么样子的这个操作;

2.拓展操作码指令格式关于操作码的拓展,实际上涉及到的就是我们的不同长度的地址的编码的问题,这个其实是后缀编码,类似于我们的哈弗曼编码,通过这样的拓展的方式可以增加我们的指令的类型;

下面的这个是对于扩展的过程的演示:根据题目的要求去进行计算,这样的题目实际上需要你对于这个二进制比较熟悉,然后能够在这个扩展的情况下迅速的进行换算,大家可以自己演示一下,有问题私信我;

下面的这个题目就是拓展操作码指令在具体的题目里面的运用:利用上面的这个拓展操作码的思想;

[!note] 计算流程详细解释

16=6+5+5,也就是操作码实际上是6位的,这个需要我们自己能够分析出来,才可以进行下面的运算的过程;

2的6次方实际上可以表示的这个状态是64个,但是这个二指令之后60个,因此有4个进行下面的指令的扩展;

4*2的5次方等于128个,这个128表示的就是可以扩展的这个状态,但是里面存在一些留给零地址进行扩展了,因此这个最后的结果肯定不是128,而需要减去留给0地址进行扩展的;

256这个信息也是非常的有用,因为我们的这个256/32=8,也就是我们的这个里面8个留给零地址进行扩展了;

所以实际上我们的一地址指令的条数就是128里面减去留给0地址进行扩展的,也就是120条指令;

3.寻址方式3.1指令寻址分为顺序寻址和这个跳跃寻址的方式:

3.2数据寻址数据寻址的类型比较多,我使用导图进行总结,下面的内容我会使用导图+说明的方式展开;

首先是几种简单的寻址的方式:隐含寻址和这个立即数寻址(记得第一次学习这个内容的时候,我很不理解老师说的这个立即数是什么,今天我才知道这个立即数实际上就是我们的操作数的另外一个名字,因为我们的这个立即数寻址的过程是最快的,因此这个寻址方式里面的操作数也被称为这个立即数,仅此而已;

直接寻址和间接寻址的方式:这个非常的简单,一个找到的是操作数,一个找到的是操作数的地址;

下面的这个是寄存器寻址,这个也非常的简单,因为我们的这个寄存器里面存放的就是我们的数据:只不过寄存器里面的数据访问速度更快,因为寄存器是和CPU集成在一起的;

记下来的是偏移类的寻址的方式,格外注意一下:首先是基址寻址的方式,这个是BR不变,A是变化的,和下面的变址寄存器需要区别;

BR变化的时候也是我们的CPU进行控制的,我们的这个地址的低位存放的都是重要的内容,因此我们程序员从内存申请空间之类的,肯定是不会从0-100开始的,这个时候我们的BR比如设计一个1000,我们的偏移量是10的话,实际存储的这个地址就是10010,这样我们的这个数据就不会存储到低地址了;

实际上我们的内存管理也有这个使用,涉及到这个内存的紧凑技术,我们的360悬浮球(现在一些电脑上可能还有,可能10年前这个样子的悬浮球比较常见)显示我们的电脑当前的内存的使用的情况,我们点击一下之后进行这个内存的清理,这个里面的过程就是拼凑技术,这个时候我们的BR数值就会变化,这个事CPU进行控制的;

接下来的这个是我们的变址寻址方式,这个里面变化的是我们的变址寄存器里面的内容,上面的基址寄存器是BR寄存器里面的内容不变化,我们的变址寻址是A不变化,典型应用的情况之一就是我们的数组,支持随机的访问;

[!todo] 程序员是否可见

因此这个IX寄存器对于我们用户是不透明的,也就是用户可以看见,上面的基址寄存器是透明的,也就是我们是看不见的,因为那个的修改都是CPU进行的;

为什么是数组,我们的数组是随机访问,也就是按照下标记进行访问,A就可以理解为我们的这个数组的首地址,IX变化可以理解为我们的这个数组的下标不断的变化,这样就容易理解了;

下面的这个是相对寻址的方式:

4.指令集我们常见的指令集就是cisc和risc指令集,下面的这个是我们后面学习这个计算机组成原理需要把一些对应的词汇和两种指令集进行对应;

变址寻址方式:变址寄存器里面的内容1000H+形式地址2000H得到的结果就是3000H,我们到这个内存里面的3000H的位置取到的数据就是操作数;

下面的这个先进行变址寄存器寻址的过程,这个时候就是(IX)+形式地址D,这个时候拿到的就是间接地址,然后进行间接寻址,再对于这个(IX)+D取数据(也就是加括号)得到的是我们的有效的地址

我是阑梦清川,希望得到您的关注

代码语言:javascript复制