Ciao a tutti, stavo realizzando un esercizio che determinasse il massimo di un vettore di interi. Il programma in C deve richiamare il codice assembly. Provo a compilare l'assembly
codice:
as --32 max.s -o max.o
ma:
codice:
max.s: Assembler messages:
max.s:18: Error: junk `(,%edi,4)' after register
Ho provato a googlare il problema, ma ho trovato tutti con assembly inline.
Vi riporto di seguito i listati dei due file:
codice:
//max_main.c
#include <stdio.h>
#include <stdlib.h>
int max(int* v, size_t size);
int main(int argc, char** argv){
int vect[] = {10, 32, 39, 29};
printf("Max value: %d", max(vect, 4));
return 0;
}
codice:
#max.s
.globl max
max:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ebx
movl 12(%ebp), %ecx
cmpl $0, %ecx
je end_max
movl (%ebx), %eax
movl $1, %edi
loop:
cmpl %ecx, %edi
je end_max
movl %ebx(,%edi,4), %edx
incl %edi
cmpl %edx, %eax
jge loop
movl %edx, %eax
jmp loop
end_max:
movl %ebp, %esp
popl %ebp
ret
Alla fine per linkare i due file assieme mi basta:
codice:
gcc -m32 max_main.c max.o -o output
giusto?
Spero di poter contare in un vostro aiuto.
Ciaoooo