《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记

本文是关于学习计算机组成原理的个人笔记,重点介绍了唐朔飞教材中的输入输出系统、指令系统、CPU结构等内容。文章详细讲解了指令的一般格式,包括操作码和地址码的概念,探讨了不同地址数的指令格式及其优缺点,如四地址、三地址、二地址和零地址指令。此外,还讨论了指令字长、操作数类型、寻址方式,如立即寻址、直接寻址、间接寻址等,并对比了RISC和CISC技术的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面的话:此系列文章为笔者学习计算机组成原理时的个人笔记,分享出来与大家学习交流。使用教材为唐朔飞第3版,笔记目录大体与教材相同。


网课

计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili


笔记

《计算机组成原理》唐朔飞 第5章 输入输出系统 - 学习笔记_友人帐_的博客-优快云博客

《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记_友人帐_的博客-优快云博客

《计算机组成原理》唐朔飞 第8章 CPU的结构和功能 - 学习笔记_友人帐_的博客-优快云博客

《计算机组成原理》唐朔飞 第9章 控制单元的功能 - 学习笔记_友人帐_的博客-优快云博客

《计算机组成原理》唐朔飞 第10章 控制单元的设计 - 学习笔记_友人帐_的博客-优快云博客


课后习题答案

计算机组成原理(第三版)唐朔飞-课后习题(完整版)_计算机组成原理唐朔飞第三版答案_蓝净云的博客-优快云博客


哈尔滨工业大学计组实验

计算机组成原理实验一 运算器 预习报告_基本运算器实验_旅僧的博客-优快云博客

计算机组成原理实验二 存储系统 预习报告_旅僧的博客-优快云博客

计算机组成原理实验三 系统总线和具有基本输入输出功能的总线接口 预习报告_旅僧的博客-优快云博客

计算机组成原理实验四 微程序控制器 实验报告_旅僧的博客-优快云博客


第七章 指令系统

7.1 机器指令

7.1.1 指令的一般格式

在这里插入图片描述

1. 操作码

用来指明该指令所完成的操作,其位数反映了机器允许的指令条数。

(1)操作码的长度

  • 长度固定:将操作码集中放在指令字的一个字段内。便于硬件设计,指令译码时间段,广泛用于字长较长的精简指令集计算机(RISC)中。

  • 长度不固定:操作码分散在指令字的不同字段中。可以有效地压缩操作码的平均长度,在字长较短的微型计算机中广泛使用。

(2)扩展操作码技术

操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。

保留码点方式:

操作码的位数随着地址数的减少而增加。为了使计算机能够识别操作码的位数,保留1111字段,作为拓展标记(见下图,图中操作数的地址码为4位)。

在这里插入图片描述

零地址、一地址、二地址指的是操作数有几个。指令字长固定的情况下,操作码的位数 = 指令字长 - 地址字长。可以通过不断减少多地址指令的操作码种类,来增加少地址指令的条数。

2. 地址码

地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的“地址"可以是主存的地址,也可以是寄存器的地址,甚至可以是I/О设备的地址。

以主存地址为例,分析指令的地址码字段。通过下面的分析可见,通过利用一些硬件资源(ACC、PC等),可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围、减少访存次数,以提高机器性能。

(1)四地址指令

OP A 1 A_1 A1 A 2 A_2 A2 A 3 A_3 A3 A 4 A_4 A4

其中,OP为操作码; A 1 A_1 A1为第一操作数地址; A 2 A_2 A2为第二操作数地址; A 3 A_3 A3为结果地址; A 4 A_4 A4为下一条指令的地址。

  • 完成 ( A 1 ) O P ( A 2 ) → A 3 (A_1)OP(A_2)\rightarrow A_3 (A1)OP(A2)A3的操作。
  • 访问4次内存(取指令1次,取两个操作数2次,存放结果1次)。

(2)三地址指令

