[计算机组成原理] 第五章 指令系统

第五章 指令系统

5.1 机器指令

5.1.1 相关概念

指令(e.g. ADD a1 a2):控制计算机执行某种操作的命令

机器语言(01码):计算机硬件实体直接表示控制信息的语言

机器语言程序:用机器语言编制的程序

一条指令就是机器语言中的一个语句

指令系统(指令集):一台计算机所能执行的全部指令的集合

指令系统必须是完备的,是计算机体系结构的核心,计算机硬件设计的主要依据。计算机软件设计的基石

一台计算机指令系统的优劣,直接影响着计算机系统的性能。


5.1.2 机器指令格式

指令字:一条指令的二进制代码(机器语言中的一个语句)

指令格式设计内容

  • 指令字的长度
  • 划分指令字字段,并加以定义

指令字长度:一个指令字的二进制位数,分为

  • 定长指令字

  • 可变长指令字(根据指令功能变化)

一般把最常用指令设计成短指令格式(e.g. 单字长指令)


5.1.3 指令的地址码

  • 主存储器(存储器单元地址)

  • CPU寄存器(通用寄存器or专用寄存器:编号)

  • I/O接口寄存器(包括数据寄存器和状态寄存器。若操作数在接口寄存器中,指令中要给出端口地址)

  • 堆栈


5.1.4 N地址指令

  • 四地址指令:OP A1 A2 A3 A4

功能:(A1)OP(A2) -> A3 A4指示下条指令地址

  • 三地址指令:OP A1 A2 A3

省去A4,隐式表示下一条指令地址

一般使用PC(Programme Counter 程序计数器),PC自动增量,增量值为执行指令的长度(按字节编址为多少字节,按字编址为按多少字)

功能:(A1)OP(A2) -> A3

  • 二地址指令:OP A1 A2

功能:(A1)OP(A2) -> A1

分类:S-S型——storage-storage——A1、A2均为存储器地址

​ R-R型——register-register——A1、A2均为寄存器地址(常用,RISC所有运算)

​ R-S型——register-storage——一个是寄存器地址,一个是存储器地址(MIPS系统的数据加载/存储 lw/sw)

  • 一地址指令:OP A

分为 单操作数指令双操作数指令

单操作数指令:NEG,INC,DEC等——OP(A) -> A

双操作数指令:另一个操作数采用隐含寻址,如:隐含在约定的累加器AC中——(AC) OP (A) -> AC

  • 零地址指令:OP

分为不需操作数的控制型指令运算型零地址指令

不需操作数的控制型指令:如HALT、WAIT、NOP

运算型零地址指令:操作数隐含在堆栈


5.1.5 指令的操作码

分为定长编码变长编码

定长编码:位数和位置固定(在字长较长的大、中型机以及超小型机中广泛使用)

变长编码:可以用较短的指令字长表示更多的操作类型(用于早期的微小型机Intel8086)


拓展操作码法(最常用的变长操作码的编码方式)

当指令长度一定时,将操作数地址多的指令选择短的操作码,操作数地址少的指令选择较长操作码。

使用频率高的指令使用短的操作码,使用频率低的指令使用较长的操作码


5.2 寻址方式

分为指令地址的寻址操作数地址的寻址

5.2.1 指令的寻址方式

  • 顺序方式

    (PC)+ 增量 -> PC

    增量多少取决于一条指令所占的存储单元数

  • 跳越方式

    程序发生转移时,修改PC的内容


5.2.2 操作数的寻址方式

相关概念

形式地址:指令中给出的地址

有效地址:操作数的实际地址(由形式地址经过一定运算得到)

讨论寻址方式的目的: (1) 缩短指令长度 (2) 扩大操作数的寻址空间 (3) 提高编程的灵活性


一般格式: OP MOD A (OP:运算符 MOD:寻址方式 A:形式地址)

1. 立即寻址

OP MOD D

形式地址直接给出操作数D(立即数),一般用于赋初值

Data = D

e.g. Intel 8086: MOV AX,2000H


2. 直接寻址

在这里插入图片描述

OP MOD A

形式地址A给出操作数的有效地址EA(主存中)

EA = A Data = (A)

e.g. Intel 8086:MOV AX,[2000H]


3. 间接寻址

在这里插入图片描述

OP MOD A

形式地址A给出EA所在存储单元的地址

EA = (A) Data = ((A))

e.g. Intel 8086,按字节编址,机器字长16位

在这里插入图片描述

在本例中,形式地址2000H,去内存2000H中找EA,EA为16位的3000H,然后再去3000H中获得数据50H


