第五章 指令系统 知识点

什么是指令?

计算机能直接识别、执行的操作命令(机器指令)。

冯诺依曼结构计算机“程序控制”原理实现的载体。

软、硬件界面和程序员操作计算机硬件的接口。

硬件设计的依据和软件设计的基础,直接影响计算机系统的性能。

什么是指令系统?

一台计算机或处理器能够识别和执行的所有计算机指令的集合。CPU通过执行一系列机器指令来完成各种计算和控制任务。指令系统通常分为两种类型:精简指令系统计算机(RISC),复杂指令系统计算机(CISC)

指令的分类

根据计算机层次结构分类

高级语言指令、汇编语言指令、机器语言指令和微指令指令。

根据指令中地址码字段个数分类

三地址指令、二地址指令、一地址指令和零地址指令。地址个数越少,指令能够访问的范围越大。

根据指令中操作数的物理位置分类

存储器-存储器(SS)型。(该指令类型要访问两次主存,指令速度较慢,故已不存在)

寄存器-寄存器(RR)型。

寄存器-存储器(Rs)型。

根据指令的功能分类

传送指令、定点算术运算指令、位运算指令和控制转移指令。

指令字长

指令中包含的二进制位数。

与机器字长相比:单字长、双字长、半字长等长度指令。

多字长指令(至少双字长)

解决寻址较大存储空间的问题。(拓展技术)

取址多次访问,影响速度,占有空间大。

等长指令:指令字长固定。(易于硬件的设计及简化)

变长指令:指令字长度根据需要可变。(怎加硬件设计和简化的难度)

5.1指令系统的发展为继承已有的软件,减少软件开发费用,诞生了系列计算机(同一公司不同时期生产,基本系统结构和指令系统相同的计算机)使得在旧机种上运行的软件可以不加任何修改地在新机种上运行。与之相对应的还有兼容机(不同公司生产,基本系统结构和指令系统相同的计算机)随着计算机的发展,指令系统也趋于多用途、强功能化,但指令结构太复杂也会带来一些不利因素,因此提出了CISC和RISC。

5.2指令格式5.2.1指令格式一条指令一般包含

操作码:具体说明操作的性质及功能。

操作数:指令的输入,即执行操作所需的数据或地址信息。

寻址方式:如何找到或计算操作数的地址。

操作控制码:有时候,指令可能包含一些额外的控制信息,用于指导处理器的具体行为。这可能包含标志位的设置、条件执行的控制等。

拓展字段:有些指令可能包含拓展字段,用于提供额外的信息或操作码的变体。这对于支持复杂操作或者特殊功能非常有用。

操作码字段的位数与支持的最大指令数量有关。

对于定长操作码而言,操作码的长度=log2N。

支持变长操作码时,操作码可向不用的地址码字段扩展。寻址方式字段的位数与支持的寻址方式种类有关。地址码字段的作用及影响与其位数和寻址方式有关。

根据地址码部分所给出地址的个数,对指令格式进行分类

零地址指令

无需任何操作数,如空操作指令、停机指令等。

操作数地址默认,如堆栈结构计算机的运算指令,所需的操作数默认在堆栈中。

一地址指令

指令中只给出一个地址,该地址既是操作数地址,又是操作结果的存储地址。

二地址指令

最常见的指令格式两个地址指出两个源操作数地址,其中一个还是存放结果的地址。

三地址指令

对A1、A2地址指出的两个元操作数进行操作后,将结果存入目的地址A3。

多地址指令

在某些性能较强的计算机中,往往设置处理成批数据的指令。

5.2.2指令操作码的扩展技术指令操作码通常有两种编码格式:固定个格式,可变格式。如何扩展:在指令字中用一个固定长度的字段表示基本操作码,而对于一部分不需要某个地址码的指令,把它们的操作码扩充到该地址字段。扩展技术使用原则:使用频度高的指令应分配短的操作码,使用频度低的指令相应地分配较长的操作码。霍夫曼编码的操作码:根据程序中指令出现频率高低而赋以不同长度的操作码。

虽然扩展码技术是一种重要的指令优化技术,可以缩短指令的平均长度,减少程序的总位数以及增加指令字所能表示的操作信息。但是,扩展操作码比固定操作码译码复杂,使控制器的设计难度增大,且需要更多的硬件支持。

5.2.3指令长度与数据字长的关系

数据字长决定了计算机的运算精度,字长越长,计算机的运算精度越高。

