Delphi et registre EAX - ASM - Programmation
Marsh Posté le 25-04-2006 à 14:06:56
la pluspart des compilateurs pratiquent effectivement généralement cette règle, passer les paramètres par les registres (puis par la pile si y'a pas assez de registres) puis les récupérer depuis les registres.
en fait dans ton cas L ne se retrouve pas dans eax, mais L est eax , et le retour est eax.
c'est la fonction appellante qui mets le longint dans eax avant l'appel, et qui récupère le résultat depuis eax au retour.
swaplong:
rol eax,16
ret
machin_truc:
mov eax,truc
call swaplong
mov zogzog,eax
Marsh Posté le 25-04-2006 à 14:08:43
d'ailleurs dans ton cas, je me demande si la méthode avec les deux shifts et le or sera pas plus rapide.
Marsh Posté le 25-04-2006 à 14:22:26
Niveau perf, à ce niveau là je dois avouer que j'ai du mal...Mais bon, sans réfléchir j'aurais dit que ma méthode était plus longue (au moins 3 instructions asm, non ?)...
Marsh Posté le 25-04-2006 à 15:08:25
de toutes manière le coût intrinsèque de l'instruction n'est pas pertinent si le compilo ne fait d'inline (le coût d'appel et de retour est plus important que le rol ou les shifts+or).
le pb de mettre de l'asm inline, c'est que ça peut couper localement des optimisations du compilo.
Marsh Posté le 25-04-2006 à 15:09:35
d'ailleurs le rol doit être certainement éclaté en µops (par rapport à la solution 3 instructions triviales).
Marsh Posté le 16-06-2006 à 00:28:31
bjone a écrit : la pluspart des compilateurs pratiquent effectivement généralement cette règle, passer les paramètres par les registres (puis par la pile si y'a pas assez de registres) puis les récupérer depuis les registres. |
Attention tout de même!
Ceci est valable uniquement lorsque les options d'optimisation sont sélectionnées. Sinon les paramêtres sont passés par la pile.
http://nono40.developpez.com/tutor [...] sm/#LIII-D
Il est donc préférable de récupérer la variable par son nom plutôt qu'en supposant qu'elle se trouve à tel endroit.
Quant à la vitesse d'exécution des 2 fonctions, à moins qu'elles ne fassent parti d'un gros calcul lourd et répétitif, je ne pense pas que l'on sentira la différence!
Marsh Posté le 16-06-2006 à 09:37:52
bin disons que tu fais pas une fonction call-ée avec 1 instruction dedans
Marsh Posté le 25-04-2006 à 12:24:34
Bonjour à tous...
J'ai trouvé sur le net à l'adresse suivante http://groups.google.fr/group/comp [...] 99998e8d54
une petit explication pour pouvoir récupérer en delphi les informations d'un fichier.
A l'intérieur de ce HOWTO, la fonction en assembleur a attiré mon attention :
Je comprends bien le ROL et tout et tout, en revanche ce que je ne comprends pas c'est comment la paramétre L se retrouve dans le registre EAX, et comment le résultat de la fonction est renvoyé.
D'aprés ce qu'on m'a dit, la convention veut que le résultat d'une fonction soit toujours placé dans EAX, mais ça ne me dit pas comment le paramétre L est placé dans ce même registre.
Voilà, si vous avez des réponses, c'est plus par curiosité car pour que le tout soit un peu plus lisible (enfin moins sorti de l'espace) j'ai remplacé cette fonction par celle là :
Merci...et bon code