PDA

View Full Version : [C+ASM]


blu1988
13-12-2012, 14:54
Ciao a tutti,

devo realizzare un programma in C che richiama una procedura assembler.

Per iniziare ho scritto un semlice programma in C che passa due int alla procedura e dovrebbe ritornare la somma.

Ma ho diversi dubbi:

-con cosa compilo e linko? e come??(sono sotto windows e uso gcc per C e MASM per assembler)
-è corretto come definisco la procedura?


Procedura in asm
PUBLIC _sum
.model SMALL
.stack
.data
.code
.startup
.exit
_sum PROC neAR
push bp
MOV BP,SP
MOV AX,[BP+4]
MOV BX,[BP+6]
ADD AX,BX
pop bp
RET
_sum ENDP

END

Programma in c
#include <stdio.h>

extern int sum (int ,int);

void main()
{
int n1,n2;

printf("Inserisci due numeri\n");
printf("Primo numero:");
scanf("%d",&n1);
printf("/nSecondo numero:");
scanf("%d",&n2);
printf("\n");
printf("La somma dei due numeri e':%d",sum(n1,n2));

return;

}

MaxN
09-01-2013, 16:49
Sotto Win32 e successivo usa il modello flat. Il modello small si utilizzava a 16 bit.

Modifica di conseguenza il codice utilizzando eax, ecc. e di conseguenza gli offset da ebp, visto che cambiano le dimensioni degli int, ecc. Ricordati che deve combaciare con la modalità di compilazione del compilatore C, cioè se compili a 32 bit, gli int sono di 4 byte e così via.

Per linkare usa il linker del C. Credo che tu possa comunque specificare entrambi i sorgenti sulla riga di comando del compilatore e quest'ultimo provvede ad invocare lo strumento adatto e poi a linkare.