Я хочу передать переменную с плавающей запятой из файла CPP в файл asm, выполнить некоторые математические операции и вернуть их обратно. Он работает для целых чисел, для двойников показывает странный вывод (-1. # INDOO)
Должно работать для опции -f win32 в NASM (работает на VS2008 Express Edition и NASM)
Я проверил, работает ли оно на целые числа. Когда я пробую удваивать, ни mov eax, [ebp + 8] ret
, ни movsd xmm0, [ebp + 8] ret
не работают
cpp file
extern "C" double bar(double k);
int main(int argc, char** argv)
{
double w[6];
for(int j = 0; j < 6; j++) {
w[j] = bar(3.5);
}
for(int i = 0; i < 6; i++) {
printf("%f\n", w[i]);
}
return 0;
}
сборочный файл
section .text
global _bar
_bar:
push ebp
mov ebp, esp
movsd xmm0, [ebp + 8]
; or mov eax, [ebp + 8]
leave
ret
На данный момент он должен возвращать 3,5 для каждого элемента, но возвращает -1. # INDOO