对于我的班级,我们正在编写一个简单的asm程序(带有C和AT&T x86-64),该程序可打印整数或浮点数的所有位。我的整数部分工作正常。对于浮点部分,我的教授指示我们仅使用整数寄存器传递浮点值。不太确定为什么我们不允许使用浮点寄存器。无论如何,是否有人对此有想法?
我的教授指示我们仅使用整数寄存器传递浮点值。
一种简单的方法是使用float
将memcpy()
复制到整数中>
。float f = ...; assert(sizeof f == sizeof(uint32_t)); uint32_t u; memcpy(&u, &f, sizeof u); foo(u);
另一个是使用
union
。也许使用复合文字
void foo (uint32_t); int main() { float f; assert(sizeof f == sizeof(uint32_t)); // v----------- compound literal -----------v foo((union { float f; uint32_t u; }) { .f = f}.u); // ^------ union object ------- ^ }
两者都要求使用的整数类型和
float
的大小相同。
[其他问题包括确保两者的正确字节序,但是float
和整数的字节序通常会匹配。