Interface c et asm

Contenu du snippet

Pour les débutants comme moi,voici comment utiliser un prog ASM dans
un prog C et inversement en mode console.

Source / Exemple :


Appeler une routine ASM à partir d'un prog en C (mode console)
--------------------------------------------------------------

module C;

	 #include <stdio.h>
	 #include <stdlib.h>

	 extern int asm_main

	 int main()
	 {
	  int retour;
	  retour=asm_main();
	  printf("le resultat de la routine asm_main est : %ld",retour);
	  return 0;
	  }

module asm;

		.586
		.model small,c
		
		asm_main	PROTO C
		
		.code
		
		asm_main	PROC C
			mov eax,10
			mov ebx,20
			add eax,ebx
			ret
		asm_main	endp

		end

vous assembler le module asm,vous renommer en .o au lieu de .obj,et vous lier avec le module C.

Appeler une routine C dans un prog asm (mode console)
-----------------------------------------------------

Vous devez utiliser un module C comme "lanceur" du prog asm.
C'est cela qui permet d'utiliser les librairies C.

module C;

	 #include <stdio.h>
	 #include <stdlib.h>

	 extern int asm_main

	 int main()
	 {
	  int retour;
	  retour=asm_main();
	  return 0;
	  }

module asm:

	.586
	.model small,c

	printf PROTO NEAR,string:DWORD,P1:DWORD
	asm_main	PROTO

	.data

	format	byte '%ld',13,0

	.code

	asm_main PROC PUBLIC uses ecx

		mov eax,30
		mov ecx,30
		add eax,ecx
		invoke printf,offset format,eax

		mov eax,0
		ret

	asm_main endp

	end

Pour tranformer les protypes des fonctions C en syntaxe MASM,il faut utiliser H2INC.exe (fournit avec masm 615 normallement)

Bonne prog.
parki

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.