Binary 在PC相对寻址模式下要跳转的最大字数

Binary 在PC相对寻址模式下要跳转的最大字数,binary,cpu-architecture,riscv,machine-code,instruction-set,Binary,Cpu Architecture,Riscv,Machine Code,Instruction Set,我正在读大卫·帕特森和约翰·亨尼西的一本书,书名是《计算机组织与设计》。在本书介绍的RISC-V体系结构中,有两种与跳跃相关的指令格式—SB类型和UJ类型。前者使用12-位常量表示从当前指令跳转的偏移量(字节),后者使用20-位常量表示相同的偏移量。然后作者说: 由于程序计数器(PC)包含当前指令的地址,我们可以在当前指令的+=2^10字内分支(SB-type),或在当前指令的+=2^18字内跳转(UJ),如果我们使用PC作为要添加到地址的寄存器 我不明白他们是怎么得到那些2^10和2^18的。

我正在读大卫·帕特森和约翰·亨尼西的一本书,书名是《计算机组织与设计》。在本书介绍的RISC-V体系结构中,有两种与跳跃相关的指令格式—SB类型和UJ类型。前者使用
12
-位常量表示从当前指令跳转的偏移量(字节),后者使用
20
-位常量表示相同的偏移量。然后作者说:

由于程序计数器(PC)包含当前指令的地址,我们可以在当前指令的
+=2^10
字内分支(SB-type),或在当前指令的
+=2^18
字内跳转(UJ),如果我们使用
PC
作为要添加到地址的寄存器

我不明白他们是怎么得到那些
2^10
2^18
的。由于指令使用的常数是二的补码,因此在第一种情况下,它可以表示从
-2^11
2^11-1
的值,在第二种情况下,它可以表示从
-2^19
2^19-1
的值。由于这些常数表示字节,但我们想知道可以跳过多少个单词,因此我们需要将字节的最大值除以四,因此我们可以得到的最大值是第一种情况下的
2^11/2^2=2^9
单词,第二种情况下的
2^17

有人能看一下我上面的计算,指出我遗漏了什么,我的计算和想法有什么问题吗

更新
可能我没有正确理解作者。可能是指下限(
-2^10
)和上限(
+2^10
)?因此,它们意味着我们永远不能从当前指令跳转到
2^10
之外?

RISC-V使用2字节的包进行指令编码,因此跳转有效地使用包粒度寻址(关于立即移位的范围),而不是字节或字寻址。谢谢,我想我最终得到了它,我只是没有看他们是如何编写指令的。我很惊讶为什么作者在展示这些边界值之前没有解释它。