INTERFACE C ET ASM

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 15 août 2011 à 13:33
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 20 août 2011 à 22:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53466-interface-c-et-asm

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 août 2011 à 22:17
NIET,
c'est la compile du FULL code C qu'il faut comparer au reste.
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
20 août 2011 à 18:34
;-----------------------------------------------------------
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 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 août 2011 à 08:48
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 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
16 août 2011 à 08:31
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 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
15 août 2011 à 19:51
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.
cs_parki Messages postés 75 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 25 mars 2019
15 août 2011 à 18:05
Pour cet exemple j'ai utilisé CODE BLOCKS comme compilateur C/C++
Effectivement,il faut préserver EBX dans la proc d'où avec 2 paramètres;

module c:
----------

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

extern int asm_main(int a,int b);

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

module asm:
----------

.586
.model small,c

asm_main PROTO C PA1:SWORD,PA2:SWORD

.code

asm_main PROC C uses ebx ecx PA1:SWORD,PA2:SWORD
mov ax,PA1
mov cx,PA2
add ax,cx
ret
asm_main endp

end
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
15 août 2011 à 16:15
Il faudrait aussi dire quel est le compilateur C utilisé:
avec c++ express
extern int _stdcall CreerMiniWin(void);
.
.
CreerMiniWin();
.
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
15 août 2011 à 15:02
Le truc tout simple,c'est:
Créer un fichier objet en asm normal:
et .... faire un appel stdcall depuis le c ou c++

L'inverse marche aussi.
PROTO C ;a déclarer dans l'assembleur
PROTO SYSCALL ;noms décorés ??@monprog@?
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
15 août 2011 à 13:33
Mauvais exemple : tu écrases EBX et si par malheur ton programme en C s'en sert avant/après, tu vas avoir de drôles de surprises. De plus, il n'y a rien de plus simple que d'appeler une fonction sans paramètre. Essaie avec 2 ou 3, ça aura déjà plus d'intérêt.
Rejoignez-nous