2010-09-29 4 views
4

Pourquoi les registres à usage général sont-ils classés tels quels (eax, ecx, edx, ebx)? Par exemple, pour l'instruction « inc » les opcodes sont:Registres à usage général - Commande

inc eax - 40 
inc ecx - 41 
inc edx - 42 
inc ebx - 43 

Y at-il une raison pour laquelle ils sont commandés de cette façon?

+0

pourquoi vous pensez qu'ils doivent être en n'importe quel ordre certain à moins bien sûr qu'ils soient poussés sur une pile. De plus cela dépend du type d'incrément que vous faites, "word", "byte" etc ... Le stockage de destination peut être soit l'emplacement de la mémoire, soit les registres. – EKet

+0

Comme c'est EAX, EBX etc ce sont des registres 32 bits ... Et bien, sauf l'ebx, ils semblent être alphabétique, non? – 0x90

Répondre

0

Il y a 8 registres, donc chacun d'eux a reçu un ordinal de 0 à 7.

Je ne comprends pas la question. Est-ce "pourquoi ne sont-ils pas ordonnés dans l'ordre lexicographique?" C'est parce que les lettres a, b, c, d représentent l'accumulateur, la base, le compteur et les données et ne sont pas seulement les quatre premières lettres de l'alphabet.

+0

Et pourquoi ont-ils reçu les chiffres de cette façon? Vous dites juste pourquoi ils sont nommés comme ils sont. – 0x90

+0

Les opérations multi-registres telles que mul et div utilisent edx: eax, donc je m'attendais à ce que ce soient des numéros adjacents au moins. IIRC dans la version 16 bits, vous pouvez utiliser bx pour l'adressage mais pas ax, cx, dx, ce qui pourrait être la raison pour laquelle il est à l'extrémité supérieure avec les autres registres d'indexation. – Rup

+0

@NOP pourquoi est-ce important? vous avez 8 registres, vous devez donc leur attribuer des numéros différents. c'est tout. Peut-être que cela dépend de certains détails internes d'implémentation x86, mais cela n'a pas d'importance. – ruslik

4

Le placement impair de (E) BX est probablement dû à la façon dont le 8086 évolué à partir du 8080.

Le 8080 possède un accumulateur (A) et 6 registres à usage général B, C, D, E, H et L, où B/C, D/E et H/L peuvent être utilisés ensemble par paires, et en particulier H/L peut être utilisé comme adresse pour l'accès à la mémoire. Le 8086 a été conçu pour que le code 8080 existant puisse être facilement traduit en Je suppose que cela semblait logique de cartographier les registres dans l'ordre suivant:

8080 register A -> 8086 internal register 0 
       B,C ->      1 
       D,E ->      2 
       H,L ->      3 
       SP ->      4 

Comme il est indiqué dans une autre réponse, AX, BX, CX et DX dans le 8086 ne sont pas seulement des noms arbitraires pour 4 registres à usage général - ils avoir des significations mnémoniques pour les fonctions spéciales que ces registres ont: "accumulateur", "base", "compte" et "données". Étant donné le mappage ci-dessus, il est logique d'affecter la fonction "accumulateur" au registre interne 0, et la fonction "base" au registre interne 3. (Et les registres internes 8086 5, 6 et 7 sont BP, SI et DI, étaient nouvelles fonctionnalités)

Bien sûr, cela est vraiment tout juste un peu au courant (voir here par exemple) la spéculation -. que les 8086 designers savent sûr ... Je ne sais pas

Questions connexes