#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. Предназначен
$
для выбора инструкции, которая требует немедленного выполнения.