数据类型添加大于单词

时间:2011-12-11 19:53:18

标签: data-structures cpu-architecture instruction-set

如何将大数据类型(Double / Float)加载到算术运算的寄存器中?寄存器可以保存多个字大小的数据吗?如果只能添加2个寄存器来将结果加载到第三个寄存器,那么大于单个寄存器的数据类型会发生什么?

2 个答案:

答案 0 :(得分:0)

例如,在SPARCv8 ABI中,64位双精度数据被加载到两个32位寄存器中,FP操作在两个寄存器上同时工作。 fsqrtd %f10, %f8获取%f10:%f11中的值,并将根源结果写入%f8:%f9。在x86_32上,你可以在进行32x32-> 64乘法时观察到类似的结果,其中结果将在edx:eax(或左右)中。实际上与286模式中的16x16-> 32乘法相同,其中结果变为dx:ax。

答案 1 :(得分:0)

首先,CPU通常具有用于整数和浮点数的单独寄存器文件。

在80年代,一些CPU试图使用统一的寄存器空间,但发现这是一个带宽瓶颈。因为浮点运算几乎总是多周期的,并且总是有相当数量的基于整数的流控制混合在一起,所以同时访问单独的寄存器空间会更有效。

其次,对于某些体系结构,浮点寄存器文件都是80位扩展浮点数(C中的“long double”)。加载时双打和浮点数将扩展为该格式,扩展格式在存储时将被舍入并截断。

对于整数运算,这取决于体系结构。由于64位是x86的一个想法,它在同一物理寄存器上覆盖了8位(AL和AH),16位(AX),32位(EAX)和64位(RAX) ,每个都通过不同的寻址模式访问。另一方面,一些RISC架构将寄存器中的数字视为MOST操作的64位,仅关注负载和存储中的字大小。