逻辑运算指令

指令 格式 语法 描述 例子
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