当前位置: 首页 > news >正文

计算机组成原理第四——指令

机器指令

不同指令类型

        0地址

一地址

四地址

三地址操作的话就不需要下地址了,下地址的话就是指出下一条指令的地址位置

四地址解释

扩展地址码

因为在这里

一开始的话,这里16位,操作码加上a1,a2,a3共同构成了指令字长16位。对于2的4次方的话有16种选项,不过要去除1111这种情况,因为这是我们要扩展的字长了,在一开始标记为1111,然后不要了A1,这样我们也就构成了二进制码,不过也是以1111,为前提的。同样不要了,然后作为扩展码

扩展码需要注意的点

这里就是如果我们把1110作为二地址指令的操作码的话这样就不对了

如果是有12条的二地址指令的话

操作码

几种操作类型

本节回顾

数据存放

按边界对齐和不对齐

像在字的地址存储为8,不对齐的话是8 12 34 56,然后找的时候后面要在12这行补充7这个字了,

红色的是地址,寻址的首地址,蓝色的是数据,如78 12 34

指令寻址

顺序寻址

其实这里的二进制 是编译码

然后再到pc里面加1,转移到后面第二条

跳跃寻址

数据寻址

数据寻址种类

在立即寻址的执行流程中,由于操作数已经嵌入在指令中,因此不需要访问主存储器来获取操作数。这意味着,在执行一个使用立即寻址的指令时,通常只访问主存储器一次,即取指令阶段。
具体来说:

取指令阶段:CPU访问主存储器一次,从内存中取出指令。这个指令包含了操作码和立即数。
指令解码和执行阶段:不需要再次访问主存储器,因为操作数(立即数)已经包含在取出的指令中。
因此,对于使用立即寻址的单条指令,主存储器的访问次数为1次。这是立即寻址的一个优点,它可以减少内存访问次数,从而提高指令的执行速度。

直接寻址

000.。1=3,执行的指令就是累加3

间接寻址

EA的地址可以改变的,但是在指向的0....111不改变了

寄存器寻址通常比立即寻址的速度慢并不是因为寄存器本身访问速度慢,而是因为这两种寻址方式的比较并不是在相同的条件下进行的。以下是一些可能导致寄存器寻址看起来不如立即寻址快的原因:
指令解码复杂性:
立即寻址的指令在解码时不需要进一步的操作,因为操作数已经直接嵌入在指令中。
寄存器寻址需要在指令中指定一个寄存器的编号,然后CPU在执行阶段需要根据这个编号访问相应的寄存器。虽然这个过程非常快,但它比直接使用嵌入在指令中的数值稍微复杂一些。
指令长度:
立即寻址的指令可能因为包含立即数而更长,但这并不影响执行速度,因为操作数是直接可用的。
寄存器寻址的指令可能更短,因为它只需要指定寄存器的编号,而不是一个完整的数值。然而,这并不是速度差异的原因,而是指令编码的一个特点。
CPU设计:
在某些CPU设计中,立即寻址可能被优化以直接使用指令中的数据,而不需要通过寄存器。
寄存器寻址需要CPU的寄存器文件访问,尽管这个过程非常快,但相比直接从指令中获取数据,它可能引入了微小的延迟。
实际上,寄存器寻址通常仍然非常快,通常比访问主存储器要快得多。寄存器位于CPU内部,它们的访问速度远远高于主存储器。以下是一些关于寄存器寻址的事实:
寄存器寻址通常只需要一个CPU周期,因为它直接操作CPU内部的寄存器。
寄存器寻址比立即寻址慢的情况非常少见,通常它们的执行时间差异非常小,几乎可以忽略不计。
总的来说,寄存器寻址和立即寻址都是非常高效的寻址方式,它们之间的速度差异通常不大,而且在实际应用中,寄存器寻址通常也是非常快的。

