### 计算机系统结构:DLX指令集详解
#### DLX指令集概述
DLX是一种简化版的RISC(精简指令集计算)架构,主要用于教学和研究目的,特别是帮助理解计算机体系结构的基本概念。DLX的设计借鉴了MIPS架构的一些特性,但进行了简化以便于学习。
#### 新增指令介绍
BYU版本的DLX指令集中添加了8条新指令,这些指令未在Hennesy和Patterson的经典教科书《Computer Architecture: A Quantitative Approach》或Sailer和Kaeli合著的手册《The DLX Instruction Set Architecture Handbook》中出现。新增的指令包括:
- `sgeu`: 无符号大于等于比较。
- `sgtu`: 无符号大于比较。
- `sleu`: 无符号小于等于比较。
- `sltu`: 无符号小于比较。
- 每个比较指令都有一个立即数形式。
这些指令的加入是为了简化lcc(轻量级C编译器)的DLX后端实现,使得编译过程更加高效。
#### DLX指令集中的标记和符号
DLX指令集中使用了一些特定的标记和符号来表示不同的组件和操作:
- `x_y`: 表示x的第y位。
- `x_y..z`: 表示x从第y位到第z位(右对齐)。
- `x^y`: 表示x重复y次。
- `x##y`: 表示x与y拼接在一起。
- `IR`: 指令寄存器。
- `IAR`: 中断地址寄存器。
- `PC`: 程序计数器。
- `R[rega]`: 整数寄存器[IR_6..10]。
- `R[regb]`: 整数寄存器[IR_11..15]。
- `R[regc]`: 整数寄存器[IR_16..20]。
- `F[frega]`: 浮点寄存器[IR_6..10]。
- `F[fregb]`: 浮点寄存器[IR_11..15]。
- `F[fregc]`: 浮点寄存器[IR_16..20]。
- `D[drega]`: 双精度寄存器[IR_6..10]。
- `D[dregb]`: 双精度寄存器[IR_11..15]。
- `D[dregc]`: 双精度寄存器[IR_16..20]。
- `imm16`: 表示(IR_16)^16##IR_16..31的值。
- `uimm16`: 表示0^16##IR_16..31的值。
- `imm26`: 表示(IR_6)^6##IR_6..0的值。
- `fps`: 浮点状态标志位。
- `<--`: 表示一个32位传输。
- `<--n`: 表示一个n位传输。
#### 注意事项和假设
在使用DLX指令集时需要注意以下几点:
- **位编号**:比特从0(最高有效位)编号到31(最低有效位)。
- **数据传输**:除非另有说明,所有传输都是32位的,除了双精度浮点运算,它们默认为64位传输。
- **整数运算**:所有的整数运算都在32位整数上进行。
- **条件赋值**:向整数寄存器[x]的赋值取决于x不为零。寄存器0具有硬连线的零值,并且不能被修改。
- **双精度寄存器**:双精度寄存器[x]是一个64位的数据量,它代表与浮点寄存器[x]和浮点寄存器[x+1]相同的存储空间。只允许使用偶数值的x(双精度寄存器地址对齐)。
- **浮点格式**:单精度浮点数为32位,双精度浮点数为64位。具体的浮点格式取决于模拟器运行的机器。
这些新增指令和标记的引入不仅扩展了DLX指令集的功能,还使得DLX架构更加适合用于教学和实际应用。通过了解这些指令和符号的具体含义及其应用场景,我们可以更好地理解和应用DLX指令集。