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

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

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


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

  • 第二章:指令:计算机的语言
    • 2.1 引言
    • 2.2 计算机硬件的操作
    • 2.3 计算机硬件的操作数
      • 2.3.1 存储器操作数
      • 2.3.2 常数或立即操作数
    • 2.4 有符 数和无符 数
    • 2.5 计算机中指令的表示
    • 2.6 逻辑操作
    • 2.7 决策指令
      • 2.7.1 循环
      • 2.7.2 case/switch语句
    • 2.8 计算机硬件对过程的支持
      • 2.8.1 使用更多的寄存器
      • 2.8.2 嵌套过程
      • 2.8.3 在栈中为新数据分配空间
      • 2.8.4 在堆中为新数据分配空间
    • 2.9 人机交互
    • 2.10 MIPS中 32 位立即数和寻址
      • 2.10.1 32位立即数
      • 2.10.2 分支和跳转中的寻址
      • 2.10.3 MIPS寻址模式总结
      • 2.10.4 机器语言解码
    • 2.11 并行与指令:同步
    • 2.12 翻译并执行程序
      • 2.12.1 编译器
      • 2.12.2 汇编器
      • 2.12.3 链接器
      • 2.12.4 加载器
      • 2.12.5 动态链接库

2.1 引言

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

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

  • 尽管可以简单使用序 0 ~ 31来表示相应的寄存器,但 MIPS 约定书写指令时候使用一个 “"符后面跟两个字符来表示一个寄存器。现在,我们使用” role=”presentation” style=”position: relative;”>使s0,s1….表示C和Java程序中的变量所对应的寄存器;用” role=”presentation” style=”position: relative;”>s1….CJavat0,$t2…来表示将程序编译为 MIPS 指令所需的临时寄存器。

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

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

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

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

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

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

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

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

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

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

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