2016-04-24 4 views
0

У меня эти простые функции в ASM и C. Я хочу вызвать функцию ASM из кода C для двойного. Я думаю, что возвращаемое значение из ASM следует хранить в XMM0, но то, что на самом деле произошло то, что мое возвращение значение берется из бараков или если Ракс не установлен, я получаю 1.Вызов функции ASM x64 из C (двойной), GAS

код C:

#include <stdio.h> 

int main() { 
double a = 3.14; 
double b = add(a); 
printf("%lf\n", b); 

return 0; 
} 

Функция ASM:

.type add, @function 

.globl add 
add: 

#movq $1, %rax 
addsd %XMM0, %XMM0 

ret 

Что в этом плохого? Цените все подсказки.

ответ

3

Вы не сказали компилятору, что функция принимает или возвращает. Неявное объявление сделает его предполагаемым возвращаемым значением int.

Компилятор должен предупредить вас об этом. Если это не так, включите предупреждения.

Вы должны добавить

extern double add(double val); 

поэтому компилятор знает, что случилось.

+0

спасибо! – zderzak678