Le but de l'ESI & EDI registres?
Quel est le réel but et l'utilisation de l'EDI & ESI registres en assembleur?
Je sais qu'ils sont utilisés pour les opérations de la chaîne pour une chose.
Quelqu'un peut également donner un exemple?
- Check this out: swansontec.com/sregisters.html
Vous devez vous connecter pour publier un commentaire.
Il y a quelques opérations que vous pouvez seulement faire avec DI/SI (ou leurs homologues, si vous n'avez pas à apprendre l'ASM en 1985). Parmi ceux-ci sont
Qui sont, respectivement, les opérations répétées (= masse) le stockage, le chargement et numérisation. Ce que vous faire est de configurer SI et/ou DI à point, à un ou deux opérandes, peut-être mettre un nombre dans CX, puis laissez - 'er rip. Ce sont des opérations que travailler sur un tas d'octets à la fois, et en quelque sorte de mettre le CPU en mode automatique. Parce que vous n'êtes pas explicitement codage de boucles, ils font leur chose de manière plus efficace (en général) qu'un codés à la main boucle.
Juste au cas où vous vous poseriez la question: en Fonction de la façon dont vous définissez l'opération, répétée le stockage peut être quelque chose de simple comme la perforation de la valeur 0 dans un grand bloc contigu de mémoire; MOVSB est utilisé, je pense, pour copier les données d'un tampon (bien, tout tas d'octets) à l'autre; et SCASB est utilisé pour chercher un octet qui correspond à certains critères de recherche (je ne suis pas sûr si c'est seulement pour la recherche sur l'égalité, ou qu'est – ce- que vous pouvez le regarder 🙂 )
Que la plupart de ce que les regs sont pour.
SI
= Index De SourceDI
= Index De DestinationComme d'autres l'ont indiqué, qu'ils ont des utilisations spéciales avec les instructions de chaîne. Pour de vrai mode de programmation, le
ES
registre de segment doit être utilisé avecDI
etDS
avecSI
comme dansSI et DI peut également être utilisé comme objectif général de l'index des registres. Par exemple, le
C
code sourcecompile en
où
ebp+12
contientargv
,ebx
estj
, etedi
asrcidx
. Avis de la troisième instruction utiliseedi
mulitplied par 4 et ajouteebp
compensée par 0x54 (l'emplacement desrcp
); les crochets autour de l'adresse indiquer indirection.Bien que je ne me souviens pas où je l'ai vu, mais cette confirme de plus, et cette (diapo 17) autres:
AX
= accumulateurDX
= double mot accumulateurCX
= compteurBX
= base de registreIls ressemblent à des fins générales de registres, mais il y a un certain nombre d'instructions qui (inattendue?) utiliser l'un d'entre eux—mais lequel?—implicitement.
Opcodes comme MOVSB et MOVSW efficacement copier les données de la mémoire pointée par ESI à la mémoire pointé par l'EDI. Ainsi,
En plus des opérations de la chaîne (MOV/INS/OCT/CMP/SCASB/W/D/Q etc.) mentionné dans les autres réponses, je voulais ajouter qu'il est aussi plus "moderne" x86 instructions de montage qui utilisent implicitement au moins, EDI/RDI:
Le SSE2
MASKMOVDQU
(et la prochaine AVXVMASKMOVDQU
) l'instruction de manière sélective écrire des octets à partir d'un registre XMM à la mémoire pointé par EDI/RDI.En plus des registres utilisés pour les opérations de masse, ils sont utiles pour leur propriété d'être préservés par le biais d'un appel de fonction (appel préservés) en 32 bits convention d'appel. L'ESI, EDI, EBX, EBP, ESP appel préservé alors que EAX, ECX et EDX sont pas d'appel préservé. Appel conservés les registres sont respectées en fonction de la bibliothèque C et leurs valeurs persistent à travers la fonction de la bibliothèque C d'appels.
Jeff Duntemann dans son assemblée du livre de langue a un exemple d'assemblage de code pour l'impression des arguments de ligne de commande. Le code utilise l'esi et edi pour les comptoirs de magasin, car ils seront inchangés par la bibliothèque C de la fonction printf. Pour les autres registres comme eax, ecx, edx, il n'y a aucune garantie n'étant pas utilisé par les fonctions de la bibliothèque C.
https://www.amazon.com/Assembly-Language-Step-Step-Programming/dp/0470497025
Voir la section 12.8 Comment C voit Arguments de Ligne de Commande.
Noter que la version 64 bits des conventions d'appel sont différents de 32 bits conventions d'appel, et je ne suis pas sûr si ces registres sont appel conservé ou non.