四、指令系统

image

概述

基本概念:

  • 指令/机器指令: 指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
  • 计算机的指令系统: 一台计算机中所有机器指令的集合,称为这台计算机的指令系统。

注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。

注:

  • 指令就是对应于机器语言的一条语言
  • 因此指令是设计一台计算机的硬件与低层软件的接口;
  • 指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。

计算机指令分类: (从计算机组成的层次结构来说)

  • 微指令:是微程序级的命令,它属于硬件;

  • 机器指令:介于微指令与宏指令之间,通常简称为指令
    每一条指令可完成一个独立的算术运算或逻辑运算操作。

  • 宏指令:由若干条机器指令组成的软件指令,它属于软件。

但是我们所说的指令 一般就是指 机器指令

发展情况

基本概念:
系列计算机:基本指令系统相同、基本体系结构相同的一系列计算机。
软件兼容:具有共同的指令集。新推出的机种指令系统一定包含所有旧机种的全部指令。软件可以在新机种上运行。

指令系统的发展过程:简单->复杂(CISC) ->精简(RISC)

复杂指令集(CISC)

复杂指令集(CISC:Complex Instruction Set Computer)

背景: 存储资源紧缺, 强调编译优化

设计思路:一条指令完成一个复杂的基本功能。

特点: 具有大量的指令和寻址方式

  • 增强指令功能,设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的(微程序)指令系统来实现
  • 为节省存储空间,强调高代码密度,指令格式不固定,指令可长可短,操作数可多可少
  • 寻址方式复杂多样,操作数可来自寄存器,也可来自存储器
  • 采用微程序控制,执行每条指令均需完成一个微指令序列(微程序)
  • CPI>5,指令越复杂,CPI越大。

CPI指令平均周期数(Cycle Per Instruction),也称每指令周期,即执行在计算机体系结构中一条指令所需要的平均时钟周期(机器主频的倒数)数。

代表:X86架构,主要用于笔记本和台式机。

CISC的主要缺点

  1. 指令使用频度不均衡。
    高频度使用的指令占据了绝大部分的执行时间,扩充的复杂指令往往是低频度指令。

  2. 大量复杂指令的控制逻辑不规整,不适于VLSI工艺
    VLSI的出现
    使单芯片处理机希望采用规整的硬联逻辑实现,而不希望用微程序,因为微程序的使用反而制约了速度提高。(微码的存控速度比CPU慢5-10倍)。

  3. 软硬功能分配
    复杂指令增加硬件的复杂度,使指令执行周期大大加长,直接访存次数增多,降低了CPU性能。

  4. 不利于先进指令级并行技术的采用(流水线技术)

精简指令集(RISC)

精简指令系统(RISC:Reduced Instruction Set Computer)

背景(为什么会出现CISC到RISC的转变?)
CISC庞大的指令系统不但使计算机的研制周期变长,
而且由于20:80规则(20%指令在程序中出现频率占80 %;且这些指令都是基本动作),CISC中大量使用频率很低的复杂指令造成了硬件资源浪费。

设计思路: 抽取最常用的指令,一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。

RISC特点:避开CISC的所有缺点

  1. 减小CPI: CPU时间=指令数 * CPI * 时钟周期

  2. 精简指令集:保留最基本的,去掉复杂、使用频度不高的指令

  3. 采用Load/Store结构,统一存储器访问方式,有助于减少指令格式

  4. 采用硬接线控制代替微程序控制

超大规模集成电路->硬接线控制,比微程序控制速度快。

代表:ARM架构,主要用于手机、平板等

CISC与RISC的对比

设计思路不同,比如设计一套能输出单词的指令集:

  • CISC的思路:每个单词的输出由一条指令完成,(一条指令可以由一个专门的电路完成:17万个单词=17万个电路)
    优化:(微指令)有的复杂指令用纯硬件实现很困难\(\to\) 采用“存储程序”的设计思想,由一个比较通用的电路配合存储部件完成一条指令

  • RISC的思路:每个字母的输出由一条指令完成,多条指令组合完成一个单词(26个字母=26个电路)
    一条指令一个电路,电路设计相对简单,功耗更低;且分工明确容易实现“并行”、“流水线”

image

image

image

指令系统性能的要求

1、完备性:指令足够,功能齐全
是指用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。

