1

16 位机器可以对 64 位数据类型执行操作吗?

我知道它可以使用两个寄存器执行 32 位乘法,但不知道它如何处理 64 位数据?

4

2 回答 2

6

在寄存器/机器代码级别总是有一个进位标志,指示何时发生算术进位(或借位)。这可用于对任意数量的机器字执行算术运算。它不一定需要额外的寄存器,因为 RAM 可用于中间存储。

与机器字相关的数据类型越宽,执行任何特定操作所需的指令就越多。性能也可能因需要使用 RAM 而不是寄存器而受到影响,因此具有小型或非正交寄存器集的架构执行此类操作的速度可能会更慢,并且需要更多指令。

高级语言可以为此类操作提供直接支持。C 语言数据类型long long通常是 64 位,但您需要检查您的编译器是否支持它以及它在该实现中的大小。如果您的编译器提供 C99 stdint.h标头,而该标头又包含int64_t数据类型(及其变体),则编译器隐含地能够为 64 位操作生成代码。代码大小、内存使用和执行时间当然会增加。

在大多数 C 实现中,double数据类型是 64 位的,即使在没有 FPU 的目标上也是如此。

于 2012-10-11T20:13:34.077 回答
4

“句柄”到底是什么意思?

任何图灵完备的机器都可以处理任何事情,所以理论上你的问题的答案是肯定的。然而,问题是这有多方便或实用。

似乎任何 16 位机器都不太可能有任何硬件支持 64 位操作。

  • 如果机器不支持 64 位类型,则可以实现它(用汇编语言、C 或您使用的任何其他语言),例如使用 4 个 16 位硬件寄存器
  • 这台机器可能没有支持,但也许有人已经编写了实现它的库(旧的 x86 系统就是这种情况,它有很好的 64 位浮点类型库double
  • 机器可能有一些 64 位功能:32 位 ARM 有一个命令SMLALxy将 16 位数字相乘并将总和与 64 位数字相加
于 2012-10-11T17:03:39.197 回答