【问题标题】:How does a processor calculate bigger than its register value?处理器如何计算大于其寄存器值?
【发布时间】:2013-06-16 20:34:05
【问题描述】:

到目前为止,我了解到处理器具有寄存器,用于 32 位处理器 它们是 32 位,对于 64 位,它们是 64 位。所以有人可以解释 如果我给处理器一个比它的寄存器更大的值会发生什么 尺寸?计算是如何进行的?

【问题讨论】:

  • 你能给出更大的价值吗?
  • 例如 32 位处理器如何计算 55340232221128654845 x 5。

标签: cpu-registers


【解决方案1】:

视情况而定。

为了讨论,假设 x86,64 位整数仍然可以在 32 位架构上“本地”处理。在这种情况下,程序通常使用一对 32 位寄存器来保存 64 位值。例如,值0xDEADBEEF2B84F00D 可能存储在EDX:EAX 寄存器对中:

eax = 0x2B84F00D
edx = 0xDEADBEEF

在某些情况下(例如IDIV),CPU 实际上预计 64 位数字采用这种格式。

数学运算是在多条指令中完成的。例如,在 32 位 x86 CPU 上的 64 位加法是使用低位 DWORD 的 add 和高位 DWORD 的 adc 完成的,这会考虑第一次加法的进位标志。


对于更大的整数,使用arbitrary-precision arithmetic(或“big int”)库。在这里,动态大小的字节数组用于表示整数,以及附加信息(如使用的位数)。 GMP 是一个受欢迎的选择。

对大整数的数学运算是迭代完成的,可能一次使用原生字长值。对于血淋淋的细节,我建议您查看这些开源库之一的源代码。


所有这一切的关键在于,数字运算是在可管理的部分中执行的,并结合起来产生最终结果。

【讨论】:

  • 非常感谢你!这就是我一直在寻找的。​​span>
  • 我可以继续说下去,但我认为您应该查看 GMP 源代码,和/或编译一些执行 64 位算术的代码,用于 32 位架构,然后查看结果大会。
  • @Jonathon Reinhart thanxxx 为您提供有用的答案。这是我的投票!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2019-02-16
  • 2021-03-03
  • 1970-01-01
相关资源
最近更新 更多