slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[计组笔记]指令系统

Apr 25, 2023CS2711 words in 18 min

指令格式

基本指令格式


操作码指明了指令的操作性质及功能,地址码给出了操作数的地址.
把指令长度等于机器字长的指令称为单字长指令;指令长度等于半个机器字长的指令称为半字长指令;指令长度等于两个机器字长的指令称为双字长指令。
若所有指令的长度都是相等的,就称该指令系统为定长指令字结构。。若各种指令的长度随指令功能而异,就称该指令系统为变长指令字结构。现代计算机广泛采用变长指令字结构.

地址码

四地址指令

这种格式指令长度太长 不切实际。

三地址指令

程序计数器(Program Counter,PC)来存放指令地址。通常每执行一条指令,P C就自动加1(设每条指令只占一个主存单元),直接得到将要执行的下一条指令的地址。这样,指令中就不必再明显地给出下一条指令的地址了。
这种格式省去了一个地址, 但指令长度仍然比较长。只在字长较长的大中型机中使用。

二地址指令

让一个操作数的地址同时兼具做存放结果的地址。

一地址指令

隐含的操作数存放在一个专门的寄存器中, 累加寄存器(Accumulator, ACC).
执行一条一地址的双操作数运算指令,只需要访问两次主存。第一次取指令本身,第二次取第二操作数。第一操作数和运算结果都放在累加寄存器中,所以读取和存入都不需要访问主存。

零地址指令

零地址指令格式中只有操作码字段,没有地址码字段。

零地址的算术逻辑类指令是用在堆栈计算机中的,堆栈计算机没有一般计算机中必备的通用寄存器,因此堆栈就成为提供操作数和保存运算结果的唯一场所。通常,参加算术逻辑运算的两个操作数隐含地从堆栈顶部弹出,送到运算器中进行运算,运算的结果再隐含地压入堆栈。

不同地址数指令特点

许多操作数可能是存放在通用寄存器里的。计算机在 CPU 中设置了相当数量的通用寄存器,用它们来暂存运算数据或中间结果,这样可以大大减少访存次数,提高计算机的处理速度。实际使用的二地址指令多为二地址R (通用寄存器)型,一般通用寄存器数量有8~32个,其地址(或称寄存器编号)有3~5位就可以了。由于二地址 R 型指令的地址码字段很短,且操作数就在寄存器中,所以这类指令的程序存储量最小,程序执行速度最快,在小型、微型计算机中被大量使用。

操作码

非规整型编码(变长编码)

这是一种最简单的编码方法,操作码字段的位数和位置是固定的。为了能表示整个指令系统中的全部指令,指令的操作码字段应当具有足够的位数。
假定指令系统共有 m 条指令,指令中操作码字段的位数为 N 位, 应满足 2^N \geq m
定长编码对于简化硬件设计、减少指令译码时间是非常有利的,在字长较长的大型、中型计算机及超级小型计算机上广泛采用。

例如,IBM 370 机(字长32位)中采用的就是这种方式。 IBM370 机的指令可分为3种不同的长度形式:半字长指令(16位)、单字长指令(32位)和一个半字长指令(48位),共有5种格式.将增加指令译码和分析的难度,使得控制器的设计复杂化。

非规整型编码(变长编码)

变长编码的操作码字段的位数不固定,且分散地放在指令字的不同位置上。能够有效地压缩指令中操作码字段的平均长度,在字长较短的小型、微型计算机上广泛采用。

例如,PDP-11机(字长16位)中采用的就是这种方式。 PDP-11 机的指令分为单字长、二字长、三字长3种,操作码字段占4~16位不等,可遍及整个指令长度’

扩展操作码
向地址码字段扩展操作码的位数。

寻址技术

寻找操作数的地址, 或者下一条将要执行指令的地址. 寻址技术是计算机设计中硬件对软件最早提供支持的技术之一. 包括编址方式寻址方式.

编址方式