程序计数器PC既能存放下一条指令的地址,又可以自加1,使用PC代替 A 4 A_4 A4字段,得到三地址指令格式。

OP A 1 A_1 A1 A 2 A_2 A2 A 3 A_3 A3
  • 完成 ( A 1 ) O P ( A 2 ) → A 3 (A_1)OP(A_2)\rightarrow A_3 (A1)OP(A2)A3的操作。
  • 访问4次内存(取指令1次,取两个操作数2次,存放结果1次)。

(3)二地址指令

没必要将每次结果都存入主存,可以暂存在CPU的寄存器中,省去 A 3 A_3 A3字段,得到二地址指令。

OP A 1 A_1 A1 A 2 A_2 A2
  • 完成 ( A 1 ) O P ( A 2 ) → A 1 (A_1)OP(A_2)\rightarrow A_1 (A1)OP(A2)A1的操作。
  • 访问4次内存(取指令1次,取两个操作数2次,存放结果1次)。
  • 若完成 ( A 1 ) O P ( A 2 ) → A C C (A_1)OP(A_2)\rightarrow ACC (A1)OP(A2)ACC的操作,则访问3次内存。

(4)一地址指令

将一个操作数的地址隐含在运算器的ACC中,指令字中只需给出一个地址码。

OP A 1 A_1 A1
  • 完成 ( A C C ) O P ( A 1 ) → A C C (ACC)OP(A_1)\rightarrow ACC (ACC)OP(A1)ACC的操作。
  • 访问2次内存(取指令1次,取操作数1次)。

(5)零地址指令

无地址码,例如空操作(NOP)、停机(HLT)这类指令只有操作码;子程序返回(RET)、中断返回(IRET)这类指令操作数的地址隐含在堆栈指针SP中。

7.1.2 指令字长

指令字长取决于操作码的长度、操作数地址的长度和操作数的个数。

(1)指令字长固定

​ 可以设置为机器字长和存储字长相等,因此访问某个存储单元,便可取出一条完整的指令或一个完整的数据。

(2)指令字长可变

​ 一般按照字节的倍数变化。

7.2 操作数类型和操作类型

7.2.1 操作数类型

  • 地址:绝对地址无符号整数;相对地址有符号数。

  • 数字:定点数、浮点数、十进制数。

  • 字符:普遍使用ASCII码。

  • 逻辑数据:1真0假,参与逻辑运算。

7.2.2 数据在存储器中的存放方式

1. 大端序与小端序

在这里插入图片描述

(左:小端序;右:大端序)

2. 边界对准

​ 数据存放的起始地址是数据类型大小的整数倍。

  • 既保证了在一个存取周期可以进行访问,又不会过于浪费空间。

7.2.3 操作类型

1. 数据传送
目的指令示例
寄存器寄存器MOVE
寄存器存储器STORE; MOVE; PUSH
存储器寄存器LOAD; MOVE; POP
存储器存储器MOVE

置1、清0等。

2. 算数逻辑操作
  • 算术运算:加减乘除、增1、减1、求补(取负数);
  • 逻辑运算:与或非、异或;
3. 移位
  • 算术移位
  • 逻辑移位
  • 循环移位
4. 转移(跳转)

(1)无条件转移 JMP

(2)条件跳转

​ 根据条件码来进行跳转。

(3)调用CALL与返回RET

​ CALL用于从当前的程序位置转至子程序的入口;RETURN用于子程序执行完成后返回到原程序的断点。

(4)陷阱Trap与陷阱指令

​ 一旦运行过程中出现意外故障,计算机就发出陷阱信号,暂停当前程序的执行,转入故障处理程序进行相应的故障处理。

​ 陷阱指令一般不提供给用户直接使用,而是作为隐指令在出现意外故障时由CPU自动产生并执行。

5. 输入输出

​ 对于I/O单独编址的计算机而言,通常设有输入输出指令,它完成从外设中的寄存器读人-个数据到CPU的寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中。

