Есть две возможности решить эту проблему: скомпилировать исходный код C как C (НЕ C ++), чтобы скомпилировать его как C, вы должны дать ему расширение .c
Второй способ: в коде C ++ (расширение .cpp) имена искажаются, когда вы компилируете код C ++, используйте шестнадцатеричный редактор для поиска в объектном файле и поиска Sum. В моем случае имя становится _Z3Sumii
. Если вы измените имя в источнике ассемблера на это, вы обнаружите, что оно работает.
Также измените оператор extern
в источнике C ++ на следующий, поскольку он принимает два параметра типа int
, например, extern int Sum(int, int);
global _Z3Sumii
_Z3Sumii:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov ecx, [ebp+12]
add eax, ecx
mov esp, ebp
pop ebp
ret
Для компиляции:
gcc -c file.cpp
nasm -f elf32 sum.asm -o sum.o
gcc file.o sum.o -o file