Quels sont les noms des nouveaux registres de processeurs x86_64?
-
20-09-2019 - |
Question
Où puis-je trouver les noms des nouveaux registres pour le montage sur cette architecture?
Je fais référence aux registres à X86 comme EAX, ESP, EBX, etc. Mais je les aime en 64bit.
Je ne pense pas qu'ils sont les mêmes que quand je démonte mon code C, je reçois r au lieu de e années.
La solution
Les anciens registres de 32 bits a été étendue à 64 bits, les registres de r
(rax
, rbx
, rsp
et ainsi de suite).
En outre, il y a des registres à usage général supplémentaires r8
par r15
qui peut également être accessible en tant que (par exemple) r8d
, r8w
et r8b
(inférieur double mot de 32 bits, un mot de 16 bits et l'octet de 8 bits, respectivement, ). Le suffixe b
est la nomenclature AMD originale mais vous verrez parfois il écrit l
(inférieur L
de cas) pour « octet bas ».
J'ai tendance à préférer le suffixe b
moi (même si les registres actuels à faible octet sont al
, bl
, etc.) car elle correspond aux noms de d/w = double/word
et l
pourrait être confondu avec long
. Ou, pire encore, le chiffre 1
, qui vous conduira à la question ce que le diable numéro de registre 81
est: -)
Les hauts octets des anciens registres 16 bits sont toujours accessibles, dans de nombreuses circonstances, comme ah
, bh
, et ainsi de suite (bien que cela semble ne pas être le cas pour le nouveau r8
par les registres de r15
). Il y a quelques nouveaux encodages d'instruction, en particulier ceux qui utilisent le préfixe REX
, qui ne peut pas accéder à ces octets élevés d'origine, mais d'autres sont encore à les utiliser.
En outre, il y a quelques nouveaux registres SSE, xmm8
si xmm15
.
Les registres de eip
et eflags
ont également été étendues à rip
et rflags
(bien que les 32 bits de poids fort rflags
sont, pour l'instant, encore utilisé).
Voir la wikipedia et MSDN pour plus de détails.
Que ceux-ci sont pris en charge dans le mot-clé asm
pour un compilateur C particulier, je ne pouvais pas dire. Quel petit montage que je fais (et il devient environ un jour par an) se fait dans l'assemblage plutôt que C.
Related:
Autres conseils
Le documentation MSDN comprend des informations sur les registres x64.
étend x64 8 usage général x64 registres pour être 64 bits et ajoute 8 nouvelles des registres de 64 bits. Les registres 64 bits ont des noms commençant par « r », donc pour par exemple l'extension 64 bits de eax est appelé rax. Les nouveaux registres sont nommé par r8 r15.
Les 32 bits inférieurs, 16 bits et 8 bits de chaque registre sont directement adressable opérandes. Ceci comprend registres, comme esi, dont inférieure 8 les bits n'étaient pas auparavant adressable. Le tableau suivant indique la Les noms de langue d'assemblage pour la partie inférieure des parties de registres de 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
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 généraux 64 bits suivants:
R8, R9, R10, R11, R12, R13, R14, R15
En outre, SSE fait partie de la spécification X64, de sorte que les registres vectoriels xmm0-xmm15 sont disponibles ainsi
Vous pouvez trouver quelques informations de base sur l'architecture Wikipedia / x86-64 ou aller sur le site d'Intel.
Lisons le manuel Intel
Où puis-je trouver les noms des nouveaux registres pour le montage sur cette architecture.
Dans le manuel du processeur "Intel 64 et IA-32 Architectures Volume Manuel Software Developer 1: Architecture de base", par exemple Version 253665-053US :
- recherche de "registres"
- le premier match est l'indice "3.4 EXECUTION DU PROGRAMME DE BASE REGISTRE"
- deux éléments ci-dessous "3.4.1.1 Registres d'usage universel en mode 64 bits"
Sur cette section:
si une taille d'opérande 64 bits est spécifié: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RER, R8-R15 sont disponibles. R8D-R 15D / R8-R15 représentent huit nouveaux registres à usage général.
Rappel: mode 64 bits est le mode "normal" dans x86-64. L'autre mode principal est "mode de compatibilité" qui émule IA32.
Si vous continuez à la recherche de « registre » sur la table des matières, vous trouverez également des sections sur « nombre écrasantes » registres pour virgule flottante et SIMD dispersés dans le manuel:
- 8.1.2 - x87 FPU registres de données (STX)
- 9.9.2 - MMX Registres
- 10.2.2 - XMM Registres
- 14.1.1 - 256 bits large SIMD registre Support (YMM)
Il y a beaucoup plus de registres de contrôle qui ont des effets secondaires et ne peuvent généralement pas être écrits à moins que vous voulez que ces effets (et souvent 0 anneau besoin). Ceux-ci sont résumées dans le « Volume 3 Guide de programmation du système - 2.1.6 Registres du système », ce qui est plus pour les développeurs OS
. Une bonne approche empirique est de courir info all-registers
dans GDB: Comment imprimer registre valeurs GDB?