6. 其他

其他包括等待指令、停机指令﹑空操作指令、开中断指令.关中断指令、置条件码指令等。

7.3 寻址方式

寻址方式是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法。

7.3.1 指令寻址

在这里插入图片描述

1. 顺序寻址

通过程序计数器PC加1,自动形成下一条指令的地址。(加1并不是实际上加1,而是加1个单位,使得指向下一条指令。可能是2字节、4字节、8字节等)

2. 跳跃寻址

通过转移类指令实现。

7.3.2 数据寻址

  • 数据寻址方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。

  • 形式地址A:指令字中的地址。通常都不代表操作数的真实地址。

  • 有效地址EA:操作数的真实地址,由寻址方式和形式地址共同来确定的。

在这里插入图片描述

假设指令字长、存储字长、机器字长相等。

1. 立即寻址

形式地址A不是操作数的地址,而是操作数本身(补码),称为立即数。使用#表示立即寻址特征标记。

在这里插入图片描述

2. 直接寻址

形式地址A就是操作数的真实地址EA。

在这里插入图片描述

  • 比较简单。
  • A的位数限制了操作数的范围;且修改操作数必须修改A的值。
3. 隐含寻址

指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。

例如,一地址格式的加法指令只给出一个操作数的地址,另一个操作数隐含在累加器ACC中,这样累加器ACC成了另一个数的地址。

在这里插入图片描述

  • 有利于缩短指令字长。
4. 间接寻址 @

形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,即EA=(A)。(指针)

在这里插入图片描述

  • 扩大了操作数的寻址范围(由A那么长变成了整个存储字长那么长)。
  • 多次间接寻址时用存储字的首位来标记间接寻址是否结束。1表示继续,0表示结束。故存储字首位不能作为EA的组成部分。
  • 便于编写程序,方便调用子程序跳转。多次寻址导致指令执行时间延长。
5. 寄存器寻址

在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,即 E A = R i EA=R_i EA=Ri。其操作数在由R所指的寄存器内。

  • 无须访存,减少了执行时间。
  • 地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间。

在这里插入图片描述

6. 寄存器间接寻址

寄存器中存放的是操作数所在主存单元的地址,即 E A = ( R i ) EA=(R_i) EA=(Ri)

在这里插入图片描述

7. 基址寻址

基址寻址需设有基址寄存器BR,其操作数的有效地址EA等于指令字中的形式地址与基址寄存器中的内容(称为基地址)相加,即EA=A+(BR)。

!BR的值由操作系统自动给出,用户不得修改。

基址寄存器分为显式和隐式两种:

  • 隐式:计算机内专门设有一个BR,使用时不必指出,体现出指令为基址寻址方式即可。
  • 显式:在一组通用寄存器中,由用户明确指出哪个寄存器用作基址寄存器,存放基地址。

在这里插入图片描述

  • 扩大操作数的寻址范围(将主存空间分为若干段,BR里存放段首地址,A里存放偏移量,采用段地址+段内偏移量来寻址)
8. 变址寻址

其有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=A+(IX)。

!IX的值由用户给定。

在这里插入图片描述

基址寻址与变址寻址的区别:

  • 基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,在程序的执行过程中其值是不可变的,而指令字中的A是可变的。
  • 在变址寻址中,变址寄存器的内容是由用户设定的,在程序执行过程中其值可变,而指令字中的A是不可变的。

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

9. 相对寻址 *

有效地址是将程序计数器PC与指令字中的形式地址A相加而得,即EA=(PC)+A。

  • 常用于跳转,A称为位移量,可正可负,用补码表示。
  • 转移地址不固定,可随PC的变化而变化,无论程序在主存的哪段区域都可正常运行。

在这里插入图片描述

10. 堆栈寻址

堆栈寻址要求计算机中设有堆栈。

