到目前为止,我了解到处理器有32位处理器的寄存器 它们是32位,64位是64位。有人可以解释一下 如果我给处理器一个比寄存器更大的值,会发生什么 尺寸?如何进行计算?
答案 0 :(得分:4)
取决于。
为了便于讨论,假设使用x86,仍然可以在32位体系结构上“本机”处理64位整数。在这种情况下,程序通常使用一对32位寄存器来保存64位值。例如,值0xDEADBEEF2B84F00D
可能存储在EDX:EAX
寄存器对中:
eax = 0x2B84F00D
edx = 0xDEADBEEF
在某些情况下(例如IDIV),CPU实际上期望以这种格式显示 64位数字。
数学运算在多个指令中完成。例如,32位x86 CPU上的64位加法使用较低DWORD的add
,然后使用上部DWORD的adc
,其中考虑了来自第一次加入。
对于更大的整数,使用arbitrary-precision arithmetic(或“大int”)库。这里,动态大小的字节数组用于表示整数,带有附加信息(如使用的位数)。 GMP是一个受欢迎的选择。
对大整数的数学运算是迭代完成的,可能一次是原生的字大小值。有关血淋淋的细节,我建议您查看其中一个开源库的源代码。
所有这一切的关键在于,数字操作以可管理的部分进行,并结合起来产生最终结果。