目录
1. EXTUI (Extract Unsigned Immediate Field)
2. SLLI (Shift Left Logical Immediate)
3. SRRLI (Shift Right Logical Immediate)
4. SRAI (Shift Right Arithmetic Immediate)
6. SRA (Shift Right Arithmetic)
9. SSA8B (Set Shift Amount for Big Endian)
10. SSA8L (Set Shift Amount for Little Endian)
11. SSR (Set Shift Right Register)
12. SSL (Set Shift Left Register)
13. SSAI (Set Shift Amount Immediate)
一 移位指令概述
表3-22中的移位指令提供了一组丰富的操作,同时避免了关键的定时路径。参阅第25页的第3.3.2节以获得更多信息。
表3-22. 移位指令
指令 | 格式 | 定义 |
---|---|---|
EXTUI | RRR | 提取无符号字段立即数(右移0...31位,AND掩码为1...16个1) |
SLLI | RRR | 左移逻辑立即数1...31位(参阅第744页的立即数编码)。 |
SRRLI | RRR | 右移逻辑立即数0...15位位置 |
SRAI | RRR | 右移算术立即数0...31位位置 |
SRC | RRR | 右移组合(从SAR提取的通道移位) |
SRA | RRR | 右移算术(从SAR移位数量) |
SLL | RRR | 左移逻辑(从SAR移位数量的通道移位) |
SRL | RRR | 右移逻辑(从SAR移位数量的通道移位) |
SSA8B | RRR | 设置大端字节对齐的移位量寄存器(SAR) |
SSA8L | RRR | 设置小端字节对齐的移位量寄存器(SAR) |
SSR | RRR | 设置右移逻辑的移位量寄存器(SAR),该指令不同于WSSRtoSAR,只使用寄存器的五位最不重要位 |
SSL | RRR | 设置左移逻辑的移位量寄存器(SAR) |
SSAI | RRR | 设置移位量寄存器(SAR)的立即数 |
二 指令详述
这些指令是用于处理器中数据操作的一些基本命令,主要用于位移操作。下面我将根据指令的格式、使用实例和注意事项来逐一介绍这些指令。
1. EXTUI (Extract Unsigned Immediate Field)
格式: EXTUI Rd, Rn, #imm, #mask
- Rd: 目标寄存器
- Rn: 源寄存器
- #imm: 右移的位数(0-31)
- #mask: AND掩码(1-16个连续的1)
实例: EXTUI R0, R1, #4, #0x0F
- 将R1的内容右移4位后与0x0F进行AND操作,结果存储到R0。
注意事项:
- 确保掩码的长度与右移后的位宽匹配。
- 移位后的结果会被截断到指定的位宽。
2. SLLI (Shift Left Logical Immediate)
格式: SLLI Rd, Rn, #imm
- Rd: 目标寄存器
- Rn: 源寄存器
- #imm: 左移位数(1-31)
实例: SLLI R0, R1, #2
- 将R1的内容左移2位,结果存储到R0。
注意事项:
- 确保移位不会导致溢出。
3. SRRLI (Shift Right Logical Immediate)
格式: SRRLI Rd, Rn, #imm
- Rd: 目标寄存器
- Rn: 源寄存器
- #imm: 右移位数(0-15)
实例: SRRLI R0, R1, #3
- 将R1的内容右移3位(逻辑),结果存储到R0。
注意事项:
- 移位位数不能超过15位。
4. SRAI (Shift Right Arithmetic Immediate)
格式: SRAI Rd, Rn, #imm
- Rd: 目标寄存器
- Rn: 源寄存器
- #imm: 右移位数(0-31)
实例: SRAI R0, R1, #2
- 将R1的内容右移2位(算术),结果存储到R0。
注意事项:
- 算术移位会保持符号位。
5. SRC (Shift Right Combined)
格式: SRC Rd, Rn, SAR
- Rd: 目标寄存器
- Rn: 源寄存器
- SAR: 移位量寄存器
实例: SRC R0, R1, SAR
- 将R1的内容根据SAR寄存器中的值进行右移(逻辑/算术,取决于实现),结果存储到R0。
注意事项:
- 确保SAR寄存器的值符合预期。
6. SRA (Shift Right Arithmetic)
格式: SRA Rd, Rn, SAR
- Rd: 目标寄存器
- Rn: 源寄存器
- SAR: 移位量寄存器
实例: SRA R0, R1, SAR
- 将R1的内容根据SAR寄存器中的值进行算术右移,结果存储到R0。
注意事项:
- 确保SAR寄存器的值不超过最大移位位数。
7. SLL (Shift Left Logical)
格式: SLL Rd, Rn, SAR
- Rd: 目标寄存器
- Rn: 源寄存器
- SAR: 移位量寄存器
实例: SLL R0, R1, SAR
- 将R1的内容根据SAR寄存器中的值进行逻辑左移,结果存储到R0。
注意事项:
- 确保SAR寄存器的值不超过最大移位位数。
8. SRL (Shift Right Logical)
格式: SRL Rd, Rn, SAR
- Rd: 目标寄存器
- Rn: 源寄存器
- SAR: 移位量寄存器
实例: SRL R0, R1, SAR
- 将R1的内容根据SAR寄存器中的值进行逻辑右移,结果存储到R0。
注意事项:
- 确保SAR寄存器的值不超过最大移位位数。
9. SSA8B (Set Shift Amount for Big Endian)
格式: SSA8B SAR, Rn
- SAR: 移位量寄存器
- Rn: 源寄存器
实例: SSA8B SAR, R1
- 将R1的内容的大端字节对齐值写入SAR寄存器。
注意事项:
- 适用于大端模式。
10. SSA8L (Set Shift Amount for Little Endian)
格式: SSA8L SAR, Rn
- SAR: 移位量寄存器
- Rn: 源寄存器
实例: SSA8L SAR, R1
- 将R1的内容的小端字节对齐值写入SAR寄存器。
注意事项:
- 适用于小端模式。
11. SSR (Set Shift Right Register)
格式: SSR SAR, Rn
- SAR: 移位量寄存器
- Rn: 源寄存器
实例: SSR SAR, R1
- 将R1的低五位写入SAR寄存器作为移位量。
注意事项:
- 只使用源寄存器的最低五位。
12. SSL (Set Shift Left Register)
格式: SSL SAR, Rn
- SAR: 移位量寄存器
- Rn: 源寄存器
实例: SSL SAR, R1
- 将R1的内容写入SAR寄存器作为移位量。
注意事项:
- 通常用于设置左移的移位量。
13. SSAI (Set Shift Amount Immediate)
格式: SSAI SAR, #imm
- SAR: 移位量寄存器
- #imm: 立即数移位量
实例: SSAI SAR, #4
- 将4写入SAR寄存器作为移位量。
注意事项:
- 确保立即数符合指令要求的范围。