逻辑运算指令
指令 | 格式 | 语法 | 描述 | 例子 |
---|---|---|---|---|
AND | R-type | AND RD, RS1, RS2 | RD = RS1 & RS2 | and x5, x6, x7 |
OR | R-type | OR RD, RS1, RS2 | RD = RS1 | RS2 | or x5, x6, x7 |
XOR | R-type | XOR RD, RS1, RS2 | RD = RS1 ^ RS2 | xor x5, x6, x7 |
ANDI | I-type | AND RD, RS1, IMM | RD = RS1 & IMM | and x5, x6, 20 |
ORI | I-type | OR RD, RS1, IMM | RD = RS1 | IMM | or x5, x6, 20 |
XORI | I-type | XOR RD, RS1, IMM | RD = RS1 ^ IMM | xor x5, x6, 20 |
- 所有的逻辑运算指令都是按位操作
- XOR(eXclusive OR,异或):两个 bit 值不同(异)则取值 1,如果两个 bit 相同则取值 0
移位运算指令
指令 | 格式 | 语法 | 描述 | 例子 |
---|---|---|---|---|
SLL | R-type | SLL RD, RS1, RS2 | 逻辑左移(Shift Left Logical)RD = RS1 << RS2 | sll x5, x6, x7 |
SRL | R-type | SRL RD, RS1, RS2 | 逻辑右移(Shift Right Logical)RD = RS1 >> RS2 | srl x5, x6, x7 |
SLLI | I-type | SLLI RD, RS1, IMM | 逻辑左移立即数(Shift Left Logical Immediate)RD = RS1 << IMM | slli x5, x6, 3 |
SRLI | I-type | SRLI RD, RS1, IMM | 逻辑右移立即数(Shift Right Logical Immediate)RD = RS1 >> IMM | srli x5, x6, 3 |
SRA | R-type | SRA RD, RS1, RS2 | 算术右移(Shift Right Arithmetic)RD = RS1 >> RS2 | sra x5, x6, x7 |
SRAI | I-type | SRAI RD, RS1, IMM | 算术右移立即数(Shift Right Arithmetic Immediate)RD = RS1 >> IMM | sra x5, x6, 3 |
- 逻辑移位
- 无论是逻辑左移还是逻辑右移,补足的都是 0
- 算术移位
- 算术移位时按照符号位值补足
- 算术移位只有算术右移,没有算术左移
内存读写指令
内存读指令:Load,将数据从内存读入寄存器
指令 | 格式 | 语法 | 描述 | 例子 |
---|---|---|---|---|
LB | I-type | LB RD, IMM(RS1) | Load Byte,从内存中读取一个 8 bits 的数据到 RD 中,内存地址 = RS1 + IMM,数据在保存到 RD 之前会执行 sign-extended | lb x5, 40(x6) |
LBU | I-type | LBU RD, IMM(RS1) | Load Byte Unsigned,从内存中读取一个 8 bits 的数据到 RD 中,内存地址 = RS1 + IMM,数据在保存到 RD 之前会执行 zero-extended | lbu x5, 40(x6) |
LH | I-type | LH RD, IMM(RS1) | Load Halfword,从内存中读取一个 16 bits 的数据到 RD 中,内存地址 = RS1 + IMM,数据在保存到 RD 之前会执行 sign-extended | lh x5, 40(x6) |
LHU | I-type | LHU RD, IMM(RS1) | Load Halfword Unsigned,从内存中读取一个 16 bits 的数据到 RD 中,内存地址 = RS1 + IMM,数据在保存到 RD 之前会执行 zero-extended | lhu x5, 40(x6) |
LW | I-type | LW RD, IMM(RS1) | Load Word,从内存中读取一个 32 bits 的数据到 RD 中,内存地址 = RS1 + IMM | lw x5, 40(x6) |
- 注意:IMM 给出的偏移量范围是 [-2048, 2047]
- Halfword 是 2 个字节,Word 是 4 个字节
内存写指令:Store,将数据从寄存器写出到内存
指令 | 格式 | 语法 | 描述 | 例子 |
---|---|---|---|---|
SB | S-type | SB RS2, IMM(RS1) | Store Byte,将 RS2 寄存器中的低 8 bits 的数据写出到内存中,内存地址 = RS1 + IMM | sb x5, 40(x6) |
SH | S-type | SH RS2, IMM(RS1) | Store Halfword,将 RS2 寄存器中低 16 bits 的数据写出到内存中,内存地址 = RS1 + IMM | sh x5, 40(x6) |
SW | S-type | SW RS2, IMM(RS1) | Store Word,将 RS2 寄存器中的 32 bits 的数据写出到内存中,内存地址 = RS1 + IMM | sw x5, 40(x6) |
- 注意:IMM 给出的偏移量范围是 [-2048, 2047]
小知识大知识:sign-extended(符号扩展)和 zero-extended(零扩展)
- sign-extended 定义:将较短位数的数值扩展为较长位数时,高位填充符号位
- zero-extended 定义:将较短位数的数值扩展为较长位数时,高位填充 0