PDA

Visualizza la versione completa : [ASM+C] Compilare File C ed ASM


rocco.g
02-07-2005, 15:34
salve!

Qualcuno di voi conosce come compilare un file C che usa delle funzioni scritte in asm ?

tipo questo:




#include <stdio.h>
extern int power2 (int factor, int power);
void main()
{
printf(”3 volte 2 elevato 5=%d\n”, power2(3,5));
}


Modulo Assembler:


PUBLIC _power2
.MODEL small
.CODE
_power2 PROC
PUSH BP
MOV BP, SP
MOV AX, [BP+4] ; primo parametro
MOV CX, [BP+6] ; secondo parametro
SHL AX, CL
POP BP
RET
_power2 ENDP
END

DYNAM!C+
02-07-2005, 17:57
il tuo compilatore c, per che os è?
dos/win16 o win32?

rocco.g
02-07-2005, 23:26
uso Dev-cpp quando sono su winxp e il gcc quando sono sulla slackware.
Del dev-cpp uso l'ultima versione, del gcc uso la versione che è stata rilasciata insieme alla slackware 10.0...

DYNAM!C+
03-07-2005, 03:31
ho capito...
allora devi usare puntatori a 32 bit


#include <stdio.h>
extern int power2 (int factor, int power);
void main()
{
printf(”3 volte 2 elevato 5=%d\n”, power2(3,5));
}



...
.model flat, stdcall
...
public power2

power2:
push ebp
mov ebp, esp
mov eax, dword ptr ss:[ebp+8]
shl eax, dword ptr ss:[ebp+12]
retn 4

rocco.g
03-07-2005, 10:21
mm non ho capito bene...

io pensavo di dover compilare i lfile asm a parte creadno l'obj e poi linkarlo in fase di compilazione al programma in C con il compilatore...

perchè mi deve diventare così:



power2:
push ebp
mov ebp, esp
mov eax, dword ptr ss:[ebp+8]
shl eax, dword ptr ss:[ebp+12]
retn 4

DYNAM!C+
03-07-2005, 14:22
Originariamente inviato da rocco.g
mm non ho capito bene...

io pensavo di dover compilare i lfile asm a parte creadno l'obj e poi linkarlo in fase di compilazione al programma in C con il compilatore...

perchè mi deve diventare così:



power2:
push ebp
mov ebp, esp
mov eax, dword ptr ss:[ebp+8]
shl eax, dword ptr ss:[ebp+12]
retn 4

per innanzitutto tu compili a 32bit il codice C, quindi passi variabili a 32bit al codice asm! il codice asm a sua volta deve essere a 32bit!

rocco.g
03-07-2005, 15:38
ahhh mi è tutto chiaro !!!

ok!!! grazie! ;)

Loading