地址码长度决定了指令直接寻址能力。

为便于处理数据和尽可能地充分利用存储空间,一般机器的字长都是字节长度的1、2、4或8倍。

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

5.3寻址方式什么是寻址?确定本条指令的数据地址及下一条要执行的指令地址的方法,与计算机硬件结构紧密相连,而且对指令格式和功能有很大影响。不同计算机有不同的寻址方式,但基本原理是相同的。有的计算机寻址种类较少,因此在指令操作码中直接表示出寻址方式;而有的计算机采用多种寻址方式,因此在指令中专设一个字段表示一个操作数的来源或去向。

5.3.1指令的寻址方式

顺序寻址:

程序的指令序列在主存顺序存放。执行时从第一条执行开始,逐条取出并逐条执行。

CPU中设置程序计数器(PC)对指令的顺序号进行计数。PC开始时存放程序的首地址,每执行一条指令,PC加”1“(存储1条指令占用的字节单元数),指出下一条指令的地址,直到程序结束。

跳跃寻址

通常通过跳转指令(分支指令)实现。

5.3.2操作数寻址方式

立即数寻址

所需的操作数由指令的地址码部分直接给出。

特点:

取指时,操作码和一个操作数同时被取出,减少了访问存储器的次数,提高了指令的执行速度。

最大优点便于程序设计(变量赋初值)。

数据大小受字段数限制。

不能修改操作数数值。

寄存器寻址

操作数在CPU的内部寄存器中

特点:

操作数在寄存器中,指令执行速度快。

能访问的数据大小一般与计算机字长有关。该指令的地址码位数只影响能访问的寄存器个数,不影响访问数据的大小。

地址字段的位数与计算机通用寄存器数量相关。

缩短指令长度,节省存储空间。

直接寻址

地址码字段直接给出操作数在内存中的地址。

特点:

提供访问主存的操作。

获得数据要访问主存,指令执行速度慢。

地址字段的位数决定了访存空间的大小,因此引入间接寻址。

间接寻址

地址码字段给出的是操作数地址的地址。

特点:

解决了直接寻址方式下地址字段的位数限制访存范围大小的问题。

获得数据要访问主存2次,指令执行速度太慢。

寄存器简介寻址

地址码字段给出的是寄存器编号。(先访问地址码字段给出的寄存器,在寄存器中获得操作数在主存中的位置)

特点:

解决了直接寻址方式下地址字段的位数限制访存范围大小的问题。

获得数据只需访问主存一次。

相对寻址

将程序计数器PC的内容与指令的地址码部分给出的位移量(Disp)之和作为操作数的地址或转移地址。

特点:

可节省指令中的地址位数,便于程序在内存中成块移动。

注意:PC的改变对计算的影响(回顾5.3.1 1.顺序寻址)

基址寻址

在计算机中设置一个专用的基址寄存器,或由指令指定一个通用寄存器为基址寄存器。操作数地址由基址寄存器的内容和指令的地址码A相加得到。地址码A通常被称为位移量。

特点:

使用基址寄存器可以访问更大的主存空间。

对某一程序而言,基址值设定后不变,故要访问不同数据需修改指令中地址码字段。

变址寻址

指定一个变址寄存器,与本地指令地址无关,内容可随要求改变。

特点:

不改变指令即可改变数据的有效地址,可在循环中使用。

在字符串处理,向量运算等等成批数据处理中非常有用。

总结

立即寻址 快,便于程序设计,赋初值,初值大小受限

寄存器寻址 快,便于程序设计,不能访问主存

直接寻址 慢,便于程序设计,提供访存,范围受限

间接寻址 很慢,解决直接寻址访存范围受限的问题

寄存器间接 慢,便于程序设计,提供访存,范围增大

相对寻址 慢,提供访存,不能再循环中使用

变址寻址 慢,便于程序设计,提供访存,可在循环中使用

基址寻址 慢,提供更大的范围的访存能力,不能在循环中使用

5.4指令格式设计5.4.1指令格式设计的主要内容

根据指令数量的要求及是否支持操作码扩展,确定操作码字段的位数。

根据对操作数的要求确定地址码字段的个数。

根据寻址方式的要求,为每个地址码字段确定寻址方式字段位数。

确定采用定长指令还是变长指令

5.4.2指令格式设计举例(抱歉喔,这儿的例题估计得耽搁一段时间,还没搞懂hexo和markdown插入图片得方法)

5.5…未完待续…

[an error occurred while processing the directive]