Quels sont les noms des nouveaux processeurs X86_64 registres?
Où puis-je trouver les noms des nouveaux registres pour le montage sur cette architecture?
Je me réfère aux registres en X86 comme EAX, ESP, EBX, etc. Mais j'aimerais qu'en 64 bits.
Je ne pense pas qu'ils sont les mêmes que quand j'ai démonter mon code en C, j'obtiens r s, à la place de "e".
- Les gars Comment puis-je savoir quels registres de corrélation entre les paramètres lors d'un appel système. Ive été de lecture et de documentation et n'ai pas trouvé de réponse claire.
- Notez que l'ancien supérieur de 8 bits des registres (ah, bh, etc) ne fonctionnent plus pour tous les opérateurs. par exemple,
inc ah
n'est pas valide en x64 parce que opcode qui a été réutilisé pour l'un des nouveaux 64 bits des registres. - notez également qu'avec le REX préfixe, le registre des codes pour ah bh ch dh devient le nouveau byte registres sil dil bpl spl
Vous devez vous connecter pour publier un commentaire.
Les vieux registres 32 bits ont été étendue à 64 bits, le
r
registres (rax
,rbx
,rsp
et ainsi de suite).En outre, il y a des extra registres de
r8
parr15
qui peut également être accessible en tant que (par exemple)r8d
,r8w
etr8b
(plus de 32 bits en double-mot, mot de 16 bits et 8 bits de l'octet, respectivement). Leb
suffixe est l'original d'AMD nomenclature, mais que vous pouvez parfois le voir écrit commel
(minusculesL
) pour "l'octet de poids faible".J'ai tendance à préférer le
b
suffixe moi-même (même si la faible octet registres sontal
,bl
, et ainsi de suite) car il correspond à lad/w = double/word
noms etl
pourrait être confondu aveclong
. Ou, pire encore, les chiffres1
, qui vous mène à la question de ce que le diable numéro de registre81
est 🙂La haute octets du vieux registres 16 bits sont toujours accessibles, dans de nombreuses circonstances, comme
ah
,bh
, et ainsi de suite (bien que cela ne semble pas être le cas pour les nouveauxr8
parr15
registres). Il y a quelques nouvelles instruction de codage, de en particulier ceux à l'aide de laREX
préfixe, qui ne peuvent pas accéder à ceux d'origine en haute octets, mais d'autres sont toujours libres de les utiliser.En outre, il existe de nouveaux registres SSE,
xmm8
sixmm15
.La
eip
eteflags
registres ont été étendus à l'rip
etrflags
(bien que le haut de 32 bits derflags
sont, pour l'instant, encore non utilisés).Voir le page wikipedia et MSDN pour plus de détails.
Si ceux-ci sont pris en charge dans le
asm
mot-clé pour un compilateur C, je ne pouvais pas le dire. Ce petit montage que je fais (et il est de plus en une seule journée par an) se fait en assemblée plutôt que de C.Connexes:
e
signifie étendu etr
signifie vraiment élargie 🙂REX
préfixe vous ne pouvez pas utiliser les moitiés supérieure (ah
,bh
,ch
,dh
) parce qu'ils sont mappés sur les moitiés inférieures d'autres registres (si
,bp
,sp
,di
respectivement). Cela signifie que si vous avez une adresse stockée dansr8
vous ne pouvez pas déplacer le contenu deah
à cette adresse.sil
, cela n'affecte pas laah
contenu aller de l'avant.REX
préfixe ont le même problème. Préfixe != codage d'instruction.rep stos
a très différente de l'effet destos
sur son propre.sil
qui n'affecte pasah
...) sur mon commentaire ne s'applique pas, puisque je l'ai dit, la cartographie et pas d'aliasing. Bien sûr, ce n'est pas d'aliasing et c'est ce que j'ai dit lors de mon premier commentaire. Enfin, je suis d'accord que la dernière partie est juste une question sémantique.rep stos
a très différente de l'effet destos
, mais lestos
instruction a exactement le même codage dans les deux cas,rep stos
a juste un préfixe.l
au lieu deb
sur certains manuels, par exempler8l
vsr8b
. Voir Pourquoi Apple n'utilisez R8l pour l'octet registres au lieu de R8b?r
etx
stand pour. Le consensus est que c'est juste "s'Inscrire", comme sur la plupart des RISC Isa avec orthogonales registres.La La documentation MSDN comprend des informations sur le x64 registres.
r8
~r15
sur mon intel x86-64 cpu, si elle fonctionne pour les 8 autres registres. Aussirax
~rdx
de soutien pour accéder à la 8 bits danshigh
mode, moyens d'accès les plus importants de 8 bits 16 bits mode, à l'aide deah
~dh
.mov ah, r8b
ou quelque chose? Vous ne pouvez pas utiliser un haut-8 s'inscrire auprès d'un REX préfixe.REX mov ah, 0
estmov spl, 0
, et ainsi de suite (les codages pourAH/CH/DH/BH
direspl/bpl/sil/dil
quand il y a un REX préfixe (dans cet ordre dans le code machine)l
au lieu deb
sur certains manuels, par exempler8l
vsr8b
. Voir Pourquoi Apple n'utilisez R8l pour l'octet registres au lieu de R8b?X64 étend la version 32 bits de registres comme suit:
X64 ajoute également le 64 bits des registres:
En outre, l'ESS fait partie de la version X64 de spécification, de sorte que le xmm0-xmm15 vecteur registres sont disponibles ainsi
Vous pouvez trouver des informations de base sur l'architecture à Wikipedia/X86-64 ou aller à Intel de site web.
Lisons le Intel manuel
Dans le manuel du processeur "Intel ® 64 et IA-32 Architectures Software developer's Manual Volume 1: Architecture de Base", par exemple version 253665-053US:
Sur cette section:
Rappel: 64 bits mode est le mode "normal" en x86-64. L'autre mode principal est le "mode de compatibilité" qui émule IA32.
Si vous continuez la recherche pour "s'inscrire" sur la table des matières, vous trouverez également des articles sur le "nombre de concassage" registres à virgule flottante et SIMD dispersés dans le manuel:
Il y a beaucoup plus de contrôle des registres qui ont divers effets secondaires et peuvent généralement pas être écrite à moins que vous voulez que ces effets (et souvent exiger de l'anneau 0). Elles sont résumées dans le "Volume 3-Guide de Programmation Système
- 2.1.6 Système de Registres", qui est plus pour les OS développeurs.
Une bonne approche empirique consiste à exécuter
info all-registers
dans GDB: Comment imprimer enregistrer les valeurs dans GDB?