Assembler inline
Inviato: ven 29 feb 2008, 18:52
Salve a tutti..Sono un neofita dell'assembler, ho provato a realizzare una semplice funzione che esegue una somma tra due interi senza segno..Purtroppo i risultati sono deludenti!Non capisco se è sbagliato il mio listato, o se c'è qualcosa che mi sfugge relativamente alla sintassi AT&T.Ho fatto così:
Ci sono alcune istruzioni inutili, tipo le movl su ebp ed esp, ma non credo siano quelli i problemi.La Call da problemi.Le label si inseriscono così?"<nome_label>:"
Codice: Seleziona tutto
#include<stdio.h>
unsigned int miaVar=56;
unsigned int miaVar2=299;
unsigned int somma;
int main(void){
asm("movl miaVar,%ebx\n\t"
"movl miaVar2,%ecx\n\t"
"movl $0,%eax\n\t"
"pushl %ebx\n\t"
"pushl %ecx\n\t"
"call somma_r\n\t"
"addl $8,%esp\n\t"
"movl %eax,somma\n\t"
"somma_r:pushl %ebp\n\t"
"movl %ebp,%esp\n\t"
"movl 12(%ebp),%eax\n\t"
"addl 8(%ebp),%eax\n\t"
"movl %ebp,%esp\n\t"
"popl %ebp\n\t"
"ret\n\t");
printf("Valore %u \n",somma);
return 0;
}