запись float в 4-х байтовый регистр - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть число с плавающей запятой, и мне нужно сохранить его в 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 голосов
/ 28 февраля 2012

Вы должны получить доступ к этому регистру через одну из переменных из заголовков определения платформы, а не жестко запрограммировать его по адресу.

Ваш компилятор C может использовать этот регистр также под капотом, таким образом, ваше назначение можетполучить clobbered.

Вы можете проверить это, посмотрев код ассемблера, который ваш компилятор C генерирует для вашего кода.

Ваш компилятор C может также использовать такой синтаксис.

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