ASM NASM x64

ASM NASM x64

Documentations:

https://www.tutorialspoint.com/assembly_programming/index.htm

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf

http://warppipe.net/blog/teaching/architecture/assembler/

 

Registre:

          | RAX (64) | EAX (32) | AX (16) | AH (8) | AL (8) | // registre pour retourner une valeur
/* /!\ */ | RBX (64) | EBX (32) | BX (16) | BH (8) | BL (8) | // préserver pour la fonction appelante
/*  P4 */ | RCX (64) | ECX (32) | CX (16) | CH (8) | CL (8) | // paramètre 4 de fonction
/*  P3 */ | RDX (64) | EDX (32) | DX (16) | DH (8) | DL (8) | // paramètre 3 de fonction

/*  P2 */ | RSI (64) | ESI (32) | SI (16) | SIL (8) | // paramètre 2 de fonction
/*  P1 */ | RDI (64) | EDI (32) | DI (16) | DIL (8) | // paramètre 1 de fonction

/* /!\ */ | RBP (64) | EBP (32) | BP (16) | BPL (8) | // préserver pour la fonction appelante
          | RSP (64) | ESP (32) | SP (16) | SPL (8)

/*  P5 */ | R8 (64)  | R8D (32)  | R8W (16)  | R8B (8) | // paramètre 5 de fonction
/*  P6 */ | R9 (64)  | R9D (32)  | R9W (16)  | R9B (8) | // paramètre 6 de fonction
          | R10 (64) | R10D (32) | R10W (16) | R10B (8)
          | R11 (64) | R11D (32) | R11W (16) | R11B (8)
/* /!\ */ | R12 (64) | R12D (32) | R12W (16) | R12B (8) | // préserver pour la fonction appelante
/* /!\ */ | R13 (64) | R13D (32) | R13W (16) | R13B (8) | // préserver pour la fonction appelante
/* /!\ */ | R14 (64) | R14D (32) | R14W (16) | R14B (8) | // préserver pour la fonction appelante
/* /!\ */ | R15 (64) | R15D (32) | R15W (16) | R15B (8) | // préserver pour la fonction appelante


Repeat String Operation:

Usage:

[DF] [REP] [OPERATION]
// Répétion (REP):
REP     | // répétition inconditionnelle qui répète l'opération jusqu'à ce que CX == 0
REPE    | // répétition conditionnelle qui répète l'opération tant que le flag zéro indique égal ou CX == 0
REPZ    | // répétition conditionnelle qui répète l'opération tant que le flag zéro indique zéro ou CX == 0
REPNE   | // répétition conditionnelle qui répète l'opération tant que le flag zéro n'indique pas égal ou CX == 0
REPNZ   | // répétition conditionnelle qui répète l'opération tant que le flag zéro n'indique pas zéro ou CX == 0

// Flag de direction (DF):
// Le drapeau de direction (DF) détermine le sens de l'opération.
CLD     | // DF = 0 -> opération de gauche à droite.
STD     | // DF = 1 -> opération de droite à gauche.

// Opération basique:
MOVS    |   RDI | RSI
            // l'instruction MOVS est utilisée pour copier un élément de données (BYTE, WORD ou DWORD)
            // à partir de la chaîne source vers la chaîne de destination.
// -----------------------------------------------------------------------------------------------------------------------
LODS    |   AX | RSI
            // l'instruction LODS est utilisée pour charger une chaîne dans la mémoire.
// -----------------------------------------------------------------------------------------------------------------------
STOS    |   RDI | AX
            // l'instruction STOS est utilisée pour sauvegarder en mémoire
            // AL (pour les octets - STOSB),
            // AX (pour les mots - STOSW)
            // EAX (pour) STOSD - doubles mots
            // vers la chaîne de destination, pointée par ES:DI en mémoire.
// -----------------------------------------------------------------------------------------------------------------------
CMPS    |   RSI | RDI
            // l'instruction CMPS est utilisée pour comparer deux chaînes.
            // Cette instruction compare deux éléments de données d'un BYTE, WORD ou DWORD, pointé DS:SI et ES:DI
            // et fixe les flags en conséquence
// -----------------------------------------------------------------------------------------------------------------------
SCAS    |   RDI | AX
            // l'instruction SCAS est utilisée pour la recherche d'un caractère ou un ensemble de caractères dans une chaîne.
            // l'élément de données à rechercher doit être dans les registres AL (pour SCASB), AX (pour SCASW)
            // ou EAX (pour SCASD). La chaîne à rechercher doit être en mémoire et pointer par l'ES: DI (ou EDI) inscrire.

 

Partager

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *