Question

Je lis quelque part que les adresses efficaces (comme dans l'instruction LEA) dans les instructions x86 sont calculées par le « UE ». Qu'est-ce que l'UE? Ce qui est impliqué exactement dans le calcul d'une adresse effective?

Je ne l'ai appris sur le jeu d'instructions MC68k (UC Boulder enseigne cette première) et je ne peux pas trouver une bonne page Web x86 en effectuant une recherche sur le web.

Était-ce utile?

La solution

« UE » est le terme générique pour l'unité d'exécution. L'ALU est un exemple d'une unité d'exécution. FADD et FMUL, à savoir l'additionneur à virgule flottante ou multiplicateur, sont d'autres exemples - comme, d'ailleurs sont (est) l'unité de mémoire, pour des charges et des magasins

.

Le châssis d'extension aux instructions de pertinentes LEA sont l'ALU (ajouter, soustraire, ET / OU, etc.) et l'AGU (Adresse génération Unit). L'AGU est couplé aux conduites de mémoire, TLB, mémoire cache de données, etc.

Un processeur Intel x86 typique quand j'écrit le premier guide de codegen avait 2 UMM, 1 pipeline de charge liée à un AGU, un pipeline d'adresse du magasin lié à une deuxième AGU, et un pipeline de données du magasin. A partir de 2016 la plupart ont 3 ou 4 UMM et plus d'un tuyau de charge.

LEA 3 est une instruction d'entrée - BaseReg + IndexReg * Echelle + Offset. Tout comme le mode d'adressage de la mémoire de x86, qui a en fait une entrée 4, la base de segment, qui ne fait pas partie du calcul de LEA. 3 entrées coûts nécessairement plus que les 2 entrées nécessaires pour ADD.

Sur certaines machines, l'ALU ne peut faire 2 opérations d'entrée. LEA ne peut donc exécuter sur un AGU, en particulier le AGU utilisé pour la charge (parce que le magasin ALU ne pas écrire un registre). Cela peut signifier que vous ne pouvez pas faire LEA en même temps que la charge, ou deux en même OAL temps, alors que vous pouvez deux Adds et une charge dans le même cycle.

Sur d'autres machines, LEA peut être fait par un, deux ou trois, de l'UMM. Peut-être au lieu de l'AGU - peut-être ainsi que l'ALU. Cela prouve plus de flexibilité.

Ou, les OAL simples, par exemple reg échelle + offset, peut être fait sur les UMM, alors que les plus grands OAL, par exemple Breg + ireg échelle + offset, peuvent être limités, ou peut-être même cassé en deux uops.

Alors, la question se résume à: que l'UE (Unité d'exécution) gère qui OAL? L'ALU ou l'AGU? La réponse dépend de la machine.

texte générique dans un guide d'optimisation peut simplement dire « UE » plutôt que « AGU ou ALU, selon le modèle » ou « selon l'UE est capable de gérer cette LEA particulière ».

Autres conseils

Software Manuels de développeur sont une bonne source d'information sur les architectures x86, mais ils peuvent être peu d'un surpuissant (et sont plus plutôt que comme tutoriel comme référence).

L'UE (Unité d'exécution) référence a été très probablement contrairement à ALU (Unité arithmétique et logique) qui est habituellement la partie du processeur responsable des instructions arithmétiques et logiques. Cependant, l'UE a (ou avait) des capacités arithmétiques et, pour le calcul des adresses mémoire. L'instruction LEA x86 transmet ces capacités au programmeur de montage.

Normalement, vous pouvez fournir des adresses de mémoire assez complexes à une instruction x86:

sub eax, [eax + ebx*4 + 0042]

et tandis que l'ALU gère la soustraction arithmétique, l'UE est chargé de générer l'adresse.

Avec LEA, vous pouvez utiliser les capacités d'adresses génératrices limitées à d'autres fins:

lea ebx, [eax + ebx*4 + 0042]

Comparer avec:

mul ebx, 4
add ebx, eax
add ebx, 0042

« Volume 1 » sur la page que j'ai lié a une section « 3.7.5 » dicussing modes d'adressage - quel type de mémoire les adresses que vous pouvez fournir une instruction attend un opérande de mémoire (dont LEA est l'un), ce qui reflète quel genre d'arithmétique de l'UE (ou quelle que soit la partie de l'interface mémoire est appelée) est capable.

"Volume 2" est la référence jeu d'instructions et contient des informations sur toutes les instructions définitives, y compris LEA.

UE = Unité d'exécution?

Adresse efficace est l'adresse qui aurait été accessible si l'instruction avait été LEA une instruction qui en fait effectué une sorte de l'arithmétique ou autre accès aux données. Son utilisation « destination » consiste à calculer le pointeur résultant d'une opération arithmétique de pointeur ou l'indexation de la matrice. Cependant, parce qu'il peut effectuer une combinaison de multiplier et d'ajouter, il est également utilisé pour optimiser des calculs réguliers.

Les internes des processeurs à l'intérieur d'une même famille ont beaucoup changé au fil des ans, de sorte que la référence « UE » devrait être clarifié avec le modèle exact de cpu. Par analogie à votre expérience m68k, le jeu d'instructions pour 68000, 010, 020, 030, 040 et 060 sont essentiellement les mêmes, mais leurs internes sont vraiment différents, de sorte que toute référence à un nom interne doit venir avec leur numéro de pièce.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top