Ecx ok, mais Eax, Ebx et Edx ??

Pour discuter de l'assembleur
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Ecx ok, mais Eax, Ebx et Edx ??

Message par SPH »

L'utilité de Ecx en tant que compteur, ok, je comprend le coté pratique.
Mais en pratique, quelle utilité a eax (accumulateur), ebx (base) et edx (donnees) ???
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

par experience, je te repond que ce sont juste des nom comme 'paul' et 'jean' et non font rien de particulier.
tout les registres "eax,ebx,ecx,edx,edi,esi,ebp,esp"peuvent etre utilisé comme registre de donnée ou d adresse.(en faisant attention pour le registre "esp" pointeur de pile).
par hailleur ,pour le registre "ecx" il est peut recommandé de l utiliser comme compteur car "loop" est plus lent q une decrementation clasique avec condition.
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

tonton a écrit :par ailleurs, pour le registre "ecx" il est peu recommandé de l'utiliser comme compteur car "loop" est plus lent q'une decrementation classique avec condition.
Je suppose que c'est parce que l'ASM decremente ECX (donc 32 bits) alors que si l'on a besoin d'un loop de 100 (8 bits) ou de 40000 (16 bits), ca va plus vite de passer par des registres de tailles adéquates...
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

la taille des operandes n affecte pas la vitesse.
un "dec ecx"ou "add eax,ebx" va aussi vite qu "dec cl" ou add al,bl"

mais le couple : dec ecx (ou tout autre registre)
:jnz saut



va plus vite que :loop
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Tout ça ça date de la préhistoire des processeurs x86 (qui ont un jeu d'instruction gerbatif quand on a goûté aux 68xxx). Maintenant ça n'est plus qu'un héritage dont on ne tient plus compte.
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Bin, on fait avec ce qu'on a....

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

juste pour info, sur un bouquin pas trés récent :
Les registres de travail

Au nombre de 4, ils ont un usage bien précis bien qu'ils puissent servir comme zones de stockage de résultats intermédiaires :

* AX : est un registre de 16 bits appelé "Accumulateur", car il est utilisé lors d'opérations arithmétiques

* BX : est un registre de 16 bits appelé "Registre de base" (cf modes d'adressages)

* CX : est un registre de 16 bits appelé "Compteur" (cf instruction LOOP)

* DX : est un registre de 16 bits appelé "Data" (cf instructions arithmétiques)

...

Il faut aussi savoir que les opérations impliquant les registres sont beaucoup plus rapides que celle impliquant des zones mémoire.
:)

Source : Assembleur facile par Philippe Mercier / Ed MARABOUT INFORMATIQUE
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Comme sur mon bouquin !
Mais je cherchais a savoir ce que ca veux dire concretement...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

en fait, tu les utilises comme tu veux mais, concrétement, le système va les utiliser d'une facon plus précise.

Prenons par exemple Linux et l'interruptions 0x80 (sous dos cela serait : int 0x21) :

READ :

* EAX : contient le nb d'octet lus
* EBX : contient le descripteur/sortie standard (0=stdin, 1=stdout, 2=stderr)
* ECX : contient le pointeur sur le buffer d'entrée des données
* EDX : contient le nb d'octet à lire

sous DOS, pour lire cela sera différent.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

SPH,

je t'invite à télécharger la doc en anglais d'Intel (elle est gratuite au format PDF). Il y a un volume consacré à l'optimisation.

Le fichier Architecture Software Developer s Manual, Volume 1 Basic Architecture te donnera plus d'infos sur les registres 32 et 64 bits

Va au paragraphe 3-4-1 : General purpose registers

Il y est dit les instructions de traitement de chaînes utilisent ECX, ESI et EDI comme opérande.

EAX est l'accumuateur pour les opérandes et les données de résultat

EBX est un pointeur de données pour le segment DS

ECX est un compteur pour les opérations sur les chaînes et les boucles

EDX est pointeur d'entrée/sortie

ESI est un pointeur de données sur les données du segment pointé par DS, c'est aussi un pointeur pour la source pour les opérations de chaînes

EDI est un pointeur de données (ou de destination) dans le segment pointé par ES, c'est aussi un pointeur de destination pour les opérations de chaînes


De souvenir , pour les processeurs 16 bits, certaines instructions étaient plus rapides avec l'accumulateur AX. Avec les nouveaux processeurs Pipeline, le traitement des instructions est assez compliqué.
Dernière modification par Anonyme2 le mar. 30/mai/2006 17:10, modifié 1 fois.
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ho, j'ai deja plusieurs fois consulté la doc ASM sur pleins de sites. Je devrais en fait m'y remettre un bon coup...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

De toutes façons, ce n'est pas compliqué, dans certaines instructions (comme la manipulation de chaîne et comme dans l'exemple que tu donnais avec loop), tu es obligé d'utiliser les registres spécialisés qui correspondent (comme indiqué dans n'importe quelle doc avec les opcodes). C'est là qu'on voit en quoi ils sont spéciaux. Mais apprendre spécifiquement le rôle particulier de chacun ne sert plus à grand chose. A part bien sûr pour les flags et la pile.
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Je crois avoir lu que Flype (je crois que c'est lui) avait fait une procedure ASM plus rapide que d'autre parce qu'il avait utilisé le segment de données. Comme quoi, il faut toujours savoir utiliser les bonnes instructions.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ah non çà peut pas être moi :D je rappelle que je me suis noté -5 / 5 dans le sondage :lol: j'arrive à lire l'assembleur sous la torture mais faire une routine de ce genre...
Image
Répondre