Как вернуть число с плавающей точкой в ​​Windows NASM - PullRequest
0 голосов
/ 13 апреля 2019

Я хочу передать переменную с плавающей запятой из файла 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

...