给定PC=0x32011C,一个值位于0x32010C,那么偏移量是多少?

Given PC=0x32011C, a value is located in 0x32010C, then what's the offset?

我想知道地址偏移量是否可以为负数。 比如我这个问题的答案是不是负16字节?

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

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

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

为了支持紧凑格式指令(16 位)和扩展指令大小(48 位及更大),执行 pc-relative 寻址的指令的偏移量甚至 byte-offset值——因为值总是偶数,低位总是零,因此它不在偏移量中编码。因此,在此类指令中编码的偏移量在被硬件使用之前在低端(作为 LSB)用一个零位填充。