Interface c et asm

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 685 fois - Téléchargée 16 fois

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

Ajouter un commentaire

Commentaires

BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
NIET,
c'est la compile du FULL code C qu'il faut comparer au reste.
ToutEnMasm
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1 -
;-----------------------------------------------------------
Eternel discours entre le pseudo ASM qui finira toujours moins efficace que du bon C et le vrai ASM dont le seul but devrait être l'optimisation maximale.
;----------- fin de citation -------------------------------
Si quelqu'un me montre qu'en utilisant la close uses on perd ne serais ce qu'une µs par rapport a une inscription manuelle,là CHAPEAU.
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
Eternel discours entre le pseudo ASM qui finira toujours moins efficace que du bon C et le vrai ASM dont le seul but devrait être l'optimisation maximale.
ToutEnMasm
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1 -
citation:
Mouais ... à quoi bon faire de l'asm si on ne fait qu'utiliser les macros !
--------- fin de citation ------------------------------
L'utilistion de la macro uses est beaucoup plus clair qu'un push/ pop.
Elle garantit:l'équilibre de la pile
est visible instantanément dans l'entête du proc
++++++++
Utiliser les macros c'est permettre à l'assemleur de régler la foule de petits détails permettant un bon fonctionnemt du proc et rendant le code plus lisible.
Ce n'est pas parce qu'on fait de l'asembleur qu'il faut se passer des solutions automatiques.
cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11 -
Mouais ... à quoi bon faire de l'asm si on ne fait qu'utiliser les macros ! Un PUSH ECX/POP ECX est bien plus clair et là au moins tu sais ce que tu fais. Ma remarque sur les paramètres tient toujours.

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.