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

发布时间:2023年12月24日

1 概述

指令

含义

指示计算机执行某种操作的命令

指令系统

含义

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

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

完善的指令系统满足的要求

完备性

指令系统应该包含所有必要的操作,以便计算机可以执行各种各样的任务。这包括数据操作(如加载、存储、算术和逻辑操作)、控制操作(如跳转和分支)以及特殊操作(如中断和系统调用)。

规整性

指令系统的设计应该尽可能简单和一致。例如,所有的指令应该有相同或相似的格式,所有的地址都应该以相同的方式指定,等等。

有效性

指令系统应该能够高效地执行。这意味着指令的执行时间应该尽可能短,而且指令的数量也应该尽可能少。

兼容性

新的指令系统应该与旧的指令系统兼容,以便旧的软件可以在新的硬件上运行。

可扩展性

指令系统应该设计得足够灵活,以便可以容易地添加新的指令或修改现有的指令。

2 指令格式

含义

指令字用二进制代码表示的结构形式

组成

操作码

含义

决定了计算机应该执行什么操作。操作码可以是算术操作(如加、减、乘、除)、逻辑操作(如与、或、非)、数据移动操作(如加载、存储)、控制操作(如跳转、分支)等。

分类

定长操作码

含义

长度固定,位置固定。

特点

控制简单,速度快,适用于指令条数不多的场合。

缺点是指令系统的扩展性较差,因为每增加一条新指令,都可能需要改变现有的指令格式

变长操作码

含义

长度可变,位置也不固定。

特点

优点是指令系统的扩展性较好,因为可以根据需要增加新的指令,而不需要改变现有的指令格式。

缺点是控制复杂,速度较慢,因为需要在运行时解析指令的格式。

地址码

含义

地址码是指令的一部分,它指定了参与操作的操作数的地址。地址码可以是直接地址、间接地址、寄存器地址、立即数等。

分类

地址指令

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

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

地址指令

只需要单操作数

这个操作数可以是一个寄存器,也可以是一个内存地址。

一地址指令通常用于单操作数的操作,如取反、逻辑非等。

地址指令

需要两个操作数。

这两个操作数可以是两个寄存器,也可以是一个寄存器和一个内存地址,或者是两个内存地址。

二地址指令通常用于双操作数的操作,如加法、减法、乘法、除法等。

3 寻址方式

含义

当采用地址指定方式时,形成操作数或指令地址的方式。如何确定下一条指令的存放地址?由程序计数器PC指明

指令寻址方式

含义

确定下一条欲执行指令指令地址

分类

顺序寻址方式

最基本的寻址方式,它按照程序中的指令顺序执行。在每次执行指令后,程序计数器(PC)会自动加1,指向下一条指令的地址。这种寻址方式简单且直观,但它不适用于需要条件判断或循环的情况。

跳跃寻址方式

允许程序跳过一些指令,直接跳到指定的地址执行。跳跃地址通常由指令本身给出,或者由某些条件决定。这种寻址方式使得程序可以实现条件判断和循环等复杂的控制结构。

操作数寻址方式

含义

确定本条指令操作数地址

分类

1.立即

含义

地址码部分的形式地址 A就是操作数D,而不是操作数的地址

特点

执行:取指令访存1次,执行指令访存0次

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

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

2.直接

含义

在指令格式的形式地址 A 中直接指出操作数的有效地址EA。由于操作数地址直接给出而不需要变换,称为直接寻址方式。

特点

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

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

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

3.寄存器

当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。

4.间接

含义

相对于直接寻址而言,形式地址D给出的不是操作数的有效地址,而是操作数的间接地址。

特点

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

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

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

5.寄存器间接

指令中的操作数地址指示出的寄存器中内容不是操作数,而是操作数的有效地址EA。

允许我们在寄存器中存储操作数的地址,而不是操作数本身。

6.相对

程序计数器PC的内容加上形式地址A形成操作数的有效地址

在处理跳转和分支指令时非常有用,因为它允许我们根据当前的程序位置来确定操作数的地址。

7. 变址

与基址寻址方式计算有效地址的方法十分相似,它把CPU中某个变址寄存器的内容与形式地址A相加来形成操作数有效地址。

这种方式在处理数组和循环时非常有用,因为它允许我们动态地改变操作数的地址。

8.基址

将CPU中基址寄存器的内容加上指令格式中的形式地址A而形成操作数的有效地址EA。

这种方式在处理多任务和动态内存分配时非常有用,因为它允许我们在不同的内存区域中动态地定位操作数。

9.堆栈

用于寻找存放在堆栈中的操作数地址。在执行函数调用和返回时,堆栈寻址是非常有用的,因为它允许我们保存和恢复程序的状态。

4 指令类型

算术逻辑运算指令

用于对数据进行逻辑操作,包括逻辑与AND、逻辑或OR、逻辑非NOT等三种基本操作以及同或、异或等组合逻辑操作。

移位操作指令

