20200812RISV-V常见指令

算数运算

add rd,rs1,rs2

x[rd] = x[rs1] + x[rs2]

把寄存器x[rs2]加到寄存器x[rs1]上,结果写入x[rd].忽略算术溢出。

 

addi rd,rs1,immediate

x[rd] = x[rs1] + sext(immediate)

把符号位扩展的立即数加到寄存器x[rs1]上,结果写入x[rd]。忽略算术溢出

 

sub rd,rs1,rs2

x[rd] = x[rs1] - x[rs2]

x[rs1]减去x[rs2],结果写入x[rd].忽略算术溢出

 

div rd,rs1,rs2

x[rd] = x[rs1] ÷s x[rs2]

用寄存器x[rs1]的值除以寄存器x[rs2]的值,向零舍入,将这些数视为二进制补码,把商写入x[rd]

 

mul rd,rs1,rs2

x[rd] = x[rs1] * x[rs2]

把寄存器x[rs2]乘到寄存器x[rs1]上,乘积吸入x[rd].忽略算术溢出

 

rem rd,rs1,rs2

x[rd] = x[rs1] %s x[rs2]

求余数,x[rs1]除以x[rs2],向0舍入,都视为2的补码,余数写入x[rd]

 

neg rd,rs2

x[rd] = -x[rs2]

把寄存器x[rs2]的二进制补码写入x[rd]

 

逻辑运算

and rd,rs1,rs2

x[rd] = x[rs1] & x[rs2]

将寄存器x[rs1]和寄存器x[rs2]位与的结果写入x[rd]

 

andi rd,rs1,immediate

x[rd] = x[rs1] & sext(immediate)

把符号位扩展的立即数和寄存器x[rs1]上的值进行位与,结果写入x[rd]

 

or rd,rs1,rs2

x[rd] = ~x[rs1]

把寄存器x[rs1]和寄存器x[rs2]按位取或,结果写入x[rd]

 

xor rd,rs1,immediate

x[rd] = x[rs1] ^sext(immediate)

x[rs1]和有符号扩展的immediate按位异或,结果写入x[rd]

 

位运算

sll rd,rs1,rs2

x[rd] = x[rs1] << x[rs2]

逻辑左移(空位补零)

 

slli rd,rs1,shamt

立即数逻辑左移

 

sr1 rd,rs1,rs2

x[rd] = (x[rs1] >> u x[rs2])

逻辑右移(空位补零)

 

srli rd,rs1,shamt 

立即数逻辑右移

 

sra rd,rs1,rs2

x[rd] = (x[rs1] >> s x[rs2])

算术右移(空位用最高位填充)

 

srai rd,rs1,shamt

立即数逻辑右移

 

not td,rs1

x[rd] = ~x[rs1]

把寄存器x[rs1] 对于1的补码(即按位取反的值)写入x[rd].实际扩展为xori rd,rs1,-1.

 

条件控制指令

beg rs1,rs2,offset

if(rs1 == rs2) pc+= sext(offset)

若寄存器x[rs1]和寄存器x[rs2]的值相等,把pc的值设为当前值加上符号位扩展的偏移offset

 

bge rs1,rs2,offset

if(rs1 >= rs2) pc += sext(offset)

若寄存器x[rs1]的值大于寄存器x[rs2]的值(均视为二进制补码),把pc的值设为当前值加上符号位扩展的偏移offset

 

bit rs1,rs2,offset

if(rs1 <s rs2) pc += sext(offset)

若寄存器x[rs1]的值小于寄存器x[rs2]的值(均视为二进制补码),把pc的值设为当前值加上符号位扩展的偏移offset

 

bne rs1,rs2,offset

if(rs1 != rs2) pc += sext(offset)

若寄存器x[rs1]和寄存器x[rs2]的值不相等,把pc的值设为当前值加上符号位扩展的便宜offset

 

跳转指令

j offset

pc+= sext(offset)

把pc设置为当前值加上符号位扩展的offset,等同于jal x0,offset

 

jal rd,offset

x[rd] = pc+4; pc += sext(offset)

把下一条指令的地址(pc+4),然后把pc设位置当前值加上符号位扩展的offset,rd默认为x1

 

jr rs1

pc = x[rs1]

把pc设置为x[rs1],等同于 jalr x0,0(rs1)

 

jalr rd,offset(rs1)

t = pc +4; pc = (x[rs1] + sext(offset)) &~1;

x[rd] = t

把pc设置位x[rs1] + sign - extend(offset),把计算出的地址的最低有效位设为0,并将原pc+4的值写入f(rd).rd默认为x1

 

ret

pc = x[1]

从子过程返回,实际被扩展为jalr x0,0(x1)

 

加载与存储指令

la rd,symbol

x[rd] = &symbol

将symbol的地址加载到x[rd]中

 

li rd,immediate

x[rd] = immediate

将常量加载到x[rd]中

 

lw rd,offset(rs1)

x[rd] = sext(M[x[rs1] +sext(offset)][31:0])

从地址x[rs1] +sign-extend(offset)读取四个字节,写入x[rd]

 

sw rs2,offset(rs1)

M[x[rs1] + sext(offset) = x[rs2][31:0]

将x[rs2]的低位4个字节存入地址x[rs1] + sign-extend(offset)

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RISC-V(Reduced Instruction Set Computer - Five)是一种开源的指令集架构(ISA),它具有以下几个好处: 1. 开放性和自由度高:RISC-V是一个开源的指令集架构,任何人都可以免费使用、设计和定制。这使得RISC-V非常适合于教育、研究和创新,同时也促进了硬件和软件的生态系统的发展。 2. 简洁而灵活的指令集:RISC-V采用了精简的指令集设计,使得指令集更加简洁和易于理解。同时,RISC-V还提供了可选的扩展指令集,可以根据需求进行定制,从而满足不同应用场景的需求。 3. 跨平台兼容性:RISC-V的指令集架构是与特定硬件实现无关的,这意味着可以在不同的处理器架构上实现RISC-V指令集,并且可以在不同的操作系统上运行RISC-V程序。这种跨平台兼容性使得RISC-V成为了一个通用的指令集架构。 4. 高性能和低功耗:由于RISC-V采用了精简的指令集设计,使得指令执行更加高效。同时,RISC-V还支持硬件流水线和超标量技术,可以提高指令的并行执行能力,从而提高处理器的性能。此外,RISC-V还支持动态电压频率调节(DVFS)等功耗优化技术,可以降低处理器的功耗。 5. 可扩展性和可定制性:RISC-V提供了可选的扩展指令集,可以根据应用需求进行定制。这种可扩展性和可定制性使得RISC-V非常适合于各种不同的应用场景,包括嵌入式系统、物联网设备、高性能计算等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值