查看: 2182|回复: 0
收起左侧

RISCV32的指令集合的简单分类

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-3-3 12:32
  • 签到天数: 10 天

    [LV.3]

    发表于 2020-8-24 10:34:25 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 皋陶 于 2020-8-26 18:46 编辑

    这里我们只说RISCV32I指令集,这里按照我的理解给RISCV32I的指令做一个简单的分类:


    国内芯片技术交流-RISCV32的指令集合的简单分类risc-v单片机中文社区(1)


    首先是可以由编译器生成的指令和编译器通常不会生成的指令(这里排除了C语言里面内联汇编的情况)。


    编译器不会生成的指令如下几条:


    FENCE,FENCE.I,ECALL,EBREAK,CSRRW,CSRRS,CSRRC,CSRRWI,CSRRSI.CSRRCI,以及AUIPC。


    其中FENCE和FENCE.I跟存储相关。


    ECALL,EBREAK是跟系统有关。


    CSR*** 这些跟状态和控制器有关。


    这里AUIPC的意思是讲当前PC加上一个偏移量后保存到指定的寄存器里,这条指令不产生转跳。


    剩下的就是C语言编译器可以产生的指令。


    这些C语言可以产生的指令系统我们再继续分类。


    根据我的理解分成以下四类:


    1,R op R => R 从寄存器组里取两个数进行运行最后存入寄存器组。


    2,R op IMM => R 从寄存器取一个数,与立即数IMM 进行操作后存入寄存器组。


    3.   影响PC的指令,包含条件转移和无条件转移。如果指令顺序执行,下一条指令的指令地址是PC+4,而运行了这些影响PC的指令,就可能打破这个执行顺序(无条件转跳指令肯定影响PC)。因为无条件转移指令太少了只有两条(jal和jalr)所以不单独分类出来。


    4,读写存储器的指令。这里就有保存字(32位: word),半字(16位:half word ),字节(8位:byte)指令。以及加载字,半字,字节指令。其中我们可以将半字和字节当做有符号数以及无符号数据,加载半字就有了lh 和lhu的区别,以及字节就有了lb和lbu的区别。另外在riscv64里面还有double word,两个word,每个字是32BIT,自然就是64位了。在64位指令系统还有了lw和lwu的区别。


    官方将RV32I划分层了5种类型,这个分类是根据指令的机构进行分类的。


    国内芯片技术交流-RISCV32的指令集合的简单分类risc-v单片机中文社区(2)


    参考

    1,riscv-spec-v2.2  from www.riscv.org

    2,RISC-V-Reader-Chinese-v2p1 from QQ group :29304866

    本篇完,感谢关注:RISC-V单片机中文网




    上一篇:RISC-V 指令格式
    下一篇:【Rust日报】2019-12-12 用 Rust 实现一个 RISC-V OS 系列博客更新
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-3-29 20:09 , Processed in 0.347300 second(s), 48 queries .

    快速回复 返回顶部 返回列表