第二章 指令系统

2.3.4 缩短地址码长度的方法

  目前,计算机系统中的主存储器容量通常都很大,而且越来越大。另外,由于普遍采用了虚拟存储器结构,要求指令中给出的地址码是一个虚拟地址(逻辑地址),其长度比实际主存储器的容量所要求的长度还要长得多。例如,目前一般计算机系统中的虚拟地址空间为4GB左右,因此,要求一个地址码的实际长度为32位左右。如此长的地址码对于多地址结构的指令系统是无法容忍的。因此,如何缩短地址码的长度,在设计指令系统时时必须予以考虑的一个问题。
  由于在一般计算机系统中,逻辑地址空间的大小是确定的,因此,缩短地址码长度的根本目的是要用一个比较短的地址码表示一个比较大的逻辑地址空间,同时也要求有比较灵活有效的寻址方式。

  缩短地址码长度的方法很多,现举几个常用的例子如下:
  1、用间址寻址方式缩短地址码长度。在主存储器的低端开辟出一个专门用来存放地址区域,由于表示存储器低端部分的地址所需要的地址码长度可以很短,而一个存储字(一次访问存储器所能获得的数据)的长度通常与一个逻辑地址码的长度相当。如果一个存储字的长度短于一个逻辑地址的长度,也可以用几个连续的存储字来存放一个逻辑地址码。例如,在主存储器最低端的1KB之内有一个用来存放地址码的区域,如果主存储器是按字节编址的,并且,一个存储字的长度为32位,那么,在指令中只要用8位(256个字即为1K字节)长度就能表示一个32位长的逻辑地址,即使再加上寻址方式等信息,一个地址码的长度也只有十多位。

  2、用变址寻址方式缩短地址码长度。由于程序的局部性,在变址寻址方式中使用的地址偏移量可以比较短,例如在IBM370系列机中为12位。通常可以把比较长的基地址(如32位)放在变址寄存器中,在指令的地址码中只需给出比较短的地址偏移量。因此。采用变址寻址方式的地址码长度通常有十多位,二十位左右就可以了。

  3、用寄存器间接地址方式缩短地址码长度是最有效的方法。由于寄存器的数量比较少,通常表示一个寄存器的地址只需要很少几位,而一个寄存器的字长足可以放下一个逻辑地址。例如,有8个用于间接寻址的寄存器,每个寄存器的长度是32位,这样,用一个3位的地址码就能表示一个32位的逻辑地址,再加上寻址方式等信息,一个地址码的长度也不超过10位。
  用来支持间接寻址的寄存器,可以借用通用寄存器,也可专门设置。