Skip to content

Chapter 1 ISA Review

1 ISA Classification

类型 优点 缺点
Register-register
(0-3)
\(\textbf{·}\) 指令编码简单、长度固定
\(\textbf{·}\) 代码生成模型简单
\(\textbf{·}\) 指令执行所需的时钟周期数相近
\(\textbf{·}\) 与指令中包含内存引用的架构相比,指令数更多
\(\textbf{·}\) 指令数量多且指令密度低,会导致程序体积更大
Register-memory
(1-2)
\(\textbf{·}\) 无需单独的加载指令即可访问数据
\(\textbf{·}\) 指令格式通常易于编码且指令密度良好
\(\textbf{·}\) 操作数不等价,因为二元操作中的源操作数会被覆盖
\(\textbf{·}\) 每条指令中编码寄存器编号和内存地址可能会限制寄存器的数量
\(\textbf{·}\) 每条指令的时钟周期数因操作数的位置而异
Mmemory-memory
(2,2) or (3,3)
\(\textbf{·}\) 最为紧凑
\(\textbf{·}\) 不会为临时数据浪费寄存器
\(\textbf{·}\) 指令长度差异大,尤其是三操作数指令
\(\textbf{·}\) 每条指令的工作量差异也很大
\(\textbf{·}\) 内存访问会造成内存瓶颈(如今已不再使用)
不同 ISA 架构如何计算 D=A*B-(A+C*B)
Stack
  1. push A
  2. push B
  3. mul(A*B)
  4. push A
  5. push C
  6. push B
  7. mul(C*B)
  8. add(A+C*B)
  9. sub(AB-(A+CB))
  10. pop D
Accumulator
  1. load B
  2. mul C(B*C)
  3. add A(A+C*B)
  4. store D
  5. load A
  6. mul B(A*B)
  7. sub D(AB-(A+CB))
  8. store D
Memory-Memory
  • 3 操作数

    1. mul D,A,B(A*B)
    2. mul E,C,B(C*B)
    3. add E,A,E(A+C*B)
    4. sub E,D,E
  • 2 操作数

    1. mov D,A
    2. mul E,B
    3. mul D,B(A*B)
    4. add E,A
    5. mov E,C
    6. sub E,D
Register-Memory
  1. load R1,A
  2. mul R1,B(A*B)
  3. load R2,C
  4. mul R2,B(C*B)
  5. add R2,A(A+C*B)
  6. store R2,D
  7. sub R1,D(AB-(A+CB))
  8. store R1,D
Load-Store
  1. load R1,&A
  2. load R2,&B
  3. load R3,&C
  4. mul R7,R3,R2(C*B)
  5. add R8,R7,R1(A+C*B)
  6. mul R9,R1,R2(A*B)
  7. sub R10,R9,R8
  8. store R10,D

为什么几乎所有新架构都使用通用寄存器(GPRs)?

  • 寄存器比内存(甚至缓存)快得多
    • 时间局部性(Temporal Locality):寄存器中的值可直接复用,无需重复从内存加载
    • 寄存器的值可立即获取
  • 寄存器便于变量存储
    • 编译器会将部分变量直接分配到寄存器中,减少内存交互
    • 代码更紧凑(相较于内存地址,用小字段即可指定寄存器)

2 More about ISA

维度 内容
操作数存储位置 寄存器、内存、栈、累加器
显式操作数数量 0(栈式)、1(累加器式)、2/3(寄存器式)
操作数地址指定方式 立即寻址、寄存器寻址、基址寻址、PC相对寻址等
操作数类型与大小 字节(8bit)、半字(16bit)、字(32bit)、双字(64bit)、IEEE 754 浮点数等
支持的操作类型 算术逻辑、数据传输、控制流、系统调用、浮点运算、字符串操作等
类型 位数(bit)
ASCII 字符 8
Unicode 字符、半字 16
整数、字 32
双字、长整数 64
IEEE 754 浮点型 —— 单精度 32
IEEE 754 浮点型 —— 双精度 64
浮点型 —— 扩展双精度 80
字节序类型 存储规则 示例(0x12345678,内存地址从低到高)
小端序(Little Endian) 低有效字节存低地址 78|56|34|12
大端序(Big Endian) 高有效字节存低地址 12|34|56|78
  • RISC-V 采用小端序(Little Endian)
  • 对齐访问能让 CPU 用一次内存操作获取数据,若未对齐则需多次访问
内存地址对齐示意图


寻址方式 示意图
立即寻址(Immediate addressing)
寄存器寻址(Register addressing)
基址寻址(Base addressing)
PC 相对寻址(PC-relative addressing)