内存范围计算
Memory range calculation
我有一个关于计算内存地址的问题:
我得到了 3 个内存块:
- 1x 1KByte (IC1) - 2^10 Byte
- 2x 4KByte (IC2 + IC3) 2^12 Byte
到目前为止我计算了这些内存地址:
IC1:
0000 0000 0000 0000 (Starting adress)
0000 0011 1111 1111 (Ending adress, I got this from inverting the last 10 digits)
IC2:
0000 0100 0000 0000 (Starting adress)- Last ending adress +1
0000 1011 1111 1111 (Ending adress, I got this from inverting the last 12 digits)
然而,在 IC3 必须有某种方法可以将进位位放入我的第一个 0000 块中,因为我 运行 在 space 中只使用最后 3 个十六进制的 3位数:
IC2:
0000 1100 0000 0000 (Starting adress)- Last ending adress +1
现在结束地址是什么?如果我再次反转最后 12 位数字,我将得到一个已被使用的十六进制地址。很明显,下一个十六进制数字必须增加到 1,但我找不到执行此操作的规则。
有什么建议吗?
我不确定你为什么为此使用位翻转,如果它有效的话,它看起来应该是一个非常有效的实现,但它似乎没有:
你的 IC2 块起始地址(十六进制)是 400(从内存开始算起 1K,到目前为止一切正常),但是十六进制的结束地址是 BFF,而它应该是 13FF (1k+4k = 5k) 在二进制中是 0001 0011 1111 1111
为什么你不能使用加法而不是位翻转来计算这些地址?
我有一个关于计算内存地址的问题:
我得到了 3 个内存块:
- 1x 1KByte (IC1) - 2^10 Byte
- 2x 4KByte (IC2 + IC3) 2^12 Byte
到目前为止我计算了这些内存地址:
IC1:
0000 0000 0000 0000 (Starting adress)
0000 0011 1111 1111 (Ending adress, I got this from inverting the last 10 digits)
IC2:
0000 0100 0000 0000 (Starting adress)- Last ending adress +1
0000 1011 1111 1111 (Ending adress, I got this from inverting the last 12 digits)
然而,在 IC3 必须有某种方法可以将进位位放入我的第一个 0000 块中,因为我 运行 在 space 中只使用最后 3 个十六进制的 3位数:
IC2:
0000 1100 0000 0000 (Starting adress)- Last ending adress +1
现在结束地址是什么?如果我再次反转最后 12 位数字,我将得到一个已被使用的十六进制地址。很明显,下一个十六进制数字必须增加到 1,但我找不到执行此操作的规则。
有什么建议吗?
我不确定你为什么为此使用位翻转,如果它有效的话,它看起来应该是一个非常有效的实现,但它似乎没有:
你的 IC2 块起始地址(十六进制)是 400(从内存开始算起 1K,到目前为止一切正常),但是十六进制的结束地址是 BFF,而它应该是 13FF (1k+4k = 5k) 在二进制中是 0001 0011 1111 1111
为什么你不能使用加法而不是位翻转来计算这些地址?