我有一个31位宽的寄存器,现在我在两个可以用作最后地址31位方案的数字之间感到困惑。
0x7fff-fffc或0x80000000是否可以在31方案中使用的最后一个地址。
答案 0 :(得分:2)
地址从零开始。所以0x7FFFFFFF
如果要处理字节。如果要处理32位字,请0x7FFFFFFC
。
答案 1 :(得分:1)
将0x7fff-fffc或0x80000000作为31方案中可以使用的最后一个地址。
它们都不是 - 最后一个地址是0x7fffffff
(不是c
)。对于0x80000000
,您已经需要设置第32位。
正如@mbratch指出的那样,0x7ffffffc
将是最后一个地址,如果你正在寻址32位字,或者类似0x7ffffffe
,如果你正在寻址16位字。
答案 2 :(得分:1)
假设一个地址仅用于引用4个内存(如字节),则7ffffffc是最后一个。
通常我们以8位字节寻址存储器,但没有固有的需要这样做。任何数量的字节都可以进入可寻址的东西。
然后,我们开发了一个约定,我们为每个字节分配地址,但只加载内存为2或4(或任何数量)的块,因此我们构建硬件以忽略最后的1或2或任何少数地址线
值80000000不适合31位。
值7fffffff确实适合31个字节,如果你可以寻址单个字节的内存,可以使用它。
值7ffffffc也适合31个字节,如果你一次只能处理4个字节的对齐块中的字节,就会使用它。