主要观点:RISC 架构将改变一切,近年来 RISC-V CPU 设计在 FPGA 和 ASIC 上迅速发展,该系列将帮助学习 32 位 RISC-V 指令和编程,涵盖了加载立即数、加法、减法、符号扩展、伪指令等内容,还介绍了不同的 RISC-V 指令集(RV32、RV64、RV32E)和 CPU 寄存器等。
关键信息:
- RISC-V 有多种指令集,重点介绍 RV32,其整数指令集为 RV32I。
- RV32I 有 32 个通用寄存器,x0 硬连线为 0,常用 ABI 临时寄存器 t0-t6。
- 加载立即数用 li 指令,可将立即数加载到寄存器,前缀 0x 表示十六进制。
- 加法用 add 和 addi 指令,分别用于两个寄存器相加和寄存器与立即数相加。
- 减法用 sub 和 neg 指令,neg 是伪指令,用 sub 与 x0 寄存器实现。
- 符号扩展:RISC-V 立即数是符号扩展的,12 位立即数可表示 -2048 到 2047 。
- 加载高位立即数 lui 指令用于设置寄存器的高 20 位,可与 addi 配合加载 32 位立即数。
重要细节: - 伪指令是由汇编器转换为一个或多个真实指令的语法糖,如 mv 指令是 addi 指令的特殊形式,nop 指令用于推进程序计数器。
- addi 可用于实现增量和减量操作,范围是 -2048 到 2047 。
- lui 指令的立即数范围是 0x00000 到 0xFFFFF ,超出范围会报错。
- 处理较大立即数时需结合 lui 和 addi 指令,注意 sign extension 问题,如处理 0xFACE 时要进行修正。
后续内容:下一篇 RISC-V 汇编器系列文章将介绍逻辑指令,可查看RISC-V Assembler Cheat Sheet 。
致谢:感谢[jtruk]和[Daniel Mangum]的建议和纠正。
参考:RISC-V Technical Specifications
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。