2、有效性:程序占据存储空间小、执行速度快
有效性是指利用该指令系统所编写的程序能够高效率地运行。高效率主要表现在程序占据存储空间小、执行速度快。

3、规整性:
包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。

  1. 对称性
    在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式。

  2. 匀齐性
    一种操作性质的指令可以支持各种数据类型,如算术运算指令可支持字节、字、双字整数的运算,十进制数运算和单、双精度浮点数运算等;

  3. 指令格式和数据格式的一致性
    指令长度和数据长度有一定的关系,以方便处理和存取。
    例如指令长度和数据长度通常是字节长度的整数倍。

4、兼容性:向上兼容
系列机各机种之间具有相同的基本结构和共同的基本指令集。因而指令系统是兼容的,即各机种上基本软件可以通用。
由于不同机种在结构和性能上有差异只能做到“向上兼容”,即低档机上运行的软件可以在高档机上运行。

低级语言与硬件结构的关系

image

指令系统体系结构(ISA, Instructiong Set Architecture):机器语言程序员看到的计算机属性,与程序设计有关的计算机架构。

指令格式

image

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。

指令能反映以下信息

  • 完成什么操作
  • 如果需要操作数,从哪里取
  • 结果送哪里

一条指令通常要包括操作码字段和地址码字段两部分:
image

  1. 操作码:进行什么操作?
  2. 地址码:对谁进行操作?

影响计算机指令格式的因素

  • 机器的字长
  • 存储器的容量
  • 指令的功能

指令字长度

机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)

指令字长:一条指令的总长度(包含二进制代码的位数)(可能会变)
指令字长决定于:1.操作码的长度;2.操作数地址的长度;3.操作数地址的个数

分类:
(一)按指令长度是机器字长的多少倍
1.单字长指令、2. 半字长指令、3.双字长指令

多字长指令的优缺点
优点提供足够的地址位来解决访问内存任何单元的寻址问题 ;
缺点必须两次或多次访问内存以取出一整条指令,降低了CPU的运算速度,又占用了更多的存储空间。

