Комбинированная программа С++ assembler
Пишу программу на с++, она вызывает процедуры из другого файла на ассемблере. Смысл простой: заполняется массив и в нем с помощью ассемблерных процедур ищется наибольший и наименьший элемент. Но при компоновке получаю такую ошибку:
/usr/bin/ld: casm.o: in function `main':
/comb/casm.cpp:22: undefined reference to `findmax(int*, int)'
/usr/bin/ld: /comb/casm.cpp:23: undefined reference to `findmin(int*, int)'
collect2: error: ld returned 1 exit status
Подскажите пожалуйста, как можно решить проблему
Код на с++:
#include <iostream>
using namespace std;
extern int findmax(int * array, int iter);
extern int findmin(int * array, int iter);
int main()
{
int arr_size, max, min;
int iter = arr_size + 1;
int *arr = new int[arr_size];
cin >> arr_size;
for (int i = 0; i < arr_size; i++) {
cout << "Value of " << i + 1 << " element is ";
cin >> arr[i];
}
max = findmax(arr, iter);
min = findmin(arr, iter);
delete [] arr;
return 0;
}
Код на ассемблере FASM:
format ELF64
public findmax
public findmin
section '.findmax' executable
findmax:
mov ecx, edi
mov ebx, esi
mov eax, [ecx]
.tmax:
xor edx, edx
mov edx, [ecx]
cmp edx, eax
jg .gre
jmp .endi
.gre:
mov eax, edx
jmp .endi
.endi:
add ecx, 4
dec ebx
jnz .tmax
ret
section '.findmin' executable
findmin:
mov ecx, edi
mov ebx, esi
mov eax, [ecx]
.tmin:
xor edx, edx
mov edx, [ecx]
cmp edx, eax
jl .lessi
jmp .endi
.lessi:
mov eax, edx
jmp .endi
.endi:
add ecx, 4
dec ebx
jnz .tmin
ret
Компилирую как:
fasm find.asm
g++ casm.cpp find.o -o casm