Как сохранить числа с плавающей запятой из FPU в память?

#assembly #x86-64 #att #x87

#сборка #x86-64 #att #x87

Вопрос:

Я хочу создать программу, которая выводит косинус числа с помощью printf. Однако для этого мне нужно переместить результат fcos в %xmm0. Я попытался использовать память в качестве промежуточного шага, но я получаю ошибку «несоответствие типа операнда для `fstp'».

 .data
    result: .double 1.56098098

[...]

    fldl result
    fcos
    fstp $result
  

Комментарии:

1. Вы не перемещаете числа с плавающей запятой в rsi . Соглашение sysv использует xmm0 для первого числа с плавающей запятой (double). Ошибка связана со $ знаком. Также вы должны ввести, fstpl чтобы убедиться, что это double .

2. @Jester ты прав. Как я могу переместить его в xmm0, tho?

3. Как только вы вернете его обратно result , вы сможете movss это сделать.

4. Сказал вам, что проблема в том $ . Вы хотите fstpl result .

5. Предназначен $ для выбора инструкции, которая требует немедленного выполнения.