皋陶 发表于 2020-8-24 12:05:29

RISC-V 常见指令

本帖最后由 皋陶 于 2020-8-27 14:45 编辑

算术运算add rd, rs1, rs2x = x + x把寄存器 x加到寄存器 x上,结果写入 x。忽略算术溢出。
addi rd, rs1, immediatex = x + sext(immediate)把符号位扩展的立即数加到寄存器 x上,结果写入 x。忽略算术溢出。
sub rd, rs1, rs2x = x − xx减去 x,结果写入 x。忽略算术溢出。
div rd, rs1, rs2x = x ÷s x用寄存器 x的值除以寄存器 x的值,向零舍入,将这些数视为二进制补码,把商写 入 x。
mul rd, rs1, rs2x = x × x把寄存器 x乘到寄存器 x上,乘积写入 x。忽略算术溢出。
rem rd, rs1, rs2x = x %? x求余数。x除以 x,向 0 舍入,都视为 2 的补码,余数写入 x。
neg rd, rs2x = −x把寄存器 x的二进制补码写入 x。
逻辑运算and rd, rs1, rs2x = x & x将寄存器 x和寄存器 x位与的结果写入 x。
andird, rs1, immediatex = x & sext(immediate)把符号位扩展的立即数和寄存器 x上的值进行位与,结果写入 x。
or rd, rs1, rs2x = ~x把寄存器 x和寄存器 x按位取或,结果写入 x。
xor rd, rs1, immediatex = x ^ sext(immediate)x和有符号扩展的 immediate 按位异或,结果写入 x。
位运算sll rd, rs1, rs2x = x ≪ x逻辑左移(空位补0)
slli rd, rs1, shamt立即数逻辑左移
srl rd, rs1, rs2x = (x ≫? x)逻辑右移(空位补0)
srli rd, rs1, shamt立即数逻辑右移
sra rd, rs1, rs2x = (x ≫? x)算术右移(空位用最高位填充)
srai rd, rs1, shamt立即数逻辑右移
not td, rs1x = ~x把寄存器 x对于 1 的补码(即按位取反的值)写入 x。实际被扩展为 xori rd, rs1, -1。
条件控制指令beq rs1, rs2, offsetif (rs1 == rs2) pc += sext(offset)若寄存器 x和寄存器 x的值相等,把 pc 的值设为当前值加上符号位扩展的偏移 offset。
bge rs1, rs2, offsetif (rs1 ≥s rs2) pc += sext(offset)若寄存器 x的值大于等于寄存器 x的值(均视为二进制补码),把 pc 的值设为当前 值加上符号位扩展的偏移 offset。
blt rs1, rs2, offsetif (rs1 <s rs2) pc += sext(offset)若寄存器 x的值小于寄存器 x的值(均视为二进制补码),把 pc 的值设为当前值加 上符号位扩展的偏移 offset。
bne rs1, rs2, offsetif (rs1 ≠ rs2) pc += sext(offset)若寄存器 x和寄存器 x的值不相等,把 pc 的值设为当前值加上符号位扩展的偏移 offset。
跳转指令j offsetpc += sext(offset)把 pc 设置为当前值加上符号位扩展的 offset,等同于 jal x0, offset。
jal rd, offsetx = pc+4; pc += sext(offset)把下一条指令的地址 (pc+4),然后把 pc 设置为当前值加上符号位扩展的offset。rd 默认为 x1。
jr rs1pc = x把 pc 设置为 x,等同于 jalr x0, 0(rs1)。
jalr rd, offset(rs1)t = pc+4; pc =(x+sext(offset))&~1; x= t把 pc 设置为 x + sign-extend(offset),把计算出的地址的最低有效位设为 0,并将原 pc+4 的值写入 f。rd 默认为 x1。
ret pc = x从子过程返回。实际被扩展为 jalr x0, 0(x1)。
加载与存储指令la rd, symbolx = &symbol将 symbol 的地址加载到 x中。
li rd, immediatex = immediate将常量加载到 x中。
lw rd, offset(rs1)x = sext(M + sext(offset)])从地址 x + sign-extend(offset)读取四个字节,写入 x。
sw rs2, offset(rs1)M + sext(offset) = x将 x的低位 4 个字节存入内存地址 x+sign-extend(offset)。
参考:RISC-V 手册(翻译版) http://crva.io/documents/RISC-V-Reader-Chinese-v2p1.pdf本篇完,感谢关注:RISC-V单片机中文网
页: [1]
查看完整版本: RISC-V 常见指令