问题描述
我正在阅读David Patterson和John Hennesy所著的《计算机组织与设计》一书。在本书所涉及的RISC-V体系结构集中,有两种与跳转相关的指令格式-SB型和UJ型。前者使用12
位常量表示从当前指令跳转的偏移量(以字节为单位),而后者使用20
位常量表示相同的指令。然后作者说了以下话:
由于程序计数器(PC)包含当前指令的地址,因此我们可以在当前指令的
+=2^10
字内跳转( SB 类型),或跳转( UJ ),如果我们使用+= 2^18
作为要添加到该地址的寄存器,则在当前指令的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
之外吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)