FAQ AssembleurConsultez toutes les FAQ
Nombre d'auteurs : 9, nombre de questions : 56, dernière mise à jour : 8 décembre 2017 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum Assembleur de Developpez.com et de l'expérience personnelle des auteurs. Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être exhaustive ; vous pouvez la compléter avec vos propres questions/réponses ou proposer des corrections ou des compléments à des questions/réponses existantes.
Nous espérons que cette FAQ saura répondre à un maximum de vos questions. Nous vous en souhaitons une bonne lecture.
L'équipe Assembleur de Developpez.com.
- 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 ?
- Apprendre l'assembleur (Benoit-M)
- Introduction à l'assembleur sous architecture Win32 (Lord Noteworthy)
- Introduction à l'assembleur GNU (Issam Abdallah)
- L'assembleur Intel avec NASM (Etienne Sauvage)
- Décodage du jeu d'instructions x86 / x86-64 (Neitsa)
- Assembleur et C/C++ (Sébastien Le Ray)
- Intel
- AMD
- x64 Software Convention (MSDN)
- Under the hood, programming for 64-bit Windows (Matt Pietrek)
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 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 (utilisables 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ébogage : Dr8 à Dr15.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.