16位处理器如何具有4字节大小的长整数?

时间:2012-11-15 18:32:45

标签: c assembly computer-architecture

enter image description here

我在16位CPU上遇到long int大小的问题。看看它的架构:

enter image description here

没有寄存器超过16位长。那么,long int怎么会超过16位。事实上,根据我的任何处理器,数据类型的最大大小必须是通用寄存器的大小。我是对的吗?

2 个答案:

答案 0 :(得分:10)

是。事实上,C和C ++标准要求sizeof(long int) >= 4。*

(在这种情况下,我假设CHAR_BIT == 8。)

这与32位机器上的64位整数相同。它的实现方式是使用两个寄存器来表示下半部分和上半部分。

加法和减法作为两个指令完成:

在x86上:

  • 添加:addadc其中adc是“随身携带”
  • 减法:subsbb其中sbb为“借用减法”

例如:

long long a = ...;
long long b = ...;

a += b;

将编译为类似:

add eax,ebx
adc edx,ecx

eaxedxa的下部和上部。 ebxecxb的下半部分和上半部分。

双字整数的乘法和除法更复杂,但它遵循相同的小学数学 - 但每个“数字”都是处理器词。

答案 1 :(得分:2)

没有。如果机器没有可以处理32位值的寄存器,则必须在软件中模拟它们。它可以使用任何库中用于任意精度算术的相同技术来完成此任务。