1.1 指令系统的发展与性能要求

1.1.1 指令系统的发展

1. 指令在计算机系统中的地位

  • 是软件和硬件分界面的一个主要标志,硬件设计人员采用各种手段实现它;软件设计人员则利用它编制各种各样的系统软件和应用软件
  • 是硬件设计人员和软件设计人员之间的分界面,也是他们之间沟通的桥梁。

2. 指令系统的基本概念

指令: 就是要计算机执行某种操作的命令。从计算机组成的层次结构分为:

  • 微指令:是微程序级的命令,它属于硬件;
  • 宏指令:由若干条机器指令组成的软件指令,它属于软件;
  • 机器指令:介于微指令与宏指令之间,通常简称为指令,每一条指令可完成一个独立的算术运算或逻辑运算等操作。

一台计算机中所有机器指令的集合,称为这台计算机的指令系统。 指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。

3. 发展情况

  • 复杂指令系统计算机,简称CISC。但是如此庞大的指令系统不但使计算机的研制周期变长,难以保证正确性,不易调试维护,而且由于采用了大量使用频率很低的复杂指令而造成硬件资源浪费。
  • 精简指令系统计算机:简称RISC(Apple的M1),人们又提出了便于VLSI技术实现的精简指令系统计算机。

出现CISC到RISC转变的原因:,2/8现象(只有20%的指令使用率达到80%),控制器设计难度下降

1.1.2 对指令系统性能的要求

  • 完备性: 完备性是指用汇编语言编写各种程序时,指令系统提供的指令足够使用,而不必用软件来实现。采用硬件指令的目的是提高程序执行速度,便于用户编写程序。

  • 有效性: 有效性是指利用该指令系统所编写的程序能够高效率地运行。高效率主要表现在程序占据存储空间小、执行速度快。一般来说,一个功能更强、更完善的指令系统,必定有更好的有效性。

  • 规整性:

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

    • 对称性是指:在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式;
    • 匀齐性是指:一种操作性质的指令可以支持各种不同的数据类型;
    • 指令格式和数据格式的一致性是指:指令长度和数据长度有一定的关系,以方便处理和存取。例如指令长度和数据长度通常是字节长度的整数倍。
  • 兼容性: 系列机各机种之间具有相同的基本结构和共同的基本指令集,因而指令系统是兼容的,即各机种上基本软件可以通用。

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

img

1.2 指令格式

操作码字段+地址码字段,左边为高位,右边为低位。

1.2.1 操作码

设计计算机时,对指令系统的每一条指令都要规定一个操作码。指令的操作码OP表示该指令应进行什么性质的操作。不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。组成操作码字段的位数一般取决于计算机指令系统的规模。较大的指令系统就需要更多的位数来表示每条特定的指令,按照操作码长度分为:

  • 等长:指令规整,译码简单,固定长度编码的主要缺点是:信息的冗余极大,使程序的总长度增加。
  • 变长:指令不规整,译码复杂,效率高

1.2.2 地址码

根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。

  • 三地址指令:第一操作数,第二操作数,结果地址(a+b=c;)
  • 二地址指令:第一操作数,第二操作数,结果存在第一操作数下(a+=b;),按照操作数的物理位置不同分为:
    • RR:寄存器-寄存器类型
    • RS:寄存器-存储器类型
    • SS:存储器-存储器类型
  • 单地址指令:第一操作数(a++;)
  • 零地址指令:如停机、清除等控制指令

1.2.3 指令字长度

指令字长度:一条指令字包含二进制代码的位数,即操作码+地址码
机器字长:计算机能直接处理的二进制数据的位数。
按照指令字和机器字长的关系分为:单字长指令(指令字长等于机器)、半字长指令(指令字长等于半个机器)、双字长指令。

指令字长度相等的称为等长指令,随指令功能而异的称为非等长指令。

  • 指令系统中指令采用等长指令的优点:各种指令字长度是相等的,指令字结构简单,且指令字长度是不变的 ;
  • 采用非等长指令的的优点:各种指令字长度随指令功能而异,结构灵活,能充分利用指令长度,但指令的控制较复杂 。

img
op占7位,可表示的操作数有128条。
只有一行,所以是单字长指令,存在源寄存器和目标寄存器,为二地址指令,为RR型。

img
op占6位,可表示的操作数有64条。
有两行,所以是双字长指令,存在源寄存器和变址寄存器,为二地址指令,其中,变址寄存器和位移量用于查找主存中的地址,所以为RS型。

1.2.4 指令助记符

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

1.3 操作数类型

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

1.4 指令和数据的寻址方式

1.4.1 指令寻址

img

1.4.2 数据寻址

一般格式:

img

1. 立即寻址

img

寻址特征为“#”,表示是立即数寻址,形式地址放的就是操作数,执行时无需访存,立即数以补码的形式表示,A的位数限制了立即数的大小。

2. 直接寻址

img

有效地址直接放在形式地址处,执行阶段进行一次访存,A决定了操作数的寻址范围,操作数的地址不易修改(要先找到这条指令,然后将指令上的有效地址修改,较为麻烦)

3. 隐含寻址

img

其中一个操作数的地址隐含在操作码中,另外一个操作数采用直接寻址的方式给出,指令字中少一个地址字段,可以缩短指令字长。

ACC(累加器)在加法中存放被加数/和,在减法中存放被减数/差,在乘法中存放乘积高位,除法中存储被除数/余数,ACC存在与ALU中。