(二)按指令长度是否可变

  1. 定长指令字结构(所有指令的长度都相等
    优点:各种指令字长度是相等的,指令字结构简单,且指令字长度是不变的 ;
  2. 变长指令字结构(各种指令的长度不等
    优点:各种指令字长度随指令功能而异,结构灵活,能充分利用指令长度,但指令的控制较复杂 。

操作码

操作码 指出指令应该执行什么性质的操作 和具有何种功能。(例如,指出是算术加运算,还是减运算;是程序转移,还是返回操作。)
操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。

表示: 不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。

比如,一个指令系统只有8条指令,则有3位操作码就够了,如果有32条指令,需要5位操作码。

字段长度: 操作码字段的位数一般取决于计算机指令系统的规模。

注意:

  1. 设计计算机时,对指令系统的每一条指令都要规定一个操作码。
  2. n位的操作码表示 \(2^n\) 条指令。

定长和不定长操作码

分类: 按字段长度操作码操作码分为:

  1. 定长/等长 操作码(信息冗余大、程序长度长;指令规整,译码简单)
  2. 不定长/变长 操作码(指令不规整,译码复杂;效率高)

定长/等长 操作码: 在指令字的最高位部分 分配固定的若干位(定长)表示操作码。

  • 一般n位操作码字段的指令系统最大能够表示\(2^n\)条指令。
  • 优点:定长对于简化计算机硬件设计,提高指令译码和识别速度很有利;
  • 缺点:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。

不定长/变长 操作码(扩展操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。

  • 最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
  • 优点:在指令字长有限的前提下仍保持比较丰富的指令种类;
  • 缺点:增加了指令译码和分析的难度,使控制器的设计复杂化。

指令和程序: 对于机器语言编写的程序,程序就是指令的有序集合。

控制器:计算机中发号施令的部件,它控制计算机有条不紊地进行工作。

地址码

地址码就是操作的对象/操作对象的地址。
分类:
根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。

常见的如:零地址指令(如:停机指令)、单地址指令、三地址指令、二地址指令

image

四地址指令

设指令字长为32位,操作码占8位,4个地址码字段各占6位。设存储字长为32位,即4B
image
OP,A1,A2,A3,A4

  • OP:加法操作
  • A1:第一操作数地址
  • A2:第二操作数地址
  • A3:结果的地址
  • A4:下一条指令地址

指令含义\((A_1) OP (A_2)\to A_3\),A4=下一条将要执行指令的地址
注:A1 指某个主存地址, (A1)表示 A1 所指向的地址中的内容

特点:

  • \(A_i\)可直接表示\(2^6=64\)个不同的位置,寻址范围较小。

  • 完成一条指令需要访存4次:
    取指令 访存1次(假设指令字长=存储字长),取两个操作数 访存2次,存回结果 访存1次。

由于寻址范围较小,考虑优化。优化思路:

  • 将操作码和地址码分开存储,且操作码连续存储。
  • 设置专门硬件机构(程序计数器PC),取指令之后 PC+1,自动指向下一条指令

三地址指令

优化后指令格式如下:
image

操作码θ   第一操作数A1   第二操作数A2      结果A3

指令含义\((A_1) OP (A_2)\to A_3\)(下一条将要执行指令的地址直接访问PC)

特点:

  • 寻址范围:\(2^{8}=256\)

  • 完成一条指令需要访存4次:
    取指令 访存1次(假设指令字长=存储字长),取两个操作数 访存2次,存回结果 访存1次。

注意:三地址指令中A1,A2,A3一般是通用寄存器,加快了指令执行速度。
使用范围:

  • 常用于需要两个操作数的算术运算、逻辑运算相关指令
  • 只在字长较长的大、中型机中使用,而小型、微型机中很少使用。

虽然省去了一个地址,但指令长度仍比较长,继续优化,优化思路:
放弃结果的地址,设A1/A2的地址就是结果地址

二地址指令

image
操作码θ 第一操作数A1 第二操作数A2

指令含义\((A1)OP(A2)→A1\)\((A1)OP(A2)→A2\)(下一条将要执行指令的地址直接访问PC)

特点:

  • 寻址范围:\(2^{12}=4K\)
  • 完成一条指令需要访存4次:
    取指令 访存1次(假设指令字长=存储字长),取两个操作数 访存2次,存回结果 访存1次。

使用范围:

  • 常用于需要两个操作数的算术运算、逻辑运算相关指令
  • 广泛应用于各种机器。

注意一点:指令执行之后,A1中原存的内容已经被新的运算结果替换了。

二地址指令根据操作数的物理位置不同又分为:

  • RR 寄存器-寄存器类型:最快
  • RS 寄存器-存储器类型
  • SS 存储器-存储器类型:最慢

寄存器是最快的单元

一地址指令

image
操作码θ    第一操作数A1

使用范围、指令含义及访存次数

  1. 只需要单操作数,如加1、减1、取反、求补等
    指令含义:\(OP(A_1)→A_1\)(下一条将要执行指令的地址直接访问PC)
    访存次数:完成一条指令需要3次访存:取指 \(\to\) 读A1 \(\to\) 写A1

  2. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
    指令含义:\((ACC) OP (A_1) \to ACC\)(下一条将要执行指令的地址直接访问PC)
    访存次数:完成一条指令需要2次访存:取指\(\to\) 读A1

零地址指令

image
操作码θ

指令含义

  1. “停机”、“空操作”、“清除”等控制类指令。
  2. 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

扩展操作码

基本概念:
对于指令结构有两种方式:
1.定长指令字结构:指令系统中所有指令的长度都相等
2.变长指令字结构:指令系统中各种指令的长度不等
同样对于操作码:
1.定长操作码:指令系统中所有指令的操作码长度都相同,:n位 \(\to 2^n\)条指令
2.可变长操作码:指令系统中各指令的操作码长度可变

对于上面例子:如果零地址指令占用32位,就是定长指令字结构;如果占8位就是变长指令字结构
上面例子的操作码都是8位,是定长操作码

因为对地址需求大,而操作码的位数随地址数的增加而减少,所以需要扩展操作码

\[定长指令字结构+可变长操作码 \to 扩展操作码指令格式 \]

设计要求:(只要符合设计要求就是扩展操作码)

  1. 不允许短码是长码的前缀(即短操作码不能与长操作码的前面部分的代码相同)。
  2. 各指令的操作码一定不能重复。
  3. 设地址长度为n,上一层留出m种状态,下一层可扩展出\(m×2^n\)种状态

注意:
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
(比如下面的例子,如果计算机读取到1111,就继续读取;如果读取到其他数据,就停止读取操作码。)

扩展操作码举例: 指令字长为16位,前4位为基本操作码字段OP,另有3个4位长的地址字段A1、A2和A3。
image

  • 若4位基本操作码若全部用于三地址指令,则有16条。

  • 至少须将1111留作扩展操作码之用,即三地址指令为15条;

  • 同理二地址指令也为15条,1111 1111留作扩展操作码之用;

  • 同理一地址指令也为15条,1111 1111 1111留作扩展操作码之用;

  • 零地址指令为16条。

例题:

设指令字长固定为16位,试设计一套指令系统满足:
a) 有15条三地址指令;b) 有12条二地址指令;c) 有62条一地址指令;d) 有32条零地址指令
image
设地址长度为n,上一层留出m种状态,下一层可扩展出\(m×2^n\)种状态

