一起学RISC-V汇编第6讲之伪指令列表

一起学RISC-V汇编第6讲之伪指令

伪指令是方便程序员使用,相当于为实际指令取的别名,编程时可以直接使用伪指令。

上一章已经列出了RISC-V中的伪指令,只是比较分散,这一章以另一个视角重新整理一下伪指令,表格来源于《RISC-V 开放架构设计之道 1.0.0》

1 RISC-V伪指令列表

伪指令一共60条,分为依赖零寄存器x0的32条伪指令以及与零寄存器x0 无关的28条伪指令。

1.1 依赖零寄存器x0的32条伪指令

伪指令 基础指令 指令集 含义
nop addi x0, x0, 0 RV32I/RV64I 空操作
neg rd, rs sub rd, x0, rs RV32I/RV64I 取负
negw rd, rs subw rd, x0, rs 仅RV64I 取负字
snez rd, rs sltu rd, x0, rs RV32I/RV64I 不等于0时置位
sltz rd, rs slt rd, rs, x0 RV32I/RV64I 小于0时置位
sgtz rd, rs slt rd, x0, rs RV32I/RV64I 大于0时置位
beqz rs, offset beq rs, x0, offset RV32I/RV64I 等于0时分支
bnez rs, offset bne rs, x0, offset RV32I/RV64I 不等于0时分支
blez rs, offset bge x0, rs, offset RV32I/RV64I 小于等于0时分支
bgez rs, offset bge rs, x0, offset RV32I/RV64I 大于等于0时分支
bltz rs, offset blt rs, x0, offset RV32I/RV64I 小于0时分支
bgtz rs, offset blt x0, rs, offset RV32I/RV64I 大于0时分支
j offset jal x0, offet RV32I/RV64I 跳转
jr rs jalr x0, rs, 0 RV32I/RV64I 寄存器跳转
ret jalr x0, x1, 0 RV32I/RV64I 从子过程中返回(子函数返回)
tail offset auipc x6, offset[32:12]
jalr x0, x6, offset[11:0]
RV32I/RV64I 尾调用远距离子过程
rdinstret[h] rd csrrs rd, instret[h], x0 读已提交指令计数器
rdcycle[h] rd csrrs rd, cycle[h], x0 读周期计数器
rdtimeh[h] rd csrrs rd, time[h], x0 读实时时钟
csrr rd, csr csrrs rd, csr, x0 RV32I/RV64I CSR 读
csrw csr, rs csrrw x0, csr, rs RV32I/RV64I CSR 写
csrs csr, rs csrrs x0, csr, rs RV32I/RV64I CSR置位
csrc csr, rs csrrc x0, csr, rs RV32I/RV64I CSR清位
csrwi csr, imm csrrwi x0, csr, imm RV32I/RV64I CSR写立即数
csrsi csr, imm csrrsi x0, csr, imm RV32I/RV64I CSR置位立即数
csrci csr, imm csrrci x0, csr, imm RV32I/RV64I CSR清位立即数
frcsr rd csrrs rd, fcsr, x0 RV32F/RV64F 读浮点csr寄存器
fscsr rs csrrw x0, fcsr, rs RV32F/RV64F 写浮点csr寄存器
frrm rd csrrs rd, frm, x0 RV32F/RV64F 读浮点写入模式
fsrm rs csrrw x0, frm, rs RV32F/RV64F 写浮点写入模式
frflags rd csrrs rd, fflags, x0 RV32F/RV64F 读浮点异常标志
fslags rs csrrw x0, fflags, rs RV32F/RV64F 写浮点异常标志

1.2 与零寄存器x0 无关的28条伪指令

伪指令 基础指令 指令集 含义
lla rd, symbol auipc rd, symbol[31:12]
add rd, rd, symbol[11:0]
RV32I/RV64I 装入局部地址
la rd, symbol PIC:
auipc rd, GOT[symbol][31:12]
l {w|d} rd, GOT[symbol][11:0](rd)
非PIC:
与 lla rd, symbol 相同
RV32I/RV64I 装入地址
l{b|h|w|d} rd, symbol auipc rd, symbol[31:12]
l{b|h|w|d} rd, symbol[11:0](rd)
读全局符号
s{b|h|w|d} rd, symbol, rt auipc rt, symbol[31:12]
s{b|h|w|d} rd, symbol[11:0](rt)
写全局符号
fl{w|d} rd, symbol, rt auipc rt, symbol[31:12]
fl{w|d} rd,symbol[11:0](rt)
读全局浮点符号
fs{w|d} rd, symbol, rt auipc rt, symbol[31:12]
fs{w|d} rd,symbol[11:0](rt)
写全局浮点符号
li rd, imm 多种指令组合 RV32I/RV64I 装入立即数
mv rd, rs addi rd, rs, 0 RV32I/RV64I 复制寄存器
not rd, rs xori rd, rs, -1 RV32I/RV64I 取反
sext.w rd, rs addiw rd, rs, 0 仅RV64I 符号字扩展
seqz rd, rs sltiu rd, rs, 1 RV32I/RV64I 等于0时置位
fmv.s rd, rs fsgnj.s rd, rs, rs RV32F/RV64F RV32F/RV64F复制单精度寄存器
fabs.s rd, rs fsgnjx.s rd, rs, rs RV32F/RV64F 单进度浮点绝对值
fneg.s rd, rs fsgnjn.s rd, rs, rs RV32F/RV64F 单精度浮点相反数
fmv.d rd, rs fsgnj.d rd, rs, rs RV32D/RV64D 复制双精度寄存器
fabs.d rd, rs fsgnjx.d rd, rs, rs RV32D/RV64D 单精度浮点相反数
fneg.d rd, rs fsgnjn.d rd, rs, rs RV32D/RV64D 双精度浮点相反数
bgt rs, rt, offset blt rt, rs, offset RV32I/RV64I 大于时分支
ble rs, rt, offset bge rt, rs, offset RV32I/RV64I 小于等于时分支
bgtu rs, rt, offset bltu rt, rs, offset RV32I/RV64I 无符号大于时分支
bleu rs, rt, offset bgeu rt, rs, offset RV32I/RV64I 无符号小于等于时分支
jal offset jal x1, offset RV32I/RV64I 跳转并链接
jalr rs jalr x1, rs, 0 RV32I/RV64I 寄存器跳转并链接
call offset auipc x1, offset[31:12]
jalr x1, offset[11:0](x1)
RV32I/RV64I 调用远距离过程
fence fence iorw, iorw RV32I/RV64I 内存和I/O屏障
fscsr rd, rs csrrw rd, fcrs, rs RV32F/RV64F 交换浮点csr寄存器
fsrm rd, rs csrrw rd, frm, rs RV32F/RV64F 交换浮点舍入模式
fsflags rd, rs csrrw rd, fflags, rs RV32F/RV64F 交换浮点异常标志

