|
TROISIEME PARTIE
LE LANGAGE ASSEMBLEUR |
|
Remarques préliminaires :
1. L’instruction NOP (« No Operation ») Syntaxe : NOP Description : Ne fait rien ! Mais alors RIEN ! Que dalle ! Niet ! 2. L’instruction MOV (« Move ») Syntaxe : MOV Destination, Source Description : Copie le contenu de Source dans Destination. Mouvements autorisés : MOV Registre général, Registre quelconque MOV Mémoire, Registre quelconque MOV Registre général, Mémoire MOV Registre général, Constante MOV Mémoire, Constante MOV Registre de segment, Registre général Remarques : Source et Destination doivent avoir la même taille. On ne peut charger dans un registre de segment que le contenu d’un registre général (SI, DI et BP sont considérés ici comme des registres généraux). Exemples : MOV AX, 5 MOV ES, DX MOV AL, [Variable1] ;Copie un octet car AL contient 8 bits MOV [Variable2], DS ;Copie un word car DS contient 16 bits MOV word ptr [Variable3], 12 ;Ici, on spécifie que la variable est un word 3. L’instruction XCHG (« Exchange ») Syntaxe : XCHG Destination, Source Description : Echange les contenus de Source et de Destination. Mouvements autorisés : XCHG Registre général, Registre général XCHG Registre général, Mémoire XCHG Mémoire, Registre général 4. L’instruction JMP (« Jump ») Syntaxe : JMP MonLabel Description : Saute à l’instruction pointée par MonLabel. 5. L’opérateur CMP (« Compare ») Syntaxe : CMP Destination, Source Description : Cet opérateur sert à comparer deux nombres : Source et Destination. C'est le registre des indicateurs qui contient les résultats de la comparaison. Ni Source ni Destination ne sont modifiés. Indicateurs affectés : AF, CF, OF, PF, SF, ZF Remarque : Cet opérateur effectue en fait une soustraction mais contrairement à SUB, le résultat n’est pas sauvegardé. Le programme doit pouvoir réagir en fonction des résultats de la comparaison. Pour cela, on utilise les sauts conditionnels (voir ci-dessous). 6. Les instructions de saut conditionnel Les sauts conditionnels sont terriblement importants car ils permettent au programme de faire des choix en fonction des données. Un saut conditionnel n’est effectué qu’à certaines conditions portant sur les flags (par exemple : CF = 1 ou ZF = 0). Certains mnémoniques de sauts conditionnels sont totalement équivalents, c’est-à-dire qu’ils représentent le même opcode hexadécimal. C’est pour aider le programmeur qu’ils existent parfois sous plusieurs formes. a) les sauts de comparaison
Exemple :
Mnémonique équivalent : JZ (« Jump if Zero »)
Exemple :
Mnémonique équivalent : JNLE (« Jump if Not Less Or Equal »)
Mnémonique équivalent : JNL (« Jump if Not Less »)
Mnémonique équivalent : JNGE (« Jump if Not Greater Or Equal »)
Mnémonique équivalent : JNG (« Jump if Not Greater »)
Mnémonique équivalent : JNBE (« Jump if Not Below Or Equal »)
Mnémonique équivalent : JNB (« Jump if Not Below »)
Mnémonique équivalent : JNAE (« Jump if Not Above Or Equal »)
Mnémonique équivalent : JNA (« Jump if Not Above ») b) les sauts de test sur les flags
Ces instructions testent un flag unique et exécutent ou non le saut selon la valeur de ce flag.
Remarques : Ce mnémonique correspond au même opcode que JB. Il est souvent employé pour vérifier que l’appel d’une interruption n’a pas déclenché d’erreur. Exemple :
Si l’appel de la fonction 3Eh de l’interruption 21H se solde par une erreur, alors la CF vaudra 1 et le saut sera accompli. Dans le cas opposé, l’exécution continuera normalement de manière linéaire.
c) le saut de test sur le registre CX
JCXZ (« Jump if CX = Zero ») fait un saut au label spécifié si et seulement si CX = 0.
|
Copyright © 2000-2012 - www.developpez.com