下图来自riscv spec,附带PC寄存器(程序计数器,用来存储指向下一条指令的地址),寄存器的长度XLEN与架构有关(对于rv32:XLEN=32,对于rv64:XLEN=64)。 对于这些通用寄存器,除了x0外(x0 寄存器的值读恒为0,写无效),其它寄存器都本质上是等价的。但在实际使用过程中,我们约定了这些寄存器的用法,即ABI规范,见下表,...
1.4 PC相对寻址 PC相对寻址表示地址为相对于PC的偏移,PC 相对寻址可用来支持位置无关代码,像RISC-V的分支跳转指令也都是相对寻址,如RISC-V的分支跳转指令: # if (rs1 < rs2) pc += sext(offset) blt rs1, rs2, offset 总结: 由上面分析可知,RISC-V支持4种寻址方式:立即数寻址、寄存器寻址、寄存器相对...
用于保存M模式指向hart上下文的指针,并在进入M模式的处理程序时,和用户寄存器交换。mepc 发生中断时,...
RV32I包含33个32位通用寄存器,x0是一个硬链接的特殊寄存器,读取时总时返回0。pc寄存器,也叫程序计数器,执行时会被自动更新为下一条将要执行的指令地址,也会被分支指令更新。 剩下的x1-x31寄存器是通用的,之间可以互换,然而,后面将要讲到,通常使用时遵循一定的标准很重要。例如通常用一组特定的寄存器用来函数调用...
gp寄存器在启动代码中加载为__global_pointer$的地址,并且之后不能被改变。 linker时使用__global_pointer l爱学习 2023-09-11 16:57:36 【转载】第1章 初识RISC-V 位。如果支持浮点指令,则需额外支持32个浮点(Float Point)寄存器不同于ARM,RISC-V中PC指针不占用通过寄存器,而是独立的,程序执行中自动变化,...
RISCV的寄存器类型: ABI:application binary interface二进制接口 32个通用寄存器,x0硬接到0,一直为0,读x0为0,写x0没有效果; 其他寄存器可读可写 PC寄存器:program counter,保存当前指令的地址 后面是操作码(表示进行什么运算,加减乘除等等),前面是地址码(表示运算数据在哪) ...
绝大多数整数计算指令对保存在整数寄存器中的XLEN位进行操作(RV32I里对应的整数寄存器为32位)。整数计算指令要么使用I-type指令为寄存器-立即数操作,要么使用R-type指令为寄存器-寄存器操作。 I-type对应的opcode被命名为OP-IMM, I-type对应的immediate,固定为12位,被命名为I-immediate,如图2所示。
RV32I通用寄存器如下:Caller:来访者,简单来说就是打电话的,即调用函数的函数,Callee:被访者,简单来说就是接电话的,即被调用函数 寄存器的宽度由ISA指定,如RV32的通用寄存器宽度为32位,RV64的通用寄存器宽度为64位。如果支持浮点指令,则需额外支持32个浮点(Float Point)寄存器不同于ARM,RISC-V中PC...
立即数寻址,操作数是指令本身的常量。寄存器寻址,操作数在寄存器中。基址或偏移寻址,操作数于内存中,其地址是寄存器和指令中的常量之和。PC相对寻址,分支地址是PC和指令中常量之和。注: 「加载和存储对字节、半字、字或双字的访问有不同的版本」。 3.2 寄存器的用途 ...