0%

计组chp5-指令集架构

参考的书《计算机组成与体系结构》第4版(黑皮书)(The Essentials of Computer Organization and Architecture)。注:目前仅记录考试需要用到的部分。

5.2指令格式

大端小端

  • 大端big endian存储:低地址存高字节,可在低地址处判断正负
  • 小端:16位转32位不需要变化

eg.使用32bit,存储value: 0xABCD1234, 0x00FE4321, 0x10,从地址0x200开始:

无标题

注意上图中0x10的存储,不足32bit补零。此时可明显看出若采用16位存储,大端方式需要变化而小端不用。

架构

  • 堆栈架构stack:指令和操作数从堆栈中获取,堆栈不可随机访问
  • 累加器架构accumulator:二元运算的一个操作数隐含在累加器中,另一个在内存中,造成大量总线流量
  • 通用寄存器架构general purpose register(GPR)
    • 比累加器架构更快
    • 编译器的有效实现
    • 更长的指令

堆栈

二进制指令(ADD, MULT)使用堆栈上的顶部两项,要求使用后缀表示法即逆波兰式。计算$Z=XY×WU×+$(后缀表达式)

1
2
3
4
5
6
7
8
PUSH X
PUSH Y
MULT
PUSH W
PUSH U
MULT
ADD
POP Z

不同操作数的ISA执行算术

eg.计算$Z=X×Y+W×U$(中缀表达式),用R表示寄存器

  • 三地址ISA(eg.大型机)

    1
    2
    3
    MULT R1,X,Y
    MULT R2,W,U
    ADD Z,R1,R2
  • 双地址ISA(eg.Intel),双地址ISA通常要求一个操作数是寄存器

    1
    2
    3
    4
    5
    6
    LOAD R1,X
    MULT R1,Y
    LOAD R2,W
    MULT R2,U
    ADD R1,R2
    STORE Z,R1
  • 单地址ISA(eg.MARIE),其中一个操作数隐含在累加器中?

    1
    2
    3
    4
    5
    6
    7
    LOAD X
    MULT Y
    STORE TEMP
    LOAD W
    MULT U
    ADD TEMP
    STORE Z

扩展操作码

通过改变操作码的长度和使用转义操作码实现多种多样的指令集。

eg.8位指令可以构成:

  • 3条 3位双操作数
  • 2条 4位单操作数
  • 4条 3位单操作数

5.3指令类型

  • data movement
  • arithmetic
  • boolean
  • bit manipulation
  • I/O
  • control transfer
  • special purpose

5.4寻址

Addressing

  • 立即寻址immediate addressing:数据是指令的一部分(即操作数就是真正的数值)
  • 直接寻址direct:操作数是数据地址
  • 寄存器寻址register:操作数是数据在寄存器中的位置
  • 间接寻址indirect:操作数是数据地址的地址(套娃?
  • 寄存器间接寻址register indirect:操作数是数据地址在寄存器中的位置
  • 索引寻址indexed:操作数是地址,最终有效地址=操作数+指定偏移量(存于某寄存器如图中的R1)
  • 基址寻址based:与indexed类似,区别在于indexed中的寄存器用来保存偏移量,based中的寄存器用来保存基地址。

eg.LOAD 800, R1 0x800(offset)image-20220426195229436

5.5指令流水线

instruction pipelining

将指令执行周期分为更小的步骤:

  1. 获取指令fetch
  2. 解码操作码decode opcode
  3. 计算有效操作数的地址(寻址?)
  4. 获取操作数operands
  5. 执行指令execute
  6. 存储结果store

这些较小的步骤可以并行执行以增加吞吐量,每个时钟周期执行一小步,且阶段重叠:image-20220426200318303

加速比

eg.假设共有n条指令,一条指令由k个小步骤组成,执行一个阶段用时$t_p$。即共用时:
$$
(k×t_p)+(n-1)t_p=(k+n-1)t_p
$$
加速比:$Speedup S=\frac{nkt_p}{(k+n-1)t_p}$

当n趋于无穷大,(k+n-1)→n,得到利率加速比=k

pipeline停止或刷新

  • 资源冲突
  • 数据依赖
  • 条件分支

作业

1.大端小端

image-20220427141028780

注意看位数不足时的操作

c)why?小端更好?

16.堆栈算术

  1. 逆波兰式
  2. 转为指令:单地址,默认隐含堆栈
    1. Push、Subtract、Mult、Add、Div、Pop

17.指令数量

  1. 判断是否可能可以
    1. 计算总共需要多少位=指令条数×2^地址位数
    2. 与主存容量对比
  2. 如果可能,尝试写出
  3. 妙啊,上图image-20220427143048662

题中说已有双地址和零地址指令,那就从两头减?

21.寻址

立即、直接、间接、索引

29.指令流水线

分别计算用的时间,需要根据实际情况判断当指令数为多少时二者用时相等