Que signifie le R dans RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP? [dupliquer]

Cette question a déjà une réponse ici:

  • que signifient les préfixes E et R dans les noms des registres Intel 32 bits et 64 bits? 1 réponse

le langage assembleur x86 a dû changer car l'architecture du processeur x86 est passée de 8bit à 16bit à 32bit et maintenant 64bit.

je sais que dans 32bit noms des registres de l'assembleur (EAX, EBX, etc.), le préfixe E pour chacun des noms signifie étendu la forme 32bit du registre plutôt que la forme 16bit (AX, BX, etc.).

que signifie le préfixe R pour ces noms de Registre dans 64bit?

18
demandé sur Richard Chambers 2012-06-12 15:02:17

2 réponses

je pense que c'est juste R "enregistrer", car il existe d'autres registres R8 - R15 sur x86-64, et R est un préfixe commun sur de nombreuses architectures des processeurs lorsque les registres sont numérotées.

17
répondu Paul R 2012-06-12 11:09:54

les processeurs Intel x86 d'origine, le processeur 8080, étaient des processeurs 8 bits conçus pour des applications telles que les applications spéciales, les petits ordinateurs (caisses enregistreuses par exemple) ou les contrôleurs d'équipement plutôt que les ordinateurs à usage général (les concurrents incluaient le Motorola 6800). La famille de processeurs 8086 suivante (8086 et 8088 à moindre coût) étaient des microprocesseurs 16 bits qui ont continué L'architecture Intel 8080 tout en l'étendant avec des ajouts 16 bits avec un oeil vers plus fins générales du processeur.

Les processeurs Intel 8080 et Intel 8086 avaient un nombre limité de registres, dont la plupart avaient des fonctions spéciales, de sorte qu'ils avaient des noms spécifiques tels que A, B ou AX, BX dans leur langage d'assemblage (les concurrents tels que le Motorola 6800 avaient des conventions similaires). Les ordinateurs polyvalents comme la famille IBM 360/370 ou le DEC VAX utilisaient des noms plus génériques pour des composants comme les registres (par exemple R0, R1, etc.) depuis les registres étaient d'usage général (Motorola 68000 processeur 32 bits utilisé dans de nombreux postes de travail haut de gamme dans les années 1980 était similaire avec huit registres de données nommés D0 à D7).

comme Intel a continué à développer le processeur x86 au cours des années depuis les années 1970, il a également essayé de maintenir la compatibilité à rebours, même si les applications cibles de la x86 est passé des applications spécialisées, micro-contrôleur à des ordinateurs polyvalents. Au cours de cette évolution, le nombre de registres Intel a également introduit L'idée de modes de fonctionnement de la puce de processeur avec le 80286 pour aider à rétrocompatibilité.

avec les processeurs 64 bits, Intel avait besoin d'un moyen d'identifier un transfert 64 bits par rapport à un transfert 32 bits ou un autre transfert dans le langage assembleur. Dans le même temps, Intel introduisait des registres supplémentaires à usage général. Utilisation d'un nom d'industrie commun convention pour Registre universel, la lettre R, suivie d'un numéro était une décision facile.

cependant, Intel devait également maintenir la compatibilité ascendante pour les registres plus anciens. Ainsi, la lettre R a été utilisée comme préfixe pour le nom du registre 16 bits, tout comme pour les processeurs 32 bits, la lettre E a été utilisée comme préfixe pour le nom du registre 16 bits. En même temps, la conception des opérations de Registre 64 bits a été faite un peu différemment de ce qui a été fait pour les 32 bits. registre des opérations pour les générations précédentes.

avec le passage du processeur 8 bits au processeur 16 bits, les registres ont été étendus de 8 bits à 16 bits de sorte que les noms ont la lettre X après le nom de registre tel que AX, BX, etc. Ces registres peuvent être traités comme deux registres de 8 bits (16 bits de registre AX était composé de 8 bits AH et 8 bits AL où le H représente les bits élevés ou les plus significatifs du registre AX et L représente les bits faibles ou les moins significatifs de l'AX inscrire.)

avec le changement de processeur de 16 bits à 32 bits, les registres ont été étendus de 16 bits à 32 bits de sorte que les noms ont la lettre E comme préfixe tel que EAX, EBX, etc. Ces registres peuvent être traités comme ayant deux composants séparés de 16 bits (les moins significatifs 16 bits auxquels on accède en utilisant le nom de 16 bits tel que EAX -> AX, EBX -> BX, etc.) ou quatre registres de 8 bits (moins significatifs 16 bits accessibles sous forme de deux registres de 8 bits tels que EAX -> AH et AL, EBX -> BH et BL, etc.) lors du changement de registre et des opérations bitwise ont été utilisées pour déplacer les valeurs de 16 bits entre les 16 bits supérieurs et les 16 bits inférieurs d'un registre de 32 bits tels que EAX, EBX, etc. Cela maintenait, dans une certaine mesure, ce qui avait été fait avec le changement de 8 bits à 16 bits, mais l'accès direct aux 16 bits supérieurs des 32 bits n'était pas disponible de la même manière que l'accès direct aux 8 bits supérieurs des 16 bits dans le 8086/8080 avait été fourni.

Register operands in 64-bit mode can be any of the following:
• 64-bit general-purpose registers (RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, or R8-R15)
• 32-bit general-purpose registers (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, or R8D-R15D)
• 16-bit general-purpose registers (AX, BX, CX, DX, SI, DI, SP, BP, or R8W-R15W)
• 8-bit general-purpose registers: AL, BL, CL, DL, SIL, DIL, SPL, BPL, and R8L-R15L are available using REX
prefixes; AL, BL, CL, DL, AH, BH, CH, DH are available without using REX prefixes.
• Segment registers (CS, DS, SS, ES, FS, and GS)
• RFLAGS register
• x87 FPU registers (ST0 through ST7, status word, control word, tag word, data operand pointer, and instruction
pointer)
• MMX registers (MM0 through MM7)
• XMM registers (XMM0 through XMM15) and the MXCSR register
• Control registers (CR0, CR2, CR3, CR4, and CR8) and system table pointer registers (GDTR, LDTR, IDTR, and
task register)
• Debug registers (DR0, DR1, DR2, DR3, DR6, and DR7)
• MSR registers
• RDX:RAX register pair representing a 128-bit operand

Voir la question et la réponse de x86_64 registres rax/eax/ax/al écrasement complet le contenu d'un registre ainsi que pourquoi la plupart des instructions x64 mettent à zéro la partie supérieure d'un registre 32 bits qui fournissent quelques explications sur la façon dont l'opération de Registre 64 bits diffère de l'opération de registre 32 bits.

5
répondu Richard Chambers 2017-05-23 12:02:27