将float写入4字节寄存器

时间:2012-02-28 09:33:36

标签: floating-point cpu-registers

我有一个浮点数,需要将它存储在一个4字节的寄存器中。 但是当我按照下面的例子进行操作时,我没有得到正确的值,因为它被破坏为0x0000C000。

typedef float FLT;
FLT val , temp_val;
val = -6.513467;
(volatile FLT*)0x402174 = val;

相反,如果我使用如下的寻址变量并检查& _temp_val,它就可以工作。

temp_val = val;

_temp_val的值为0xC0D06E52(IEEE 754格式)

我无法理解为什么我无法写入寄存器。

1 个答案:

答案 0 :(得分:0)

您应该通过平台定义标题中的一个变量访问该寄存器,而不是通过其地址进行硬编码。

您的C编译器也可能会使用该寄存器,因此您的分配可能会被破坏。

您可以通过查看C编译器为您的代码生成的汇编代码来检查这一点。

您的C编译器也可能允许这样的语法。

register float *f asm ("r0") = ...;