Quel est le but réel et l'utilisation des registres EDI et ESI en assembleur?
Je sais qu'ils sont utilisés pour des opérations de chaîne pour une chose.
Est-ce que quelqu'un peut aussi donner un exemple?
Quel est le but réel et l'utilisation des registres EDI et ESI en assembleur?
Je sais qu'ils sont utilisés pour des opérations de chaîne pour une chose.
Est-ce que quelqu'un peut aussi donner un exemple?
SI
= Index De SourceDI
= Index De Destination
Comme d'autres l'ont indiqué, qu'ils sont spéciaux utilise avec les instructions de chaîne. Pour de vrai mode de programmation, l' ES
registre de segment doit être utilisé avec l' DI
et DS
avec SI
comme dans
movsb es:di, ds:si
SI et DI peut également être utilisé comme objectif général de l'index des registres. Par exemple, l' C
code source
srcp [srcidx++] = argv [j];
compile en
8B550C mov edx,[ebp+0C]
8B0C9A mov ecx,[edx+4*ebx]
894CBDAC mov [ebp+4*edi-54],ecx
47 inc edi
où ebp+12
contient argv
, ebx
est j
, et edi
a srcidx
. Avis de la troisième instruction utilise edi
mulitplied par 4 et ajoute ebp
compensée par 0x54 (à l'emplacement de srcp
); les crochets autour de l'adresse indiquer l'indirection.
Bien que je ne me souviens pas où je l'ai vu, mais ce confirme de plus, et ce (diapo 17) autres:
AX
= accumulateurDX
= double mot de l'accumulateurCX
= compteurBX
= base de registre
Ils 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.
Il y a quelques opérations que vous pouvez seulement le faire avec DI/SI (ou leurs homologues, si vous n'avez pas à apprendre l'ASM en 1985). Parmi ceux-ci sont
REP STOSB
REP MOVSB
REP SCASB
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 :) )
C'est la plupart de ce que les regs sont pour.
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 AVX VMASKMOVDQU
) l'instruction de manière sélective écrire des octets à partir d'un registre XMM à la mémoire pointé par ESI/RSI.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.