假设指令字长为16位,操作数地址码6位,指令有零地址、 一地址和二地址三种格式。
(1)操作码固定。若零地址指令有M种,一地址指令有N种,则二地址指 令最多有多少种;
操作码位数:16-6-6 = 4,总指令条数:\(2^4 = 16\),则二地址令条数:16-M-N
(2)采用扩展操作码技术,二地址指令最多有多少种;
:二地址指令最多有15种(0000 ~1110)。
(3)采用扩展操作码技术,若二地址指令有P条,零地址指令有Q条,则 一地址指令最多有多少种?
解: $$\begin{array}{l}
\left(\left(2^{4}-P\right) \times 2^{6}-R\right) \times 2^{6}=Q \
R=\left(2^{4}-P\right) \times 2^{6}-Q \times 2^{-6}
\end{array}$$

指令助记符和操作数类型

指令助记符
由于硬件只能识别1和0,所以采用二进制操作码是必要的,但是我们用二进制来书写程序却非常麻烦。
为了便于书写和阅读程序,每条指令通常用3个或4个英文缩写字母来表示。这种缩写码叫做指令助记符

  • 用3~4个英文字母来表示操作码,一般为英文缩写
  • 不同的计算机系统,规定不一样
  • 必须用汇编程序翻译成二进制代码

操作数类型

  1. 地址数据:地址实际上也是一种形式的数据。(无符号)
  2. 数值数据:计算机中普遍使用的三种类型(定点、浮点和十进制数)的数值数据。
  3. 字符数据:文本数据或字符串,目前广泛使用ASCII码。
  4. 逻辑数据:一个单元中有多位二进制bit项组成,每个bit的值可以是1或0。当数据以这种方式看待时,称为逻辑性数据。

指令格式举例

举例:

  1. 8位微型计算机的指令格式
    如8088,字长8位,指令结构可变
    包括单字长指令、双字长指令和三字长指令
    操作码长度固定

  2. PDP/11系列机的指令格式
    字长16位
    单字长指令
    操作码字段不固定

  3. Pentium指令格式

Pentium指令格式(CISC)

指令长度可变,最短1个字节,最长12个字节,典型的CISC指令系统
由可选前缀(04)、操作码(12)、一个由mod-R/M字节和一个SIB(Scale Index Base)比例变址字节组成的地址指定器、一个可选的位移量(04)和一个可选的立即数字段(04)构成。
image

image

指令前缀中的重复前缀指定串的重复操作,这样使Pentium处理串比软循环快得多。
LOCK前缀用于多CPU环境中对共享存储器的排他性访问
段取代用于改变默认段寄存器的情况
操作数长度取代和地址长度取代用于在保护模式下决定操作数和指令的长度
以下4个指令前缀都是可选的,分别为0或1个字节

操作码是必须的,1~2个字节
Mod、Reg、R/M为共1个字节,是可选的。
mod-R/M指定的操作数是在R中还是在M中。
mod(2位)R/M(3位)的32种值构成了8种寄存器方式和24种变址方式(参考汇编语言教材);
Reg或OP(3位)指定另一个操作数(寄存器)或用作OP的补充。

S、I、B共1个字节,分别是比例系数、变址寄存器号、基址寄存器号,可选。mod-R/M中的某些编码要求SIB字节来完成寻址方式的指定;
SS(2)指定比例变换的因子,
Index(2)指定变址寄存器,
Base(3)指定基址寄存器
位移量:可以是0,1,2,4个字节
立即数:可以是0,1,2,4个字节

指令和数据的寻址方式

posted @ 2022-10-20 10:41  kingwzun  阅读(745)  评论(0编辑  收藏  举报