是一组经常使用的指令,属于汇编语言逻辑指令中的一部分,它包括移位指令(含算术移位指令、逻辑移位指令),循环移位指令(含带进位的循环移位指令),双精度移位指令三大类。

数据传送指令

是将数据、地址或立即数传送到寄存器或存储单元中,或将源操作数的内容或地址传送给目的操作数。常见的数据传送指令有MOV、XCHG、XLAT等。

堆栈操作指令

分为“入栈”和“出栈”两种,入栈操作通过push指令将数据放入堆栈,而出栈操作通过pop指令将数据从堆栈中取出。

字符串处理指令

是一种非数值处理指令,一般包括字符串传送、字符串转换(把一种编码的字符串转换成另一种编码的字符串)、字符串替换(把某一字符串用另一字符串替换)等。

程序控制指令

对于编写复杂的计算机程序至关重要,它们使程序能够根据不同的情况和要求执行不同的操作,从而实现所需的功能和逻辑。

输入输出指令

用来完成I/O端口与累加器之间的数据传送,指令中给出I/O端口的地址值。当执行输入指令时,把指定端口中的数据读入累加器中;当执行输出指令时,则把累加器中的数据写入指定的端口中。

其他指令

包括了一些特殊的命令,比如在Linux中的一些命令行指令,或者在某些特定的应用程序中使用的特定指令等。

5 指令格式设计

指令编码格式的设计

定长指令格式

在这种格式中,所有指令的长度都是相同的。操作码字段的位数和位置固定,为能够表示整个指令系统中的全部指令,指令的操作码字段应当具有足够的位数。设指令系统共有m条指令,指令中操作码字段的位数为N位,则满足 m<=2。

变长指令格式

在这种格式中,各种指令的长度随指令功能的不同而不同。

混合编码指令格式

混合编码指令格式是定长指令格式和变长指令结构的综合,它提供若干长度固定的指令字,以期达到既能减少目标代码的长度又能降低译码复杂度的目标。

操作码的设计

操作码字段表征指令的操作特性与功能,是指令的唯一标识。不同的指令操作码不能相同。

操作码可以分为固定长度的代码和可变长度的代码。固定长度的代码中,所有指令操作码的长度相等。可变长度的代码可以减小操作码的平均长度,提高指令编码的效率。

对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。

地址码的设计

地址码字段指定参与操作的操作数的地址码。地址码中可以包含存储器地址,也可包含寄存器编号。

指令中可以有一个、两个或者三个操作数,也可没有操作数,根据一条指令有几个操作数地址,可将指令分为零地址指令、一地址指令、二地址指令、三地址指令。

地址码的设计应当与操作码的设计相匹配,以形成高效合理的指令编码。

寻址方式的设计

寻址方式决定了如何获取操作数。主要有面向主存、寄存器、堆栈等寻址方式。

两种指明方式:用操作码中的某些位、用地址码的某些位。

寻址方式的选择直接影响到系统的容量、抗干扰能力、接入和切换速度等性能。

6 CISC 和 RISC

复杂指令系统计算机CICS

CISC (Complex Instruction Set Computer) 的设计策略是使用大量的指令,包括复杂指令。在CISC中进行程序设计要比在其他设计中容易,因为每一项简单或复杂的任务都有一条对应的指令。CISC的指令能力强,但单多数指令使用率低却增加了CPU的复杂度,指令是可变长格式。CISC包括一个丰富的微指令集,这些微指令简化了在处理器上运行的程序的创建。

精简指令系统计算机RISC

RISC (Reduced Instruction Set Computer) 的基本思想是通过简化指令集来提高CPU的执行速度和效率。RISC架构的指令集通常包含了一些简单的指令,这些指令的执行速度很快,但是功能比较单一。RISC的指令大部分为单周期指令,指令长度固定,操作寄存器,只有Load/Store操作内存。

这两种架构各有优势,而且界限并不那么明显。现代的CPU往往采用CISC的外围,内部加入了RISC的特性。下一代的CPU将融合CISC与RISC两种技术,从软件与硬件方面看二者会取长补短。

7?指令系统举例

PDP-11指令系统

PDP-11是迪吉多电脑在1970到1980年代销售的一系列16位迷你电脑。PDP-11深受程序员喜爱的原因,主要是在于其高度正规化指令集的设计,使得程序员可以容易地分别记住所有的运算码,以及指定运算符的方法。PDP-11所使用的指令集结构影响了C语言的语法。

Intel x86 指令系统

x86是由Intel推出的一种复杂指令集,用于控制芯片运行的程序,现在x86已经广泛运用到了家用PC领域。x86架构是重要地可变指令长度的CISC(复杂指令集计算机)。

MIPS 指令系统

MIPS架构是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,它是基于一种固定长度的定期编码指令集,并采用导入/存储(Load/Store)数据模型。

RISC-V指令系统

RISC-V指的是RISC系列指令集的第五代产品。指令集作为软件与硬件之间沟通的“翻译官”,是芯片产业中不可或缺的基础部分。RISC的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。

文章来源:https://blog.csdn.net/weixin_54727590/article/details/135176159
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。