仅使用整数寄存器将浮点值从C程序传递到汇编程序级程序?

问题描述 投票:0回答:1

对于我的班级,我们正在编写一个简单的asm程序(带有C和AT&T x86-64),该程序可打印整数或浮点数的所有位。我的整数部分工作正常。对于浮点部分,我的教授指示我们仅使用整数寄存器传递浮点值。不太确定为什么我们不允许使用浮点寄存器。无论如何,是否有人对此有想法?

c assembly floating-point x86-64
1个回答
0
投票

我的教授指示我们仅使用整数寄存器传递浮点值。

一种简单的方法是使用floatmemcpy()复制到整数中>

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和整数的字节序通常会匹配。

© www.soinside.com 2019 - 2024. All rights reserved.