Quels sont les noms des nouveaux registres de processeurs x86 64?

Où puis-je trouver les noms des nouveaux registres pour l'assemblage sur cette architecture?

Je fais référence à des registres dans X86 comme EAX, ESP, EBX, etc. Mais je les voudrais en 64 bits.

Je ne pense pas qu'ils soient les mêmes que lorsque je désassemble mon code C, j'obtiens des r au lieu de e.

45

4 réponses

Les vieux registres 32 bits ont été étendue à 64 bits, le r registres (rax, rbx, rsp et ainsi de suite).

En outre, il existe des registres à usage général supplémentaires r8 à r15 qui peuvent également être consultés comme (par exemple) r8d, r8w et r8b (le mot double 32 bits inférieur, le mot 16 bits et l'octet 8 bits respectivement).

L'octet élevé des anciens registres 16 bits est toujours accessible, dans de nombreuses circonstances, comme ah, bh, et ainsi de suite, mais cela semble ce n'est pas le cas pour les registres r8 à r15. Il y a quelques nouveaux encodages d'instructions , en particulier ceux qui utilisent le préfixe REX, qui ne peuvent pas accéder à ces octets élevés, mais d'autres sont toujours libres de les utiliser.

En outre, il y a de nouveaux registres SSE, xmm8 bien que xmm15.

Les registres eip et flags ont également été étendus à rip et rflags.

Voir page wikipedia et MSDN pour plus d' détail.

Que ceux-ci soient pris en charge dans le mot-clé asm pour un compilateur C particulier, Je ne pourrais pas le dire. Le peu d'assemblage que je fais (et il devient environ un jour par an) se fait en assemblage plutôt Qu'en C.

64
répondu paxdiablo 2014-12-29 09:54:01

La documentation MSDN contient des informations sur les registres x64.

X64 étend les 8 usages généraux de x64 registres à 64 bits, et ajoute 8 nouveaux Registres 64 bits. Les registres 64 bits des noms commençant par "r", donc pour exemple l'extension 64 bits d'eax est appelé rax. Les nouveaux registres sont nommé r8 à r15.

Les 32 bits inférieurs, 16 bits et 8 bits de chaque registre sont directement adressable dans les opérandes. Cela comprend registres, comme esi, dont le 8 inférieur les bits n'étaient pas adressables auparavant. Le tableau suivant spécifie noms de langage assembleur pour le bas parties de registres 64 bits.

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b
86
répondu RRUZ 2017-02-04 23:29:05

X64 étend les registres à usage général 32 bits comme suit:

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

X64 ajoute également les registres à usage général 64 bits suivants:

R8, R9, R10, R11, R12, R13, R14, R15

De plus, SSE fait partie de la spécification X64, de sorte que les registres vectoriels xmm0-xmm15 sont également disponibles

Vous pouvez trouver quelques informations de base sur l'architecture à Wikipedia / x86-64 ou aller sur le site Web D'Intel.

8
répondu brainiac 2012-10-19 10:00:34

Où puis-je trouver les noms des nouveaux registres pour l'assemblage sur cette architecture.

Dans le manuel du processeur "Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture", par exemple version 253665-053US :

  • recherche "registres"
  • la première correspondance est l'index "3.4 basic program EXECUTION REGISTER"
  • deux éléments ci-dessous " 3.4.1.1 registres à usage général en 64 bits Le Mode"

Sur cette section:

Si une taille d'opérande 64 bits est spécifiée: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8-R15 sont disponibles. R8D-R 15D / R8-R15 représentent huit nouveaux registres à usage général.

Rappel: le mode 64 bits est le mode "normal" dans x86-64. L'autre mode principal est "mode de compatibilité" qui émule IA32.

Si vous continuez à chercher "register" sur la table des matières, vous trouverez également des sections sur" number crushing " registres pour flottant point et SIMD dispersés dans le manuel:

  • 8.1.2 - X87 FPU Data Registers (STx)
  • 9.9.2 - MMX registres
  • 10.2.2 - registres XMM
  • 14.1.1-256-Bit large SIMD Registre soutien (YMM)

Il y a beaucoup plus de registres de contrôle qui ont divers effets secondaires et ne peuvent généralement pas être écrits sauf si vous voulez ces effets (et nécessitent souvent anneau 0). Ceux-ci sont résumés dans " Volume 3 System Programming Guide - 2.1.6 Registres Du Système", ce qui est plus pour les développeurs OS.

Une bonne approche empirique consiste à exécuter info all-registers dans GDB: Comment imprimer enregistrer les valeurs dans gdb?

4