据我了解,浮点存储在XMM寄存器中,而不是诸如的通用寄存器中eax,因此我做了一个实验:
float a = 5;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,a被存储1084227584在XMM寄存器中。这是程序集版本:
.text
.global _start
.LCO:
.long 1084227584
_start:
mov .LCO, %eax
movss .LCO, %xmm0
Run Code Online (Sandbox Code Playgroud)
执行上述组件和使用它的调试gdb显示,在值eax将是1084227584,然而,在值ymm0是5。
这是我的问题:
1- XMM寄存器有什么特别之处?除了SIMD指令,它们是唯一存储浮点的寄存器类型吗?
为什么不能在常规寄存器中设置相同的位?
2- float和double值始终存储为浮点吗?
我们永远不能将它们存储为fixed pointC或汇编语言吗?