cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
15 août 2011 à 13:33
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 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és3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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és75Date d'inscriptionmardi 29 juillet 2008StatutMembreDernière intervention25 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és587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 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és587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 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és3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 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.
20 août 2011 à 22:17
c'est la compile du FULL code C qu'il faut comparer au reste.
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.
20 août 2011 à 08:48
16 août 2011 à 08:31
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.
15 août 2011 à 19:51
15 août 2011 à 18:05
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
15 août 2011 à 16:15
avec c++ express
extern int _stdcall CreerMiniWin(void);
.
.
CreerMiniWin();
.
15 août 2011 à 15:02
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@?
15 août 2011 à 13:33