4. 间接寻址

img

有效地址由形式地址间接提供,分为一次间址,和多次间址,有效地址在主存中的地址存在A中,在主存中找到有效地址后再次访存找到操作数,故执行指令需要两次访存,优点是可以扩大寻址范围(因为EA可以很长),便于编程(操作数修改方便,只要修改EA即可)。

5. 寄存器寻址

img

有效地址为寄存器编号,直接访问寄存器即可得到操作数,执行阶段不访存,执行速度快,并且寄存器个数有限,可以缩短指令字长。

6. 寄存器间接寻址

img

有效地址在寄存器中, 操作数在存储器中,执行阶段访存,便于编制循环程序。

7. 基址寻址

采用专用寄存器作基址寄存器(隐式寻址):
计算机内专门设有一个基址寄存器BR,用户使用时不用明显指出该基址寄存器,只要由指令的寻址特征位反映出基址寻址即可。

img

BR 为基址寄存器,,A为偏移量,实际有效地址为基址+偏移量,可扩大寻址范围,BR 内容由操作系统或管理程序确定,在程序的执行过程中 BR 内容不变,形式地址 A 可变。用户不必考虑自己的程序存在于主存的那个空间区域,有利于多道程序设计。

问:为什么利于多道程序设计?
用户无需考虑程序存放在主存中的哪里,只要指出哪个寄存器作为某个程序的基址寄存器即可,由操作系统或管理程序自动分配。分别用不同的寄存器表示多道程序的基址寄存器,程序执行时用户不知道程序在主存中的位置,也不可修改基址寄存器的内容,确保系统安全可靠地运行。

采用通用寄存器作基址寄存器:
在一组通用寄存器中,由用户指出哪个寄存器用来作为基址寄存器。

img

由用户指定哪个通用寄存器作为基址寄存器,基址寄存器的内容由操作系统确定,在程序的执行过程中 R0 内容不变,形式地址 A 可变。

8. 变址寻址

img

IX 为变址寄存器(专用),通用寄存器也可以作为变址寄存器。可扩大寻址范围,IX 的内容由用户给定,在程序的执行过程中 IX 内容可变,形式地址 A 不变,便于处理数组问题。

为何便于处理数组问题?
答:循环时只要修改寄存器中的内容即可,指令字内存放数组的首地址,只需一个指令就可以完成一次循环操作。如果采用其他的寻址方式,需要不断修改指令字中的形式地址。

9. 相对寻址

img

A 是相对于当前指令的位移量(可正可负,补码),A 的位数决定操作数的寻址范围,适合程序浮动,广泛用于转移指令。

浮动程序技术是指在多道程序设计的系统中,要求每道程序存放在主存的任何区域都能正确执行,甚至在执行过程中,当程序的存放区域被改变,也要求其执行不受影响。也就是说,程序可以随机地从主存的一个区域移动到另一个区域,程序被移动后仍丝毫不影响它的执行。

问:跟随指令改变地址,如何保证操作数的准确性?
偏移量A是不停变化的,随着PC的跳转,A也相应加减,使得PC+A指向的数据不变。

10. 堆栈寻址

img

若用 SP表示堆栈指示器,指向栈顶,Msp表示堆栈指示器指定的存储器的单元,A表示通用寄存器
入栈操作描述为:

(A)−>Msp,(SP−1)−>SP,表示先将A中的数据存入到栈顶的存储单元中,然后将SP指针向上移动(堆栈默认栈底地址高,栈顶地址底)
出栈操作描述为:

(SP+1)−>SP,(Msp)−>A,表示先将指针向下移动一位,然后将其中的数据放入寄存器A中.

1.5 典型指令

1.5.1 指令的分类

  • 数据传送指令:树妖实现主存和寄存器之间,或者寄存器和寄存器之间的数据传送
    • 一般传送指令: MOV AX,BX
    • 数据交换指令: XCHG
    • 堆栈操作指令: PUSH,POP
  • 运算类指令
    • 算术运算指令: 定点和浮点的算术运算,大型机有向量运算指令
    • 逻辑运算指令:无符号数的位操作,代码的转换、判断及运算
  • 程序控制类指令
    • 程序控制类指令用于控制程序的执行方向,并使程序具有测试、分析与判断的能力。
  • 输入和输出指令、字符串处理指令、特权指令、其他指令

1.5.2 基本指令系统的操作

20%和80%规律:CISC中大约有20%的指令使用频率高,占据了80%的处理机时间,而有80%的不常用指令只占用处理机的20%时间。

VLSI工艺要求规整性,而大量复杂指令控制逻辑极其不规整,给VLSI工艺造成了很大的困难。

现在用微程序实现复杂指令与用简单指令组成的子程序相比,没有多大的区别。因为现在控制存储器和主存的速度差缩小。

CISC中,通过增强指令系统的功能,简化了软件,增加了硬件的复杂程度。然而指令复杂了,指令的执行时间必然加长,从而使整个系统的执行时间反而增加,因而在计算机体系结构设计中,软硬件的功能分配必须恰当

1.5.3 RISC

三大最大特点:

  • 选取使用频率最高的一些简单指令,指令条数少;
  • 指令长度固定,指令格式种类少,寻址方式种类少;
  • 只有取数/存数两条指令访问存储器,其余指令的操作都在寄存器中进行。