【计算机组成与设计:硬件/软件接口】第二章:指令:计算机的语言

【计算机组成与设计:硬件/软件接口】第二章:指令:计算机的语言

标签(空格分隔):【计算机组成与设计:硬件/软件接口】


第二章:指令:计算机的语言

2.1 引言

  • 指令集(instruction set):一个给定的计算机体系结构所包含的指令集合。

  • 存储程序概念(stored-program concept):多种类型的指令和数据均以数字形式存储于存储器中的概念,存储程序型计算机即来源于此。

  • 我们采用 MIPS 技术的指令集。使用自顶向下,循序渐进的方法并结合各部件及其说明。

  • 尽管可以简单使用序号 0 ~ 31来表示相应的寄存器,但 MIPS 约定书写指令时候使用一个 “ " 使 s0, s 1.... C J a v a t0,$t2…来表示将程序编译为 MIPS 指令所需的临时寄存器。

  • 如下表,为指令集的总体情况。

image.png-232.8kB
1.PNG-259.2kB
2.PNG-138.7kB

2.2 计算机硬件的操作

  • 硬件设计的三条基本原则:
    1. 简单源于规整
    2. 越小越快
    3. 3.

2.3 计算机硬件的操作数

  • 与高级语言程序不同,MIPS 算术运算指令的操作数是很严格的,它们必须来自于寄存器。寄存器由硬件直接构建并且数量有限,是计算机硬件设计的基本元素。当计算机完成设计之后,寄存器对程序员是可见的。MIPS体系结构中寄存器大小是 32位,考虑到 32位为一组的情况出现,因此出现了 的概念。

  • 字(word):计算机中的基本访问单位,通常是 32 位为一位,在MIPS体系结构中与寄存器大小相同。

  • MIPS 一类的典型的现代计算机中有 32 个寄存器。在这里三个操作数限定必须从 32 个 32 位寄存器中选取。

2.3.1 存储器操作数

  • 在复杂的数据结构中的数据元素可能远多于计算机中寄存器的个数,那么计算机如何表示和访问这样大得结构呢?
    在计算机的 5 个组成部分中。计算机只能将少量数据保存在寄存器中,但存储器中有数十亿的数据元素。因此,数据结构(比如数组和结构)是存放在存储器中的。
    因此,MIPS的算术运算指令只对寄存器进行操作,故MIPS 必须包含在存储器和寄存器之间传送数据的指令。这便是数据传送指令。另外,为了访问存储器中的一个字,指令必须给出存储器地址。

  • 数据传送指令(data transfer instruction):在存储器和寄存器之间移动数据的指令。

  • 地址(address):用于在存储器空间中指明某特定数据元素位置的值。

  • 在下图中,存储器地址和该地址对应的是数据。如果这些元素是字,那么这些地址就是错误的,因为MIPS实际上是按照字节编址的。而一个字是 4 个字节,下图为顺序字编址的内存地址。
    image.png-18.2kB

  • 取数(load word,lw):将数据从存储器复制到寄存器的数据传送指令。

  • 除了将变量和寄存器对应起来,编译器还在存储器中为诸如数组和结构这类的数据机构分配了相应的位置。编译器可以将它们在存储器中的起始位置放到数据传送指令中。
    很多程序都用到 8 比特的字节类型,并且大多数体系结构按字节编址。因此,一个字的地址必须和它所包括的 4 字节中某一个地址相匹配,并且连续的字的地址相差 4.
    可见下图:
    1.PNG-12.3kB

  • 对齐限制(alignment restriction):数据地址与存储器的自然边界对齐的要求。因为 MIPS 是按照字节编址的,所以字的起始位置必须是 4 的倍数。这叫做对齐限制 ,许多体系结构都有这样的限制。

  • 两种类型的字节寻址计算机:大端寻址(big end):使用最左边的字节地址作为字地址。小段寻址(little end):使用最右边的字节地址作为字地址。
    MIPS 使用的大端编址。
    由于使用相同的地址取访问一个字和 4 个字节时“端”才起作用,因此大多数情况下勿需关注。

  • 字节寻址也影响数组下标。例如,A是含有一百个字的数组,如果需要访问 A[8], 它的偏移量为 4 * 8 = 32.

  • 与取数指令相对应的指令叫做存数(store)指令,它将数据从寄存器复制到存储器。存数指令的格式与取数指令相似:首先是操作码,接着是包含存数数据的寄存器,然后是数组元素的偏移量,最后是基址寄存器。MIPS中存储指令为 sw,为 store word 的缩写。

  • 许多程序的变量个数要远多于计算机的寄存器个数。因此,编译器会尽量将最常用的变量保持在寄存器中,而将其他的变量放在存储器中。方法是使用取数/存数指令在寄存器和存储器之间传送变量。将不常用的变量(或者稍后才使用的变量)存回到存储器中的过程叫做寄存器一处(spilling).

  • 存储器一定比寄存器慢,因为存储器器数量更少。

  • 寄存器中的数据更容易得到利用,一条 MIPS 算术运算指令能够完成读两个寄存器、对它们进行运算以及回写运算结果的操作。而一条 MIPS 数据传送指令只能完成读一个操作数或者写一个操作数的操作,并且不能对他们进行运算。

  • 寄存器与存储器相比,访问时间短,吞吐率高,七寸其中的数据访问速度快并且易于利用,访问寄存器相对于访问存储器功耗更小。因此,为了获得高性能和节约功耗,指令集的体系结构必须拥有足够的寄存器,并且编译器必须高效地利用这些寄存器。

2.3.2 常数或立即操作数

我的微信公众号

猜你喜欢

转载自blog.csdn.net/sd4567855/article/details/81428333