Loading...
墨滴

moo

2021/05/24  阅读:27  主题:全栈蓝

初识RV32I ISA(2)

RV32I的寄存器

RV32I有31寄存器加上一个值恒为0的x0寄存器(对其操作,可理解为51的NOP指令),ra寄存器作为函数调用的返回地址,四个指针寄存器分别是保存堆栈指针的sp,存放全区指针的gp,存放线程指针的tp和存放帧指针的fp。还有一部分作为临时寄存器、保存寄存器、函数参数寄存器和返回值寄存器等功能。在risc-v中pc寄存器是专用寄存器,只有分支指令能够对其进行修改。可查看RV32I寄存器表中的具体指代信息。

RV32I的整数计算

RV32I的整数计算指令包括有简单的算术指令(add, sub)、逻辑指令(and, or, xor),以及移位指令 (sll, srl, sra)。lui是加载立即数高20bit数据到寄存器,低12位清0。auipc 是将立即数的高20bit和pc相加的结果放入寄存器。slt指令的作用是比较操作数进行置位,如果第一个操作数小于第二个操作数,它将目标寄存器设置为 1,否则为0。

RV32I的Load和Store

将内存数据载入到寄存器中的lb lh lw,将寄存器数据保存到内存空间的sb sh sw,以及 将内存内容载入到寄存器并进行无符号扩展操作的lbu lhu指令。

RV32I的条件分支

包括相等条件跳转指令beq、不等条件跳转指令bne、大于或者等于条件跳转指令bge/bgeu、小于条件跳转指令blt/bltu、无条件跳转并将返回的指令地址放到ra或者寄存器中的指令jal/jalr。

其他指令

fence 内存访问屏障 fence.i 指令访问屏障 ecall 指令用于向运行时环境发出请求,例如系统调用。调试器 使用 ebreak 指令将控制转移到调试环境。 csrrc/csrrci 读状态寄存器并清位 csrrs/csrrsi 读状态寄存器并置位 csrrw/csrrwi 读状态寄存器并写入值。

moo

2021/05/24  阅读:27  主题:全栈蓝

作者介绍

moo