堆栈既可用寄存器组(称为硬堆栈)来实现,也可利用主存的一部分空间作堆栈(称为软堆栈)。

以软堆栈为例,可用堆栈指针SP(Stack Point)指出栈顶地址,也可用CPU中一个或两个寄存器作为SP。操作数只能从栈顶地址指示的存储单元存或取。可见堆栈寻址也可视为一种隐含寻址,其操作数的地址总被隐含在SP中。堆栈寻址就其本质也可视为寄存器间接寻址,因SP可视为寄存器,它存放着操作数的有效地址。

SP的修改与主存编址方式有关。进栈-,出栈+,向低地址生长。

  • 按字编址:进出栈SP±1
  • 按字节编址
    • 存储字长16位:进出栈SP±2
    • 存储字长32位,进出栈SP±4

在这里插入图片描述

7.4 指令格式举例

7.4.1 需考虑因素

  • 指令系统的兼容性

  • 操作类型:包括指令数及操作的难易程度。

  • 数据类型:确定哪些数据类型可以参与操作。

  • 指令格式:包括指令字长、操作码位数、地址码位数、地址个数、寻址方式类型,以及指令字长和操作码位数是否可变等。

  • 寻址方式:包括指令和操作数具体有哪些寻址方式。

  • 寄存器个数:寄存器的多少直接影响指令的执行时间。

7.5 RISC技术

精简指令系统计算机 (Reduced Instruction Set Computer)
与之对应的为:CISC ,复杂指令系统计算机 (Complex Instruction Set Computer)

7.5.1 RISC的主要特征

  • 选用使用频度较高的一些简单指令,复杂指令的功能由简单指令来组合
  • 指令长度固定、指令格式种类少、寻址方式少
  • 只有LOAD/STORE指令访存
  • CPU中有多个通用寄存器
  • 采用流水技术一个时钟周期内完成一条指令
  • 采用组合逻辑实现控制器

7.5.2 CISC的主要特征

  • 系统指令复杂庞大,各种指令使用频度相差大
  • 指令长度不固定、指令格式种类多、寻址方式多
  • 访存指令不受限制
  • CPU中设有专用寄存器>
  • 大多数指令需要多个时钟周期执行完毕
  • 采用微程序控制器

7.5.3 RISC和CISC的比较

  • RISC更能充分利用VLSI芯片的面积
  • RISC更能提高计算机运算速度:指令数、指令格式、寻址方式少,通用寄存器多,采用组合逻辑,便于实现指令流水
  • RISC便于设计,可降低成本,提高可靠性
  • (缺点)RISC不易实现指令系统兼容
