首页 > 编程语言 >一起学RISC-V汇编第6讲之伪指令列表

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

时间:2024-09-08 15:13:51浏览次数:9  
标签:汇编 rs 伪指令 RISC RV64I RV32I rd offset x0

一起学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

标签:汇编,rs,伪指令,RISC,RV64I,RV32I,rd,offset,x0
From: https://www.cnblogs.com/sureZ-learning/p/18402878

相关文章

  • 一起学RISC-V汇编第5讲之常用指令及伪指令列表
    一起学RISC-V汇编第5讲之常用指令及伪指令列表这一篇介绍一下RISC-V常用的汇编指令,整理成表,便于查阅。1RISC-V指令命名以slt指令为例,如下示意图:大括号{}内列举了每组指令的所有变体,这些变体通过带下滑线的字母(单独的下划线_表示空字段),从左到右连接带下滑线的字母即可组成完整......
  • 澎峰科技受邀参加全球AI芯片峰会,探讨大模型推理引擎PerfXLM面向RISC-V的移植和优化
    2024全球AI芯片峰会,9月6-7日北京开启!9月6-7日,2024全球AI芯片峰会(GACS2024)将在北京辽宁大厦盛大举办。全球AI芯片峰会至今已成功举办六届,现已成为国内规模最大、规格最高、影响力最强的产业峰会之一。本届峰会由芯东西与智猩猩共同主办,以「智算纪元共筑芯路」为主题。峰会采......
  • 编译原理项目——C++实现C语言编译器输出为gcc级汇编(代码/报告材料)
    完整的代码材料见文章末尾以下为核心内容和部分结果项目介绍function.cpp实现了共有的函数lexer.cpp词法分析器get_predict_table.cpp获取预测分析表LR.cpp语法分析generate.cpp语义分析中间代码生成to_asm.cpp目标代码生成部分核心代码LR分析#include"co......
  • RISC芯片/红外NEC应用教程/实操/含可运行代码~
    红外NEC协议一、NEC简介    红外(Infrared,IR)遥控是一种无线、非接触控制技术,常用于遥控器、无线键盘、鼠标等设备之间的通信。IR协议的工作原理是,发送方通过红外线发送一个特定的编码,接收方通过识别该编码来执行相应的操作。    IR协议是指红外线通信协议......
  • 《ARM Cortex-R 学习指南》-【第四章】-汇编语言简介
    第4章汇编语言简介汇编语言是一种低级编程语言。通常情况下,汇编语言指令(助记符)和处理器执行的实际二进制操作码之间存在一对一的对应关系。许多从事应用级开发的程序员很少需要编写汇编语言代码。然而,在某些情况下,掌握汇编代码的知识可能会非常有用,比如需要高度优化代码......
  • 信息学奥赛初赛天天练-82-NOIP2014普及组-完善程序-机器语言、汇编语言、高级语言、计
    1NOIP2014普及组基础题11以下哪个是面向对象的高级语言()A汇编语言BC++CFortranDBasic2TB代表的字节数是()A2的10次方B2的20次方C2的30次方D2的40次方3二进制数00100100和00010101的和是()A00101000B001010......
  • Go plan9 汇编:手写汇编
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言在Goplan9汇编:打通应用到底层的任督二脉一文中介绍了从应用程序到汇编指令的转换。本文将结合汇编和Go程序实现手写基本的汇编指令,以加深对Goplan9汇编的了解。1.手写汇编1.1全局变量首先写一个打印整型变量的函数......
  • GNU 汇编语法基础
     目录一、引言二、GNU汇编基本结构1.指令格式2.注释3.段三、寄存器和寻址方式1.寄存器命名2.寻址方式四、指令集 1.数据传送指令2.算术运算指令 3.逻辑运算指令4.控制流指令 五、宏和函数 1.宏定义 2. 函数定义六、总结 一、引言     ......
  • Go plan9 汇编: 打通应用到底层的任督二脉
    原创文章,欢迎转载,转载请注明出处,谢谢。0.前言作为一个严肃的Gopher,了解汇编是必须的。本汇编系列文章会围绕基本的Go程序介绍汇编的基础知识。1.Go程序到汇编首先看一个简单到令人发指的示例:packagemainfuncmain(){ a:=1 print(a)}运行程序,输出:#gorun......
  • RSIC-V常用汇编语言及常用数据结构-栈
    这是我在上完浙大刘鹏老师的视频课后做的笔记。我觉得在学完后,自己写出来会记忆会更深刻,因为要重新梳理一遍。同时遇到不会的还可以重新复习以前的知识。程序执行流程:高级语言->汇编语言->逻辑块->数字电路常用汇编语言:1.算数指令和访存指令在汇编语言里面,操作对象是寄存......