Ecx ok, mais Eax, Ebx et Edx ??
Ecx ok, mais Eax, Ebx et Edx ??
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) ???
Mais en pratique, quelle utilité a eax (accumulateur), ebx (base) et edx (donnees) ???
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.
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.
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 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.
juste pour info, sur un bouquin pas trés récent :
Source : Assembleur facile par Philippe Mercier / Ed MARABOUT INFORMATIQUE
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
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.
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.
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é.
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.
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.
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