第 3章 计算机指令系统
这一章主要介绍计算机的指令系统
所涉及的一般概念 操作数类型 指令类
型 寻址方式和指令格式
3.1指令系统概述
3.1.1 指令系统的基本概念
指令系统是计算机系统中软件与硬
件之间的分界面
凡是能够在机器上直接运行的目标
程序都是由一系列机器指令组成的
一台计算机的指令系统设计得好坏
与否 不但直接关系着对程序设计的支持
程度 也关系着该计算机硬件系统的结
构 是计算机设计中一个需要十分关注的
1
问题
在计算机系统的设计和使用过程中
硬件设计人员采用各种手段实现指令系
统
指令是计算机可以理解的 语言
它们是由 0和 1的二进制数据组成 所以
称为机器语言
所有的计算机都提供一些基本的操
作系统
2
计算机设计者们有一个共同目标 就
是设计出一种语言 它能很容易地以最小
的代价来实现硬件和编译器的最大功能
对于软件设计人员而言 则使用这些
指令编制各种各样的系统软件和应用软
件 用这些软件来填补硬件的指令与人们
习惯的使用方式之间的语义差距 因此
可以说 指令系统是软件设计人员与硬件
设计人员之间的一个主要分界面 也是他
们之间互相沟通的一座桥梁
基本概念
指令 计算机要执行某种操作的命令
指令系统 一台计算机的所有指令的集合
称为该计算机的指令系统
指令系统是计算机硬件的语言系统
3
一方面是程序员所能看到的机器的主要
属性 另一方面
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
明计算机具有哪些最基
本的硬件功能 也就是说指令系统既为软
件设计者提供最低层的程序设计语言 也
为硬件设计者提供了最基本的设计依据
因此说指令系统是软件和硬件的主要界
面
系列计算机 基本指令系统相同 基本结
构相同的一系列计算机
指令字 表示一条指令的机器字 就称为
指令字 机器指令是用机器字来表示的
3.1.2 指令的要素
指令包含以下要素
1. 操作码 指定计算机将要完成的具体
操作
4
2. 源操作数 操作可能涉及到多个操作
数 源操作数是操作所需要的输入数据
3. 结果 目的 操作数 操作所产生的
一个结果数据
4. 下一条指令的地址 它告诉 CPU当前
指令执行完以后到哪里去取下一条指令
3.1.3 指令的表示
1. 指令格式 即指令结构的形式 是指
令字用二进制代码表示的形式 通常由操
作码字段和地址码字段组成
一条指令的结构形式为
操作码 OP 地址码
操作码 OP 用于说明该指令操作的
性质及功能
5
地址码用来描述该指令的操作对象
由它给出操作数地址或直接给出操作数
及操作结果存放的地址
假若一个计算机指令系统需要有 N
条指令 操作码的二进位数为 n 则应满
足关系式
N 2n
指令格式设计的准则之一是 在满足
操作种类 寻址范围和寻址方式的前提
下 指令尽可能短
指令长度的确定是个值得关注的问
题 通常 精简指令系统 RISC 计算
机采用固定长度的指令格式 而复杂指令
系统 CISC 计算机采用可变长度的指
令格式
6
2 用助记符来表示指令
机器指令是二进制数 但这对于人类
来说既不方便 也难辨认 所以我们通常
用指令助记符来表示
表 3.1
Add 表示相加
Sub 表示相减
Mul 表示相乘
Div 表示相除
And 表示相与
Or 表示相或
Load 表示从存储器取数据
Store 表示存数据到存储器
操作数也用符号来表示 例如
add r1 r2 r3
表示把寄存器堆中寄存器 r2的内容和 r3
的内容相加 结果放到寄存器 r1中
7
一般来讲 一个计算机的指令系统应
包括以下几种类型的指令
1 算术运算指令
2 逻辑运算指令
3 移位指令
4 存储器访问指令
5 I/O访问指令 如果 I/O空间与
存储器空间是分开的
6 转移指令
7 浮点运算指令
8 其它指令
3.1.4 指令系统设计应该考虑的问题
指令系统的设计是一个比较复杂的
问题 涉及到诸多方面 指令系统定义了
CPU应完成的多数功能 它主要包括
8
操作表 应提供多少和什么样的操作
数据类型 对多少种数据类型进行操作
指令格式 指令的长度 地址数目及各个
字段的大小
寄存器 能被指令访问的 CPU寄存器的
数目及其用途
寻址方式 确定操作数地址的方式
在设计一个计算机或处理机的指令
系统时会遇到这样一个问题 就是指令种
类和寻址方式是越多越复杂越好 还是越
少越简单越好呢
3.2 操作数类型
机器指令对操作数进行处理 操作数
可以分为以下几种
1 地址 addresses
9
2 数值 numbers
3 字符 characters
4 逻辑数据 logic data
3.2.1 地址
地址也是一种形式的数据 通常需要
计算才能得到存储器地址 由访问存储器
的指令计算出 它是无符号整数
3.2.2 数值
它可分为以下 3种
1 整数 integer 或定点 fixed
point 数
2 浮点 floating point 数
3 十进制 decimal 数
整数的表示方法简单 数据运算速度
快 但是数据精度及表示范围都较低
10
浮点数的数据精度及表示范围较整
数有很大的提高 但运算复杂 速度较慢
3.2.3 字符
文本 把由一系列字符组成的字符串
charater string 称为文本 text
文本或字符 characters 是另一种
比较常见的数据类型
3.2.4 逻辑数据
每项的值为 0或 1 当数据以这种方
式看待时 它就是逻辑数据
3.2.5 数据类型举例 自学
3.3 指令类型
不同的计算机指令系统是不同的 而
且具有很大的差别 但有些常用的指令则
是每个计算机所共有的 以下列出的是一
11
些比较通用的典型的指令类型
1 数据传送类型 2 算术运算类型
3 逻辑操作类型 4 移位操作类型
5 转移控制类型 6 输入输出类型
下面我们简要介绍每种类型所包含的指
令
3.3.1 据传送类型
数据传送指令是最基本的指令类型
它应该完成如下的工作 1 指明源操作
数和目的操作数的地址 这些地址可能是
存储器地址 寄存器编号或堆栈的栈顶
2 指明将要传送数据的长度 3 指
明每个操作数的寻址方式
12
表 3.5 数据传送操作类型
操作 说明
Move
Store
Load
Exchange
Push
Pop
由源向目标传送字或块
由处理器向存储器传送字
由存储器向处理器传送字
源和目标交换内容
由源向堆栈顶传送字
由堆栈顶向目标传送字
若源和目标都是寄存器 CPU 的动
作只要完成使一个寄存器到另一个寄存
器即可 这是 CPU内部的动作 若有一
个或两个操作数在存储器中 则 CPU必
须完成如下的某些或全部动作
1. 根据寻址方式计算存储器的地址
2. 若是虚拟存储器的地址 则要将虚存
地址转换成实际的存储器地址
13
3. 确定所寻找的栈顶是否在 Cache中
4. 若不是 则向存储器模块发命令
3.3.2算术运算类型
大多数计算机提供加减乘除 4种基
本的算术运算指令
表 3.6 算术运算类型
操作 说明
Add
Sub
Mul
Div
Abs
Neg
Inc
Dec
计算两个操作数的和
计算两个操作数的差
计算两个操作数的积
计算两个操作数的商
取操作数的绝对值
改变操作数的符号
操作数加 1
操作数减 1
3.3.3 逻辑类型
逻辑操作主要是指位与位之间的与
14
或 非 异或 4种逻辑 它们的共同特点
是按位操作 位与位之间不发生关系
表 3.7 逻辑运算类型
操作 说明
AND
OR
NOT
XOR
与
或
非
异或
3.3.4 移位操作类型
我们可以对数据进行算术移位操作
前提是不产生溢出 移位有左移 shift
left 和右移 shift right 两种 无论是
左移还是右移都分为算术移位和逻辑移
位两种形式
算术移位指的是将数据看作是有符
号的整数 移位规则与机器采用的码制有
15
关
算术左移 n 位相当于把机器数所对
应的真值乘以 2n
算术右移 n 位相当于把机器数所对
应的真值除以 2n
逻辑移位要简单一些 无论是逻辑左
移还是逻辑右移 都是简单地把移出的位
丢失 而在另一端填入 0
表 3.8 移位操作类型
操作 解释
shl/shr
sal/sar
rol/ror
rcl/rcr
逻辑左移/逻辑右移
算术左移/算术右移
循环左移/循环右移
带 C逻辑左移/带 C逻辑右移
3.3.5 转移控制类型
转移指令改变程序的顺序执行次序
16
条件转移 branch 指令通常用 PC
加偏移量的寻址方式令 PC 指向目的地
址
无条件转移 jump 指令 把某个
寄存器的内容写入 PC 以改变程序的执
行顺序
表 3.9 转移控制类
指令 解释
Branch
Jump
Call
Return
Trap
Rett
条件转移
无条件转移
子程序调用
从子程序返回
陷阱
从陷阱返回
3.3.6 输入输出
输入输出有多种不同的方式 如独立
17
编址的I/O 存储器映射编址的 I/O DMA
方式及 IOP方式
3.3.7 指令类型举例 自学
3.4 寻址方式
指令的执行需要引用操作数 寻找操
作数的地址的方式就是寻址方式
下面介绍几个概念
隐含 寻址方式 由指令字段中操作码
字段决定的寻址方式 称为 隐含 寻址
方式 也称为 隐式 寻址方式
显式 寻址方式 在指令中设置寻址
方式字段 由寻址方式字段不同的编码来
指定操作数地址的寻址方式 这称为 显
式 寻址方式
形式地址 指令格式中的地址码字段
18
提供的 地址 称为形式地址
有效地址 存放操作数的内存的实际
地址称为有效地址
寻址方式 指令中提供的形式地址变
换为有效地址的方法
当指令格式确定之后 指令中各个字
段的布局也就确定了 因而地址字段也就
确定了 一般说来指令格式中的地址字段
是非常有限的
指令设计的一个很重要的方面就是
要确定寻址方式 使得能够用指令格式中
的非常有限的地址字段尽可能的在大的
范围内寻找操作数 即寻址
常用的基本寻址方式
立即寻址方式
19
直接寻址方式
间接
寄存
偏移
符号约
A=指
为形式地址
R=指
容
EA=操
X
3.4.1 立即
寻址方式 寄存器寻址方式
器间接寻址方式
量寻址方式
定
令中地址字段的内容 A 也称
向寄存器的指令地址字段的内
作数的实际 有效 地址
=位置 X中的内容
寻址方式
操作数 A
OP A
20
立即寻址方式的优点 获得操作数不
需要额外的存储器访问周期 速度快
立即寻址方式的缺点 数据的大小受
到限制 即受到地址字段的长度的限制
3.4.2直接寻址方式
指令中的形式地址直接作为存储器
的有效地址 即
EA=A
存储器
操作数
OP A
直接寻址方式的优点 简单 不需要
进行加法运算
21
直接寻址方式的缺点 地址空间受指
令地址字段长度的限制
3.4.3间接寻址方式
指令中的形式地址不是直接作为存
储器的有效地址 而是作为存储器的有效
地址的地址 即
EA= A
存储器
地址
操作数
OP A
间接寻址方式的优点 寻址范围大
间接寻址方式的缺点 多重存储器访问
22
3.4.4寄存器寻址方式
寄存器寻址类似于直接寻址方式 唯
一的区别是指令的地址字段中指明的不
是存储器的有效地址 而是寄存器的编
号 即操作数在寄存器中
EA=R
寄存器
操作数
OP R
寄存器寻址方式的优点 指令中仅需
要一个较小的地址字段 这种寻址方式并
不访问存储器 因而速度快
寄存器寻址方式的缺点 地址空间很
23
有限
3.4.5寄存器间接寻址方式
寄存器间接寻址方式类似于间接寻
址方式 寄存器的内容是存储器的有效地
址 即
EA= R
寄存器 存储器
操作数
OP R
寄存器间接寻址方式的优缺点也类
似于间接寻址方式的优缺点 寄存器间接
寻址方式比间接寻址方式少了一次存储
器的访问
24
3.4.6偏移量寻址方式
偏移量寻址方式是直接寻址与寄存
器间接寻址相结合的一种寻址方式 寄存
器的内容与偏移量相加的结果是存储器
地址 即
EA= R +A
寄存器 存储器
⊕
R A
操作数
偏移量寻址要求指令有两个地址字
段 至少其中一个是显式的 另一个地址
字段可以隐含在操作码之中 或者说是基
25
于操作码隐含引用的寄存器 该寄存器的
内容加上 A产生有效地址
偏移量寻址方式通常有如下的三种
使用方式 相对寻址 基址寄存器寻址
变址寻址
1 相对寻址
隐含引用的寄存器是程序计数器
PC 即
EA= PC +A
相对寻址利用了程序的局部性概念
若大多数存储器的访问都靠近正在执行
的指令 则使用相对寻址可以节约指令的
地址字段的位数
2 基址寄存器寻址
基址寄存器寻址方式简称基址寻址
26
方式 其的概念如下
指令中被引用的寄存器称为基址寄
存器 基址寄存器中的内容是一个存储器
地址
指令中的地址字段含有一个相对于
那个基址寄存器内容 存储器的地址 的
偏移量 该偏移量通常用无符号整数表
示
寄存器的引用可以是显式的也可以
是隐式的 记指令中被引用的寄存器的编
号为 B 则有效地址为
EA= B +A
3 变址寻址
指令的地址字段引用一个存储器的
地址 被指令引用的寄存器的内容是相对
27
于 指令的地址字段引用的 存储器地址
的一个偏移量 若记被指令引用的寄存器
为 I 则
EA= I +A
3.4.7 实际机器的寻址方式简介 自学
3.5 指令格式
3.5.1指令格式的选择
确定指令格式是指令系统设计的一
个重要方面 指令格式中包括操作码字段
和地址码字段
1. 操作码字段
指令格式中操作码字段长度的选择
主要根据指令系统中所包含的总的指令
的数量
操作码是用来指示机器执行什么样
28
的操作 每一条指令都有一个确定的操作
码 不同指令的操作码用不同的编码表
示
操作码位数越多 所能表示的操作种
类就越多
两种编码方式
A.定长操作码
操作码的长度固定 且集中放在指令
字的第一个字段中 指令的其余部分用于
地址码
精简指令系统计算机 RISC 中广泛
采用定长操作码
B 变长操作码
这是操作码长度不固定 即操作码和
地址码位数不固定 操作码位数随地址码
29
数的减少而增加 对地址数少的指令允许
操作码长些 对地址数多的指令则操作码
就短些
2. 地址码字段
首先要确定操作数的地址 用以指明
操作数的存放处
然后要确定操作结果的地址 用以存
放运算的结果
不同的指令其所需的操作数个数可
能不同 一般说来 操作数地址个数可以
从 0到 3
另外从指令的完备性角度考虑 指令
中应当有一个地址字段指出下一条指令
地址 以便程序能连续运行 但由于在大
多数情况下程序是顺序执行的 因此 可
30
以在硬件上设置一个程序计数器 PC
Program Counter 专门存放当前要执
行的指令地址 每取出一条指令后 PC
自动增值指出下一条指令地址
设计指令格式首先遇到的一个问题
就是定义指令的长度
从程序员的角度
从执行效率考虑
A.三地址指令格式
三地址指令指令格式的一般形式为
A2 A1 A3 OP
该指令的意义是
(A1)OP(A2) (A3)
B 二地址指令格式
二地址指令格式为:
31
A2 A1 OP
该指令的意义是
(A1)OP(A2) (A1)
C 一地址指令格式
一地址指令的一般格式为
OP A
该指令意义是一个操作数由地址码
A给出 即源操作数 另一个操作数 目
的操作数 隐含在累加器 AC中 操作结
果替代累加器 AC原来的内容 记为
(AC)OP(A) (AC)
D 零地址指令格式
零地址指令格式是面向堆栈的 零地
址指令格式为
OP
32
固定长度的指令格式有利于指令译
码及流水线操作 RISC计算机通常采用
固定长度的指令格式 可变长度的指令格
式有利于有效地使用指令字段 节约存储
器空间 计算机发展的早期 存储器价格
很贵 因此 发展较早的 CISC计算机通
常采用可变长度的指令格式 但 CISC计
算机在流水线及超标量执行方面会遇到
很多麻烦 因此 CISC计算机不利于采用
计算机体系结构中的一些新的研究成果
3.5.2 实际指令格式简介 自学
33