I have a register which 31 bit wide ,Now I am confused between two number that could be used as last address 31 bit scheme .
Would 0x7fff-fffc or 0x80000000 be the last address can be used in 31 scheme.
I have a register which 31 bit wide ,Now I am confused between two number that could be used as last address 31 bit scheme .
Would 0x7fff-fffc or 0x80000000 be the last address can be used in 31 scheme.
地址从零开始。因此0x7FFFFFFF
,如果您要寻址字节。0x7FFFFFFC
如果您正在处理 32 位字。
0x7fff-fffc 或 0x80000000 会是最后一个地址吗?可以在 31 方案中使用。
它们都不是 - 最后一个地址是 0x7fffffff
(不是c
)。因为0x80000000
您已经需要设置第 32 位。
正如@mbratch 指出的那样,0x7ffffffc
如果您要寻址 32 位字,则将是最后一个地址,或者类似地,0x7ffffffe
如果您要寻址 16 位字。
假设一个地址仅用于引用 4 块内存(如字节),则 7ffffffc 是最后一个。
通常我们以 8 位字节寻址内存,但没有必要这样做。任何数量的字节都可以进入可寻址的事物。
然后,我们制定了一个约定,我们为每个字节分配地址,但只加载 2 或 4(或任何数量)的块中的内存,因此我们构建硬件以忽略最后的 1 或 2 或任何少数地址行。
值 80000000 不适合 31 位。
值 7fffffff 确实适合 31 个字节,如果您可以寻址单个字节的内存,则可以使用该值。
值 7ffffffc 也适合 31 个字节,如果您一次只能寻址 4 个字节的对齐块中的字节,则将使用该值。