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
push Apush Bmul(A*B)push Apush Cpush Bmul(C*B)add(A+C*B)sub(AB-(A+CB))pop D
Accumulator
load Bmul C(B*C)add A(A+C*B)store Dload Amul B(A*B)sub D(AB-(A+CB))store D
Memory-Memory
-
3 操作数:
mul D,A,B(A*B)mul E,C,B(C*B)add E,A,E(A+C*B)sub E,D,E
-
2 操作数:
mov D,Amul E,Bmul D,B(A*B)add E,Amov E,Csub E,D
Register-Memory
load R1,Amul R1,B(A*B)load R2,Cmul R2,B(C*B)add R2,A(A+C*B)store R2,Dsub R1,D(AB-(A+CB))store R1,D
Load-Store
load R1,&Aload R2,&Bload R3,&Cmul R7,R3,R2(C*B)add R8,R7,R1(A+C*B)mul R9,R1,R2(A*B)sub R10,R9,R8store 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) | ![]() |



