ASM NASM x64
Documentations:
https://www.tutorialspoint.com/assembly_programming/index.htm
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.