4. 多级间接寻址

在这里插入图片描述

需要给地址加上地址指示字0/1 EA = (((A)))


5. 寄存器直接寻址

在这里插入图片描述

OP MOD Ri

地址码直接给出某一通用寄存器的编号,操作数在通用寄存器Ri中

EA = Ri Data = (Ri)


6. 寄存器间接寻址

在这里插入图片描述

OP MOD Ri

地址码直接给出某一通用寄存器的编号,操作数的有效地址在通用寄存器Ri中

EA = (Ri) Data = ((Ri))


7. 变址寻址

在这里插入图片描述

OP MOD Rx A

将指定的变址寄存器Rx的内容和指令字的形式地址A相加,得到有效地址。

EA = A + (Rx) Data = (A + (Rx))

变址寄存器中的内容自动增量或减量

自增型变址寻址:先取后加 (R1)+ R1里的值加

自减型变址寻址:先减后取 -(R1) R1里的值减

一般用于 数组、向量、字符串。

特点: 变址寻址是面向用户的,主要用于访问数组、向量、字符串等成批数据,用以解决程序循环控制问题

变址寄存器中的内容可以进行自动增量/减量!


8. 相对寻址

在这里插入图片描述

OP MOP Disp

将PC的当前内容"PC+1"与指令中的形式地址Disp相加,形成有效地址EA

EA = (PC) + disp = K + 1 + Disp Data = (K + 1 + Disp)

Disp一般用补码表示,如果Disp是相对于PC的字位移,如果是按字节编址需要加Disp * (机器字长 / 8)

特点:(1)在相对寻址中,只要位移量Disp不变,就可实现指令带着数据在存储器中“搬家”,有利于实现程序再定位

(2)经常用于转移指令


9. 基址寻址

在这里插入图片描述

OP MOP Rb Disp

基址寄存器Rb中的内容(基地址)和形式地址Disp相加,形成有效地址EA

EA = (Rb) + Disp Data = ((Rb) + Disp)

特点: 基址寻址是面向系统的,主要用于逻辑地址到物理地址的转换

用户在编程时,不知道程序放在哪一个实际物理地址中,系统程序给每个用户程序分配一个基准地址

(与变址寻址比较)

基址寄存器中的内容不进行自动增量/减量!

10. 基址+变址寻址

在这里插入图片描述

在这里插入图片描述

11. 堆栈寻址

寄存器堆栈

介绍: 一组专门用于堆栈的寄存器,每个寄存器保存一个字. 相邻寄存器具有位对位的移位功能.

特点: 寄存器堆栈的存取速度快, 不占用主存空间, 但堆栈的容量固定, 不易拓展

存储器堆栈

介绍: 一组连续的存储器单元的有序集合, 固定or浮动, 可定义多个

堆栈指针SP: 一个寄存器或存储单元, 存放永远指向堆栈栈顶的地址

堆栈两种生成方式

(1) 自底向上生成方式, 栈底占高地址, 栈顶占低地址

(2) 自顶向下生成方式, 相反

在这里插入图片描述

工作方式

入栈: 先动SP, 再放数据

出栈: 先弹数据, 再动SP

5.2.3 寻址方式码的省略

当地址部分的地址为单一时(指定只有一种),如寄存器寻址,则可以省略寻址方式,直接给出寄存器的编号。

5.3 指令类型和功能

5.3.1 设计风格

CISC: 复杂指令系统的计算机

思想: 增强指令的功能, 增加指令系统的复杂程度来提高计算机系统性能

RISC: 精简指令系统的计算机

思想: 从简化指令系统, 优化硬件设计的角度来提供计算机系统性能

Complex/Reduced Instruction Set Computer

5.3.2 基本要求

完备性

任何运算都可用指令编程实现, 应具有所有基本指令

有效性

用指令编写的程序能高效率运行, 占用空间小, 执行速度快

规整性

(1) 对称性, 所有寄存器, 存储单元平等对待, 所有指令可以使用所有寻址方式, 减少特殊操作和例外情况

(2) 匀齐性, 一种操作可支持多种数据类型

(3) 指令与数据格式, 指令长度与数据长度有一定关系, 便于存取, 处理

兼容性

向后兼容

5.3.3 基本指令

数据传送指令, 算术逻辑运算指令, 移位操作指令, 堆栈操作指令, 字符串处理指令, 程序控制指令, 输入输出指令等

转移指令的转移地址一般采用相对寻址或直接寻址

猜你喜欢

转载自blog.csdn.net/weixin_44458659/article/details/111937991