【计算机组成原理】指令系统

简介: 【计算机组成原理】指令系统

一、指令格式

1、指令格式概述

1)操作码、地址码

操作码(OP):指明了"做什么"

地址码(A):指明了"对谁动手"

有的指令不需要地址码(停机)

2)指令的定义

指令(机器指令):是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。

一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。

2、指令格式的分类

1)地址码数目

1. 零地址指令

零地址指令:OP

不需要操作数,如空操作、停机、关中断等指令

堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

2. 一地址指令

一地址指令:OP + $A_1$

1、只需要单操作数,如加1、减1、取反、求补等

指令含义:OP($A_1$) -> $A_1$

完成一条指令需要3次访存:取指 => 读$A_1$ => 写$A_1$

2、需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)

指令含义:(ACC)OP($A_1$) -> ACC

完成一条指令需要2次访存:取指 => 读$A_1$

3. 二地址指令

二地址指令:OP + $A_1$(目的操作数) + $A_2$(源操作数)

常用于需要两个操作数的算术运算、逻辑运算相关指令

指令含义:($A_1$)OP($A_2$) -> $A_1$

完成一条指令需要访存4次,取指 => 读$A_1$ => 读$A_2$ => 写$A_1$

4. 三地址指令

三地址指令:OP + $A_1$(目的操作数) + $A_2$(源操作数) + $A_3$(结果)

常用于需要两个操作数的算术运算、逻辑运算相关指令

指令含义:($A_1$)OP($A_2$) -> $A_3$

完成一条指令需要访存4次,取指 => 读$A_1$ => 读$A_2$ => 写$A_3$

5. 四地址指令

四地址指令:OP + $A_1$(目的操作数) + $A_2$(源操作数) + $A_3$(结果) + $A_4$(下一个指令的地址)

指令含义:($A_1$)OP($A_2$) -> $A_3$

$A_4$:下一条将要执行指令的地址

完成一条指令需要访存4次,取指 => 读$A_1$ => 读$A_2$ => 写$A_3$

正常情况下:取指令之后 PC+1,指向下一条指令

四地址指令:执行指令后,将PC的值修改为$A_4$所指地址

2)指令长度

指令字长:一条指令的总长度(可能会变)=> 半字长指令、单字长指令、双字长指令 => 指令字长会影响取指令所需时间

机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)

存储字长:一个存储单元中的二讲制代码位数(通常和MDR位数相同)

定长指令字结构:指令系统内所有指令的长度都相等

变长指令字结构:指令系统内所有指令的长度都不等

3)操作码的长度

定长操作码:指令系统中所有指令的操作码长度都相同

可变长操作码:指令系统中各指令的操作码长度可变

4)操作类型

1. 数据传送类

LOAD:把存储器中的数据放到寄存器中

STORE:把寄存器中的数据放到存储器中

2. 运算类
  1. 算术逻辑操作
  2. 移位操作
  3. 转移操作
    1. 无条件转移 JMP
    2. 条件转移jZ:结果为0
    3. J0:结果溢出
    4. JC:结果有进位
    5. 调用和返回 CALL和RETURN
    6. 陷阱Trap与陷阱指令
3. 输入输出类

CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)

二、扩展操作码指令格式

扩展操作码 = 定长指令字结构 + 可变长操作码

  1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
  2. 各指令的操作码一定不能重复

设地址长度为n,上一层留出m种状态,下一层可扩展出 $m*2^n$ 种状态

三、指令寻址

程序计数器PC:指明下一条条指令的存放地址

指令寻址:下一条欲执行指令的地址(始终由程序计数器PC给出)

1、顺序寻址

(PC) + "1" -> PC

2、跳跃寻址

指令修改PC的值

JMP 7:无条件转移,把PC中的内容改成7

四、数据寻址

数据寻址:确定本条指令的地址码指明的真实地址

求出操作数的真实地址,称为有效地址(EA)。

1、直接寻址

直接寻址:指令字中的形式地址A就是操作数的真实地址EA,即EA=A

一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果,共访存2次

优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。

缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。

2、间接寻址

间接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地 址,即EA = (A)

一条指令的执行:取指令访存1次,执行指令访存2次,暂不考虑存结果,共访存3次

优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数),便于编制程序(用间接寻址可以方便地完成子程序返回)

缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次导址需根据存储字的最高位确定几次访存)

3、寄存器寻址

寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,即 $EA=R_i$,其操作数在由指所指的寄存器内

一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果,共访存1次

优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算

缺点:寄存器价格昂贵,计算机中寄存器个数有限

4、寄存器间接寻址

寄存器间接寻址:寄存器R中给出的不是一个操作数,而是操作数所在主存单元的地址,即$EA=(R_i)$

一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果,共访存2次

特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)

5、隐含寻址

隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址

