riscv指令集基础

riscv学习参考自如下的书,感谢几位优秀的老师和同学的工作,让我不用看英文。
RISC-V 手册(中文版)
翻译:勾凌睿、黄成、刘志刚
校阅:包云岗
还有感谢Patterson等人,创造出如此优秀的ISA

本书主要参考资料:

  • 参考卡
    RISC-V全部指令集的精简描述(P1)
  • 指令图
    每章的第一个图
    以同样的格式列出了所有RISC-V指令的全称
  • 操作码映射
    这些表格在一页展示了指令布局,操作码,格式类型和每页指令扩展的指令助记符
  • 指令术语表
    附录A
    对每个RISC-V指令和伪指令的详细描述,加起来还不到50页。
  • 索引
    通过指令全称或助记符找到描述指令说明、定义、或图标的页面。

risc-v有六种基本指令格式

  1. R-type
    寄存机-寄存器操作
  2. I-type
    短立即数和访存load操作
  3. S-type
    访存store操作
  4. B-type
    条件跳转操作
  5. U-type
    长立即数操作
  6. J-type
    无条件跳转
    risc-v指令格式

RISC-V更简洁的ISA设计能够提高性能功耗比

  • 指令只有6种格式,并且所有指令都是32位长,简化了指令解码(这一点在做PA工程中尤其能感受到)
  • RISC-V提供三个寄存器操作数
    • x86-32中,让源操作数和目的操作数共享一个字段,当一个操作天然就需要三个不同的操作数,而ISA只提供了两个操作数的时候,编译器或汇编程序员就需要多使用一条move指令,来保存寄存器的值。
  • 在risc-v中对于所有指令,要读写的寄存器的标识符总是在同一位置,意味着在解码指令之前,就可以先开始访问寄存器
  • 这些格式的立即数字段总是符号扩展,符号位总是在指令中最高位

第二章 RV32I:risc-v基础整数指令集

在这里插入图片描述

  • 所有位全部是0是非法的RV32I指令
    • 因此,试图跳转到被清零的内存区域的错误跳转会立即触发异常。
  • 所有为全部是1的指令也是非法指令
    • 它将捕获其他常见的错误

RV32I 寄存器

  • RV32I 有31寄存器加上一个值恒为0的x0寄存器,还有一个PC
    • 与之相比,ARM-32有16个寄存器,x86-32有8个寄存器
  • 程序计数器(PC)是ARM-32的16个寄存器之一,这意味着任何改变寄存器的指令都有可能导致分支跳转。
    • PC作为一个寄存器使硬件分支预测变得复杂
      在这里插入图片描述
      在这里插入图片描述

RV32I 整数计算

RV32I 包含以下:

  • 算数指令: add,sub
  • 逻辑指令: and,or,xor
  • 移位指令: sll,srl,sra
    • 它们从寄存器读取两个32位的值,并将32位结果写到目标寄存器
    • RV32I还提供了这些指令的立即数版本,立即数总是进行符号扩展(与ARM-32不同),这样子如果需要,我们可以用立即数表示负数。因此,不需要一个立即数版本的sub
  • 当小于时置位:slt,sltu
  • 加载立即数到高位:lui
    • 将20位常量加载到寄存器的高20位
  • 向PC高位加上立即数(auipc)
  • Load和Store:
    • 32位字的加载和存储:lw,sw
    • 有符号和无符号字节和半字:lb,lbu,lh,lhu
    • 存储字节和半字:sb,sh
      • 字节和半字扩展为32位在写入目的寄存器
  • 条件分支:
    • 相等:beq,不相等:bne
    • 大于等于:bge,小于:blt。 (有符号比较)
    • bdeu,bltu(无符号比较)
  • 无条件跳转:
    • 跳转并链接指令:jal,jalr(寄存器版本)
    • 杂项:
      • 控制状态寄存器指令:csrrc、csrrs、csrrw、csrrci、csrrsi、csrrwi
        访问一些程序性能计数器(64位)
      • ecal指令 用于向运行时环境发出请求
        如系统调用
      • 调试器使用ebreak指令 将控制转移到调试环境
      • fence指令对外部可见的访存请求

特点

  • RISC-V 中没有字节或半字宽度的整数计算操作,操作始终以完整的寄存器宽度(32位)。
    • 注意:内存访问时,字节或半字宽度会节省大量能量(比如能耗、速度),但低宽度的计算不会,意义不大。
  • RV32I 不包含乘法和除法,它们包含在可选的RV32M扩展中(第4章)
  • NOTE:RISC-V 选择了小端字节序,因为它在商业上占主导地位。
  • 获取PC:
    • 当前PC可以通过quipc的U立即数字段设置为0来获得
      特性
      在这里插入图片描述
  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值