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.

Était-ce utile?

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?

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