优点:有利于缩短指令字长

缺点:需增加存储操作数或隐含地址的硬件

6、立即寻址

立即寻址:形式地址A就是操作数本身,又称为立即数,一般采用补码形式。#表示立即寻址特征。

一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果,共访存1次

优点:指令执行阶段不访问主存,指令执行时间最短

缺点:A的位数限制了立即数的范围。如A的位数为n,且立即数采用补码时,可表示的数据范围为$-2^{n-1}$ ~ $2^{n-1}-1$

7、基址寻址

基址寻址:将CPU中基址寄在器(BR)的内容加上指令格式中的形式地址A,形成操作数的有效地址,即$EA=(BR)+A$

操作系统中的"重定位奇存器"就是"基址寄存器"

  1. 专门的基址寄存器BR
  2. 在指令中指明,要将哪个通用寄存器作为基址寄存器

优点:便于程序"浮动",方便实现多道程序并发运行。可扩大寻址范围。有利于多道程序设计,可用于编制浮动程序

基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(基地址),形式地址可变(偏移量)

当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。

8、变址寻址

变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即$EA=(IX)+A$。其中EX为变址寄存器(专用),也可用通用寄存器作为变址寄存器。

变址寄存器是面向用户的:在程序执行过程中,变址寄存器IX的内容可由用户改变(偏移量),形式地址A不变(基地址)

优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序

先基址后变址寻址:$EA=(IX)+((BR)+A)$

9、相对寻址

相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,$EA=(PC)+A$,其中A是相对于PC所指地址的位移量,可正可负,补码表示。

优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令。

ACC加法指令的地址码,可采用"分段"方式解决,即程序段、数据段分开

10、堆栈寻址

堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址

堆栈是存储器(或专用寄存器组)中一块特定的按栈管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)

五、CISC和RISC

CISC:一条指令完成一个复杂的基本功能

RISC:一条指令完成一个基本"动作",多条指令组合完成一个复杂的基本功能

80-20规律:典型程序中80%的语句仅仅使用处理机中20%的指令

目录
相关文章
|
存储 算法 固态存储
【计算机组成原理】存储系统
【计算机组成原理】存储系统
8300 0
【计算机组成原理】存储系统
|
算法 网络虚拟化 内存技术
408王道计算机组成原理强化——存储系统大题
408王道计算机组成原理强化——存储系统大题(下)
4096 3
408王道计算机组成原理强化——存储系统大题
|
存储 编译器 C语言
你知道数据在内存中是如何存储的嘛?(二)
你知道数据在内存中是如何存储的嘛?(二)
1383 0
|
8月前
|
存储 缓存 算法
软考通关密钥:计算机系统核心原理全解剖——软件设计师必懂的底层逻辑
专为软考中级软件设计师打造,深入解析CPU架构、存储体系、进制转换、原码补码、浮点数、寻址方式、校验码、RISC/CISC、流水线、Cache、中断、I/O控制、总线及加密技术等核心知识点,结合真题剖析高频考点,构建计算机系统底层知识体系,提升应试与实践能力。
591 1
软考通关密钥:计算机系统核心原理全解剖——软件设计师必懂的底层逻辑
|
存储 弹性计算 云计算
深入理解云计算:探索IaaS、PaaS和SaaS服务模型
云计算作为当代信息技术领域的关键驱动力,通过提供弹性计算资源和灵活的服务模型,极大地改变了企业和个人的计算方式。本文深入探讨了云计算的基础概念,着重介绍了三种主要的云计算服务模型:IaaS、PaaS和SaaS。
1884 0
|
缓存 物联网 数据库
如何帮助我们改造升级原有架构——基于TDengine 平台
一、简介 TDengine 核心是一款高性能、集群开源、云原生的时序数据库(Time Series Database,TSDB),专为物联网IoT平台、工业互联网、电力、IT 运维等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个高性能、分布式的物联网IoT、工业大数据平台。 二、TDengine 功能与组件 TDengine 社区版是一开源版本,采用的是 AGPL 许可证,它具备高效处理时序数据所需要的所有功能,包括: SQL 写入、无模式写入和通过第三方工具写入 S标准 SQL 查
492 12
|
Java 调度
ScheduledExecutorService:多线程任务调度
ScheduledExecutorService:多线程任务调度
ScheduledExecutorService:多线程任务调度
|
块存储 芯片 内存技术
计算机组成原理(4)-----Cache的原理及相关知识点(1)
计算机组成原理(4)-----Cache的原理及相关知识点
1714 2
|
存储 芯片
【计算机组成原理】总线
【计算机组成原理】总线
1148 0
【计算机组成原理】总线
|
存储 人工智能 C语言
计算机组成原理(5)----指令系统(1)
计算机组成原理(5)----指令系统
1115 1

热门文章

最新文章