参考:

  1. riscv gcc中添加custom自定义指令
  2. https://sourceware.org/binutils/docs/as/RISC_002dV_002dFormats.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794031.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【题解】CPS-S模拟2

目录PreT1.不相邻集合题目描述部分分40pts10pts正解思路代码T2.线段树题目描述部分分20pts正解思路代码T3.部分分40pts正解思路代码T4.部分分10pts正解思路代码And Pre赛时没有第一时间找到签到题,遂四处游走,后来决定先打T1,约1h时切了,然后1h打后3题暴力,后面推了推T4一…

SpringBoot集成knife4j接口文档

0. 导入maven依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId> </dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lom…

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED

Cisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 EDCisco Catalyst 9000 Series Switches, IOS XE Release 17.15.1 ED 思科 Catalyst 9000 交换产品系列 IOS XE 系统软件 请访问原文链接:https://sysin.org/blog/cisco-catalyst-9000/,查看最新版。原创作品,…

dbeaver导出表结构和数据,无需二次操作

1. 对某个数据库右键(示例demo)→工具→转储数据库 2.接着按下面进行操作:3.创建跟上面同名字的数据库: 右键数据库名字-》工具-》执行脚本 导入数据,执行sql文件时报错unknown command \\. 在额外的命令参数中添加下面命令即可: --default-character-set=utf8

Day01 MarkDown语法学习

MarkDown语法学习 标题 #+空格 一级标题 ##+空格 二级标题字体 粗体 **粗体** 斜体 *斜体* 斜体加粗 ***斜体加粗*** 删除线 ~~删除~~ 引用引用 > 引用分割线---或者***图片![截图2](https://cdn.luogu.com.cn/upload/usericon/1.png) 超链接 我的博客 [我的博客](https://w…

Graph Edge Partitioning via Neighborhood Heuristic

目录概符号说明Vertex vs Edge partitioningNE (Neighbor Expansion)代码Zhang C., Wei F., Liu Q., Tang Z. G. and Li Z. Graph edge partitioning via neighborhood heuristic. KDD, 2017.概 本文提出了一种图分割方法 (edge partitioning), 保证只有少量的重复结点. 符号说…

P11020 「LAOI-6」Radiation 题解

一道简单的构造题,其实不用想的十分复杂的说。 首先,最多发射的宇宙射线 \(sum\) 也最多为 \(sum_{max}=min(m,n)\) 也就是说,无论如何摆放石子,也只能达到这个数量。那么我们的目的便变成了如何让石子变成这一个形状。如上图,在一个 \(3\times6\) 的矩阵中,其实只要三颗…

适合科研的团队协作工具:8款实用评测

本文介绍的8款工具如下:1.Worktile;2.PingCode;3.蓝湖;4.智方科研管理系统;5.九云办公;6.和鲸ModelWhale;7.有道云协作;8.Maxhub。在科研项目中,团队协作软件的选择总是让人头疼。市面上有太多工具,不知道哪款更适合自己?每个软件都宣传自己效率高、功能全,但真正好…

精选10款团队协作工具,让合作更高效

本文将介绍10款团队协作工具:1.Worktile;2.PingCode;3.哨子办公;4.智办事;5.曲奇云盘;6.小钉贴;7.协同易;8.BoardMix;9.CORNERSTONE;10.ORGOS。团队合作中总是有很多信息来回传递,却没有一个统一的平台来管理任务和沟通,这不仅让工作效率大打折扣,还可能让团队成员…

1-2Java基本数据类型

Java基本数据类型 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。 Java 的两大数据…

知识库软件对比:10款适合团队的工具揭秘

本文将介绍10款知识库软件:1.PingCode; 2. Worktile; 3. 亿方云; 4. 掘金文档; 5. 问道文档; 6. 海豚智库; 7. 麦客; 8. Helpjuice; 9. Confluence; 10. FlowUs。如今,团队协作越来越依赖于高效的工具,而一个简单、易用的知识库软件能极大提升工作效率。面对市场上…

南方科技大学院士分析

网页信息获取分析报告 1.Python获取页面信息 这里需要爬取的是南方科技大学研究生院-师资概况页面,使用的是requests和BeautifulSoup方法 以下是要爬取的页面import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt import seab…