指令中的地址码字段将指出操作数的来源和去向,而操作数则存放在相应的存储设备中。在计算机中需要编址的设备主要有 CPU 中的通用寄存器、主存储器和输入输出设备3种。
如果存储设备是CPU 中的通用寄存器,那么在指令字中应给出寄存器编号;如果是主存的一个存储单元,那么在指令字中应给出该主存单元的地址;如果是输入输出设备(接口)中的一个寄器那么指令字中应给出设备编号或设备端口地址或设备映像地址(与主存地址统一编址时).

编址单位

字(word)编址

每个编址单位与访问单位相一致, 都一字长. 在采用字编址的机器中,每执行一条指令,程序计数器加1;每从主存中读出一个数据,地址计数器加1。这种控制方式实现起来简单,地址信息没有任何浪费。但它的主要缺点是不支持非数值应用, 因为非数值, 比如字符通常是按字节存储的.

字节(byte)编址

目前使用最普遍的编址方式是字节编址,这是为了适应非数值应用的需要。字节编址方式使编址单位与信息的基本单位(一个字节)相一致. 编址单位和主存的访问单位是不相同的。通常主存的访问单位是编址单位的若干倍.
在采用字节编址的机器中,如果指令长度是32位,那么每执行完一条指令,程序计数器要加4。如果数据字长是32位,当连续访问存储器时,每读写完一个数据字,地址寄存器要加4。由此可见,字节编址方式存在着地址信息的浪费

位(bit)编址

地址信息浪费很大.

基本的数据寻址方式

立即寻址

立即寻址是一种特殊的寻址方式,指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身。也就是说,数据就包含在指令中,只要取出指令,也就取出了可以立即使用的操作数,这样的数称为立即数

寄存器寻址

直接寻址的变体, 寻址对象是寄存器.

直接寻址

指令中地址码字段给出的地址A就是操作数的有效地址,即形式地址等于有效地址:EA=A。由于这样给出的操作数地址是不能修改的,与程序本身所在的位置无关,所以又称为绝对寻址方式。

间接寻址

寄存器间接寻址

间接寻址的变体, 面向寄存器.

变址寻址

变址寻址就是把变址寄存器R,的内容与指令中给出的形式地址A相加,形成操作数有效地址,即EA=(R_x)+A。R_x的内容称为变址值

基址寻址

基址寻址是将基址寄存器R_b。的内容与指令中给出的位移量D相加,形成操作数有效地址,即EA=(R_b)+D。基址寄存器的内容称为基址值。

相对寻址

页面寻址

==78==

堆栈与堆栈操作

堆栈区通常是主存储器中指定的一个区域,也可以专门设置一个小而快的存储器作为堆栈区。在堆栈容量很小的情况下,还可以用一组寄存器来构成堆栈。

寄存器堆栈

中用一组专门的寄存器构成寄存器堆栈,又称为硬堆栈。这种堆栈的栈顶是固定的,寄存器组中各寄存器是相互连接的,它们之间具有对应位自动推移的功能.

存储器堆栈

从主存中划出一段区域来作为堆栈, 这种堆栈又称为软堆栈,堆栈的大小可变,栈底固定,栈顶浮
动,故需要一个专门的硬件寄存器作为堆栈栈顶指针,简称栈指针(SP)。栈指针所指定的存储单元就是堆栈的栈顶。

指令类型

数据传送类指令

  • 一般传送指令
  • 堆栈操作指令
  • 数据交换指令

运算类指令

  • 算术运算类指令
  • 逻辑运算类指令
  • 移位类指令

程序控制类指令

  • 转移指令
  • 子程序调用指令
  • 返回指令

输入输出类指令

  • 独立编址的I/O指令
  • 统一编址的I/O指令

参考

  1. 《计算机组成原理(第四版)》 IBSN 9787302530213
  • Author:

    slacr_

  • Copyright:

  • Published:

    April 25, 2023

  • Updated:

    April 25, 2023

Buy me a cup of coffee ☕.

1000000