目录
2 ADDX2 (Add register shifted by 1)
3 ADDX4 (Add register shifted by 2)
4 ADDX8 (Add register shifted by 3)
5 SUB (Subtract two registers)
6 SUBX2 (Subtract register from register shifted by 1)
7 SUBX4 (Subtract register from register shifted by 2)
8 SUBX8 (Subtract register from register shifted by 3)
12 ADDMI (Add signed constant shifted by 8)
14 SALTU (Set AR if Less Than Unsigned)
一 算术指令概述
算术指令,包括带有少量移位的加法和减法,用于地址计算和合成常数乘法。ADDMI指令用于扩展加载和存储指令的范围。
表3.20. 算术指令
指令 | 格式 | 定义 |
---|---|---|
ADD | RRR | 两个寄存器相加 |
ADDX2 | RRR | 寄存器加上寄存器右移一位 |
ADDX4 | RRR | 寄存器加上寄存器右移两位 |
ADDX8 | RRR | 寄存器加上寄存器右移三位 |
SUB | RRR | 两个寄存器相减 |
SUBX2 | RRR | 寄存器减去寄存器右移一位 |
SUBX4 | RRR | 寄存器减去寄存器右移两位 |
SUBX8 | RRR | 寄存器减去寄存器右移三位 |
NEG | RRR | 取反 |
ABS | RRR | 绝对值 |
ADDI | RR8i | 加上带符号的立即数 |
ADDMI | RR8i | 加上带符号的立即数右移八位 |
SALT | RRR | 设置AR,如果小于则置零 |
SALTU | RRR | 设置AR,如果无符号小于则置零 |
Chapter 3. Core Architecture
Table 3.20. Arithmetic Instructions (continued)
指令 | 格式 | 定义 |
---|---|---|
ADDI | RR8i | 加上带符号的立即数 |
ADDMI | RR8i | 加上带符号的立即数右移八位 |
SALT | RRR | 如果小于则设置AR为0 |
SALTU | RRR | 如果无符号小于则设置AR为0 |
二 算术指令详述
1 ADD (Add two registers)
格式: ADD Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: ADD R0, R1, R2
- 将R1和R2的内容相加并将结果存储到R0。
注意事项:
- 注意溢出情况。
2 ADDX2 (Add register shifted by 1)
格式: ADDX2 Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: ADDX2 R0, R1, R2
- 将R1的内容右移1位并与R2相加,结果存储到R0。
注意事项:
- 注意溢出情况。
3 ADDX4 (Add register shifted by 2)
格式: ADDX4 Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: ADDX4 R0, R1, R2
- 将R1的内容右移2位并与R2相加,结果存储到R0。
注意事项:
- 注意溢出情况。
4 ADDX8 (Add register shifted by 3)
格式: ADDX8 Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: ADDX8 R0, R1, R2
- 将R1的内容右移3位并与R2相加,结果存储到R0。
注意事项:
- 注意溢出情况。
5 SUB (Subtract two registers)
格式: SUB Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: SUB R0, R1, R2
- 计算R1和R2之差并将结果存储到R0。
注意事项:
- 注意溢出情况。
6 SUBX2 (Subtract register from register shifted by 1)
格式: SUBX2 Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: SUBX2 R0, R1, R2
- 计算R1减去R2右移1位的结果,结果存储到R0。
注意事项:
- 注意溢出情况。
7 SUBX4 (Subtract register from register shifted by 2)
格式: SUBX4 Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: SUBX4 R0, R1, R2
- 计算R1减去R2右移2位的结果,结果存储到R0。
注意事项:
- 注意溢出情况。
8 SUBX8 (Subtract register from register shifted by 3)
格式: SUBX8 Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: SUBX8 R0, R1, R2
- 计算R1减去R2右移3位的结果,结果存储到R0。
注意事项:
- 注意溢出情况。
9 NEG (Negate)
格式: NEG Rd, Rs
- Rd: 目标寄存器
- Rs: 源寄存器
实例: NEG R0, R1
- 将R1的内容取反并存储到R0。
注意事项:
- 注意溢出情况。
10 ABS (Absolute value)
格式: ABS Rd, Rs
- Rd: 目标寄存器
- Rs: 源寄存器
实例: ABS R0, R1
- 将R1的内容取绝对值并存储到R0。
注意事项:
- 注意溢出情况。
11 ADDI (Add signed constant)
格式: ADDI Rd, Rs, #imm
- Rd: 目标寄存器
- Rs: 源寄存器
- #imm: 带符号的立即数
实例: ADDI R0, R1, #10
- 将R1的内容加上10并存储到R0。
注意事项:
- 立即数必须在-128至+127之间。
12 ADDMI (Add signed constant shifted by 8)
格式: ADDMI Rd, Rs, #imm
- Rd: 目标寄存器
- Rs: 源寄存器
- #imm: 带符号的立即数右移8位
实例: ADDMI R0, R1, #10
- 将R1的内容加上10右移8位并存储到R0。
注意事项:
- 立即数必须在-128至+127之间。
13 SALT (Set AR if Less Than)
格式: SALT Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: SALT R0, R1, R2
- 如果R1小于R2,则将R0设为全零;否则不变。
注意事项:
- 此指令仅考虑带符号比较。
14 SALTU (Set AR if Less Than Unsigned)
格式: SALTU Rd, Rs, Rt
- Rd: 目标寄存器
- Rs: 第一个源寄存器
- Rt: 第二个源寄存器
实例: SALTU R0, R1, R2
- 如果R1无符号小于R2,则将R0设为全零;否则不变。
**