Pourquoi la rbp et la rsp appelés registres?

Selon Intel x64 les registres suivants sont appelés registres (RAX, RBX, RCX, RDX, RBP, RSI, RDI, le RPR et l'audi R8-R15) https://software.intel.com/en-us/articles/introduction-to-x64-assembly.

Dans l'article suivant, il est écrit que la RBP et la RSP sont à des fins spéciales registres (RBP point à la base de l'actuel cadre de la pile et la RSP pointer vers le haut de la stack frame).
https://www.recurse.com/blog/7-understanding-c-by-learning-assembly

Maintenant, j'ai deux déclarations contradictoires. Intel déclaration doit être de confiance, mais ce qui est correct et pourquoi est-RBP et la RSP appelé à usage général à tous ?

Merci pour toute aide.

Vous pouvez utiliser à la fois comme les registres, sens de l'habitude de l'arithmétique et logique instructions de travailler avec eux très bien. rbp est à peu près à usage général, le cadre, le pointeur de la chose, c'est juste de la convention.
Chaque registre a des-ness (sauf R8-R15), pour certaines instructions. Pour le RER, c'est spécial pour push/pop/call/ret, de sorte que la plupart de code n'utilise jamais pour rien. Mais dans le contrôle conditionnelle (pas comme les gestionnaires de signaux), vous n'avez pas pour l'utiliser pour un pointeur de pile. par exemple, vous pouvez l'utiliser pour lire un tableau dans une boucle avec pop, comme dans ce code-golf réponse. (J'ai utilisé esp dans le code 32 bits, mais même différence).
Je suppose que si vous élargir la définition de "caractère spécifique" pour l'encodage, même r13 est un peu spécial, mais elle n'est pas vraiment fonctionnel que vous pouvez toujours utiliser efficacement chaque mode d'adressage (même si l'assemblée est parfois mise caché dans un zéro de déplacement pour vous).
RBP peut être utilisé à des fins générales, avec -fomit-frame-pointer. Il est plus difficile pour un reer si[
R11 a un rôle spécial pour syscall

OriginalL'auteur Dennis | 2016-04-10