
FAQ AssembleurConsultez toutes les FAQ
Nombre d'auteurs : 8, nombre de questions : 50, dernière mise à jour : 29 avril 2007
Sommaire→F.A.Q. Assembleur x86 / 64→Généralités- Où trouver de la documentation pour la programmation x64 en Assembleur ?
- J'ai un processeur 64 bits, puis-je exécuter des programmes ou binaires 64 bits ?
- Y a-t-il de nouvelles instructions avec les processeurs x86 64 bits ?
- Les registres généraux sont-ils toujours les mêmes que sous 32 bits ?
- Quels sont les nouveaux registres généraux des processeurs x86 64 bits ?
- Quels sont les nouveaux registres autres que les registres généraux ?
- Intel : http://www.intel.com/products/processor/manuals/index.htm
- AMD : http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_875_7044,00.html
- AMD64 ABI (Application binary interface): http://www.x86-64.org/documentation/abi.pdf (concerne aussi les processeurs Intel, mais vise surtout Linux)
- x64 Software Convention (MSDN) : http://msdn2.microsoft.com/en-us/library/7kcdt6fy.aspx
- Gentle Introduction to x86-64 Assembly (Jan Hubicka) : http://www.x86-64.org/documentation/assembly.html
- Writing 64-bit programs (Jeremy Gordon) : http://www.jorgon.freeserve.co.uk/GoasmHelp/64bits.htm
- Under the hood, programming for 64-bit Windows (Matt Pietrek) : http://msdn.microsoft.com/msdnmag/issues/1100/hood/
Bien sûr, mais à une seule condition : si votre système d'exploitation est un système 64 bits !
Les processeurs 64 bits peuvent exécuter du code 16, 32 ou 64 bits mais c'est le système d'exploitation qui détermine dans quel mode d'exécution il peut exécuter du code.
Cela implique qu'un système d'exploitation 32 bits fonctionnant sur un processeur 64 bits ne pourra pas exécuter du code 64 bits.
N.B : Windows Vista 64 bits n'exécute plus les programmes 16 bits.
Les programmes 32 bits, eux, sont exécutés au travers de WOW64.
Une seule nouvelle instruction d'ordre "général" a fait son apparition : MOVSXD.
Certaines des instructions sont simplement étendues pour manipuler des données 64 bits tandis que d'autres ne sont plus disponibles dans le mode 64 bits.
Les processeurs de dernières générations apportent toutefois des instructions spécialisées, notamment au travers des jeux d'instructions SSE3 et SSSE3 et des instructions de virtualisation, mais ces instructions ne sont pas réservées spécifiquement au mode d'exécution 64 bits.
On trouve toujours les mêmes registres généraux que sous 32 et 16 bits.
Toutefois les registres ont été étendus à 64 bits.
Pour prendre un exemple avec EAX (qui, étendu à 64 bits, devient RAX) :
En mode 64 bits, on peut toujours accéder à :
- EAX : partie basse 32 bits (bits 0 à 31) de RAX.
- AX : partie basse 16 bits (bits 0 à 15) de EAX.
- AH : partie haute 8 bits (bits 8 à 15) de AX.
- AL : partie basse 8 bits (bit 0 à 7) de AX.
On ne peut ni accéder directement à la partie haute 16 bits de EAX, ni à la partie haute 32 bits de RAX.
Outre les registres 32 bits étendus à 64 bits, on trouve 8 nouveaux registres généraux. Les nouveaux registres généraux 64 bits, au nombre de 8, sont nommés de R8 à R15 et sont utilisables tout comme les autres registres généraux. On dénombre donc à présent les registres suivants :
- 16 registres 8 bits « bas » : AL, BL, CL, DL, SIL, DIL, BPL, SPL, R8B, R9B, R10B, R11B, R12B, R13B, R14B, R15B. [Avec ‘B' pour BYTE]. On notera ici que les parties 8 bits de RSI (SIL), RDI (DIL), RBP (BPL) et RSP (SPL) sont désormais accessibles directement (ce qui n'était pas le cas en 16 ou 32 bits où, par exemple, la partie 8 bits du registre ESI n'était pas accessible directement).
- 4 registres 8 bits « haut » : AH, BH, CH, DH (utilisable seulement dans un cas bien précis : quand un préfixe REX est présent).
- 16 registres 16 bits : AX, BX, CX, DX, DI, SI, BP, SP, R8W, R9W, R10W, R11W, R12W, R13W, R14W, R15W. [Avec ‘W' pour WORD]
- 16 registres 32 bits : EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, R8D, R9D, R10D, R11D, R12D, R13D, R14D, R15D. [Avec ‘D' pour DWORD].
- 16 registres 64 bits : RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14, R15.
On notera l'apparition ou l'extension des registres suivants :
- 8 nouveaux registres SSE : XMM8 à XMM15.
- Le passage d'EFLAG (registre de drapeaux) en 64 bits, qui devient : RFLAG.
- Le pointeur d'instruction (EIP en 32 bits) passe lui aussi en 64 bits et devient : RIP.
- 8 nouveaux registres système de contrôle : Cr8 à Cr15.
- 8 nouveaux registres de déboguage : Dr8 à Dr15.



