打印
[其他]

RISV-V常见指令

[复制链接]
1681|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skyred|  楼主 | 2022-6-13 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
算数运算

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]


使用特权

评论回复
沙发
skyred|  楼主 | 2022-6-13 21:48 | 只看该作者
逻辑运算

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]

使用特权

评论回复
板凳
skyred|  楼主 | 2022-6-13 21:49 | 只看该作者
位运算

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

使用特权

评论回复
地板
skyred|  楼主 | 2022-6-13 21:49 | 只看该作者
跳转指令

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)


使用特权

评论回复
5
海滨消消| | 2022-6-14 09:11 | 只看该作者
哪些芯片用的比较多这些指令集

使用特权

评论回复
6
skyred|  楼主 | 2022-6-16 21:00 | 只看该作者
其实,感觉还是c用的多

使用特权

评论回复
7
isseed| | 2022-6-20 15:27 | 只看该作者
什么是RISC架构?

使用特权

评论回复
8
kmzuaz| | 2022-6-20 15:57 | 只看该作者
risc精简指令集为什么指令还这么多

使用特权

评论回复
9
linfelix| | 2022-6-20 16:29 | 只看该作者
riscv架构和arm的区别?

使用特权

评论回复
10
mattlincoln| | 2022-6-20 17:47 | 只看该作者
risc精简指令集为什么指令还这么多

使用特权

评论回复
11
typeof| | 2022-6-20 18:45 | 只看该作者
RISC-V架构能否有效挑战ARM和英特尔?

使用特权

评论回复
12
duo点| | 2022-6-21 09:25 | 只看该作者
riscv架构和arm有什么关系

使用特权

评论回复
13
ulystronglll| | 2022-7-5 17:45 | 只看该作者
这个例程在哪呢?

使用特权

评论回复
14
sanfuzi| | 2022-7-5 21:35 | 只看该作者
是RISC-V

使用特权

评论回复
15
yorkbarney| | 2022-7-5 22:22 | 只看该作者
编译器是用哪款?

使用特权

评论回复
16
earlmax| | 2022-7-8 10:06 | 只看该作者
搭建的环境在哪里?  

使用特权

评论回复
17
linfelix| | 2022-7-8 15:18 | 只看该作者
看着好复杂呢  

使用特权

评论回复
18
everyrobin| | 2022-7-8 16:00 | 只看该作者
这个汇编语言太多了。  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

740

帖子

3

粉丝