在计算机体系结构中,ALU(算术逻辑单元)和ACC(累加器)都是CPU中的关键组件,它们各自承担着特定的角色。
ALU(Arithmetic Logic Unit):
ALU是负责执行所有的算术运算(如加减乘除)和逻辑运算(如与、或、非、异或等)的核心部件。它接收来自不同来源的数据,根据指令的要求对这些数据进行相应的操作,并将结果输出到指定的目的地。
在图中,ALU接收来自主存的操作数以及可能的ACC中的值,进行计算后,将结果存储回ACC或其他寄存器中。
ACC(Accumulator 累加器):
ACC是一种特殊的寄存器,主要用于存放算术运算和逻辑运算的结果。在一些简单的CPU设计中,许多运算都需要通过累加器来进行,即一个操作数位于累加器中,另一个操作数可以来自于主存或其他寄存器,运算的结果也会被放回到累加器中。
在图中,ACC用于暂时存储参与运算的一个操作数,并在运算完成后存储ALU的计算结果。
隐含寻址方式
隐含寻址意味着操作数的地址并没有显式地出现在指令中,而是由CPU内部的某些默认位置(比如ACC)来决定操作数的来源和目的地。这种方式简化了指令格式,减少了指令长度,但可能需要更多的硬件支持来处理这些隐含的信息。
优点和缺点
优点: 有助于缩短指令字长,使得程序占用的空间更小,同时也可以减少从内存取指令的时间消耗。
缺点: 需要额外的硬件资源来存储和管理这些操作数或其地址信息,增加了设计的复杂性。
总结来说,ALU负责具体的运算任务,而ACC则作为数据暂存的地方,二者协同工作以完成各种复杂的计算过程。隐含寻址方式通过利用像ACC这样的内部寄存器,简化了指令的设计和执行流程。

acc中的数字和alu中的相加

基质寻址

loa是相当于数据输送,输送的位置是隐含的,就是放到acc中

右边的d=00011199h是放在主存中的中,然后如果是每次都循环检查右边的

确定起始地址,然后在这个地址往下堆

如果我们发现那一部分被别人占掉了,那么我们往下移

变址寻址

相对寻址

堆栈寻址

总结

我们来解释下

指令格式就是如何用二进制表示指令,单子长和双字长,就是对机器字长的一倍或两倍,对于不同字长位数的指令可以用来表示不同的指令。

然后指令用来描述做什么呢,我们就分为几种操作类型 了,如对数据移动加减等

那么要操作的数据放在什么位置和类型的数据,用地址码找到。。又有不同的地址,分为一地址,二地址,三地址

,因为找到的数据经常放在主存中,我们可以看到,主存中的编码和寻址的地址方式

指令寻址的话,我们想要指令自动化的运行,那么通过pc的自动计数器来使得指令加。寻找到了要操作的指令之后,我们就要寻找我们要操作的数据了,那么就是我们要讲的数据寻址了

相关文章:

  • 人工智能、机器学习、深度学习和大语言模型之间的关系
  • C语言基础要素:安装 Visual Studio 2022
  • 代码随想录day19
  • 透彻理解:方差、协方差、相关系数、协方差矩阵及其应用
  • springBoot统一响应1.0版本
  • DataWhale组队学习 wow-agent task4
  • 四、综合案例(Unity2D)
  • 浏览器下载vue.js.devtools,谷歌浏览器和edg浏览器
  • DeepSeek学习教程 从入门到精通pdf下载:快速上手 DeepSeek
  • Spring MVC配置文件
  • 【Linux】Linux线程互斥与同步(接口篇)
  • Spring 容器
  • 【三十四周】文献阅读:DeepPose: 通过深度神经网络实现人类姿态估计
  • 自学网络安全(黑客技术)2025年 —100天学习计划,网络安全零基础入门到精通教程建议收藏!
  • Python 函数(传递任意数量的实参)
  • AI智算-k8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略
  • Vue02
  • hot100_300. 最长递增子序列
  • 使用FastAPI进行可视化部署
  • 应用层协议HTTP
  • 持续更新丨伊朗港口爆炸事件已致406人受伤
  • 苏迪曼杯即将在厦门打响,国羽向创纪录的14冠进军
  • 上海经信委:将推动整车企业转型,加强智能驾驶大模型等创新应用
  • 阿联酋启动第三届全球航空奖评选,奖金总额达百万美元
  • 鞍钢矿业党委书记、董事长刘炳宇调任中铝集团副总经理
  • 中国平安一季度净赚270亿降逾26%,营运利润增2.4%