首页 > 解决方案 > 给定PC=0x32011C,一个值位于0x32010C,那么偏移量是多少?

问题描述

我想知道地址偏移量是否可能是负数。例如,我的问题的答案是否为负 16 个字节?

标签: assemblymemory-addressriscv

解决方案


最好在特定指令中谈论偏移量,例如条件分支或调用指令。

在 RISC V 中,许多指令具有 12 位偏移量,并且这些指令都被扩展为 32 位或 64 位(分别用于 RV32 或 RV64)。(有些指令有 20 位的偏移量,其中一些的工作方式略有不同。)

执行 pc 相对寻址的指令的 PC 是基值,它被添加到偏移量——这意味着偏移量 0 表示当前正在执行的指令,+4 表示随后的 32 位指令,-4 表示前面的 32位指令(按地址在内存中,不一定按执行顺序)。

为了支持紧凑格式指令(16 位)和扩展指令大小(48 位和更大),执行 pc 相对寻址的指令的偏移量提供偶数字节偏移值 - 因为值总是偶数,低位始终为零,因此未在偏移量中编码。因此,在此类指令中编码的偏移量在被硬件使用之前会在低端(作为 LSB)填充一个零位。


推荐阅读