唐朔计算机组成原理1-10答案 第一 计算机系统概论 1. 什么是计算机系统、计算机硬件和计算机软件?硬件和软件哪个更重要? 解:P3 计算机系统:由计算机硬件系统和软件系统组成的综合体。 计算机硬件:指计算机中的电子线路和物理装置。 计算机软件:计算机运行所需的程序及相关资料。 硬件和软件在计算机系统中相互依存,缺一不可,因此同样重要。 5. 冯•诺依曼计算机的特点是什么? 解:冯•诺依曼计算机的特点是:P8 计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成; 指令和数据以同同等地位存放于存储器内,并可以按地址访问; 指令和数据均用二进制表示; 指令由操作码、地址码两大部分组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置; 指令在存储器中顺序存放,通常自动顺序取出执行; 机器以运算器为中心(原始冯•诺依曼机)。 7. 解释下列概念: 主机、CPU、主存、存储单元、存储元件、存储基元、存储元、存储字、存储字长、存储容量、机器字长、指令字长。 解:P9-10  主机:是计算机硬件的主体部分,由CPU和主存储器MM合成为主机。  CPU:中央处理器,是计算机硬件的核心部件,由运算器和控制器组成;(早期的运算器和控制器不在同一芯片上,现在的CPU内除含有运算器和控制器外还集成了CACHE)。  主存:计算机中存放正在运行的程序和数据的存储器,为计算机的主要工作存储器,可随机存取;由存储体、各种逻辑部件及控制电路组成。  存储单元:可存放一个机器字并具有特定存储地址的存储单位。  存储元件:存储一位二进制信息的物理元件,是存储器中最小的存储单位,又叫存储基元或存储元,不能单独存取。  存储字:一个存储单元所存二进制代码的逻辑单位。  存储字长:一个存储单元所存二进制代码的位数。  存储容量:存储器中可存二进制代码的总量;(通常主、辅存容量分开描述)。  机器字长:指CPU一次能处理的二进制数据的位数,通常与CPU的寄存器位数有关。  指令字长:一条指令的二进制代码位数。 8. 解释下列英文缩写的中文含义: CPU、PC、IR、CU、ALU、ACC、MQ、X、MAR、MDR、I/O、MIPS、CPI、FLOPS 解:全面的回答应分英文全称、中文名、功能三部分。 CPU:Central Processing Unit,中央处理机(器),是计算机硬件的核心部件,主要由运算器和控制器组成。 PC:Program Counter,程序计数器,其功能是存放当前欲执行指令的地址,并可自动计数形成下一条指令地址。 IR:Instruction Register,指令寄存器,其功能是存放当前正在执行的指令。 CU:Control Unit,控制单元(部件),为控制器的核心部件,其功能是产生微操作命令序列。 ALU:Arithmetic Logic Unit,算术逻辑运算单元,为运算器的核心部件,其功能是进行算术、逻辑运算。 ACC:Accumulator,累加器,是运算器中既能存放运算前的操作数,又能存放运算结果的寄存器。 MQ:Multiplier-Quotient Register,乘商寄存器,乘法运算时存放乘数、除法时存放商的寄存器。 X:此字母没有专指的缩写含义,可以用作任一部件名,在此表示操作数寄存器,即运算器中工作寄存器之一,用来存放操作数; MAR:Memory Address Register,存储器地址寄存器,在主存中用来存放欲访问的存储单元的地址。 MDR:Memory Data Register,存储器数据缓冲寄存器,在主存中用来存放从某单元读出、或要写入某存储单元的数据。 I/O:Input/Output equipment,输入/输出设备,为输入设备和输出设备的总称,用于计算机内部和外界信息的转换与传送。 MIPS:Million Instruction Per Second,每秒执行百万条指令数,为计算机运算速度指标的一种计量单位。 9. 画出主机框图,分别以存数指令“STA M”和加法指令“ADD M”(M均为主存地址)为例,在图中按序标出完成该指令(包括取指令阶段)的信息流程(如→①)。假设主存容量为256M*32位,在指令字长、存储字长、机器字长相等的条件下,指出图中各寄存器的位数。 解:主机框图如P13图1.11所示。 (1)STA M指令:PC→MAR,MAR→MM,MM→MDR,MDR→IR, OP(IR) →CU,Ad(IR) →MAR,ACC→MDR,MAR→MM,WR (2)ADD M指令:PC→MAR,MAR→MM,MM→MDR,MDR→IR, OP(IR) →CU,Ad(IR) →MAR,RD,MM→MDR,MDR→X,ADD,ALU→ACC,ACC→MDR,WR 假设主存容量256M*32位,在指令字长、存储字长、机器字长相等的条件下,ACC、X、IR、MDR寄存器均为32位,PC和MAR寄存器均为28位。 10. 指令和数据都存于存储器中,计算机如何区分它们? 解:计算机区分指令和数据有以下2种方法: 通过不同的时间段来区分指令和数据,即在取指令阶段(或取指微程序)取出的为指令,在执行指令阶段(或相应微程序)取出的即为数据。 通过地址来源区分,由PC提供存储单元地址的取出的是指令,由指令地址码部分提供存储单元地址的取出的是操作数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友人帐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值