Vous êtes sur la page 1sur 17

Assembleur

Liste des registres les plus utilisés


A. Registres généraux
• AX (A pour accumulateur): joue le rôle d’opérande implicite dans
plusieurs opérations: MUL, DIV, INC, etc.
• CX (C pour compteur): est utilisé pour les boucles (instruction LOOP).
• DX: utilisé dans les multiplications et divisions comme registre d’extension.
• SI (Source Index): souvent utilisé comme pointeur sur une adresse
mémoire (exemple: MOV AL, [SI]). Il est très utilisée avec les instructions
de traitement de chaînes de caractères (LODS).
• DI (Destination Index): pareil que SI (instruction STOS)
• BP (base pointeur): sert de pointeur sur la base de la pile, et permet
d’atteindre n’importe quel élément de la pile (exemple:
MOV AX,[BP+2]).
• SP (Stack pointer): pointe sur le sommet de la pile; son contenu est
automatiquement changé par les instructions PUSH et POP.

2
B. Registres spéciaux
• IP (Instruction pointeur): contient l’adresse de l’instruction qui suit celle
qui est en cours d’exécution.
• DS (Data Segment): Pointe sur le début du segment qui contient les
données
• CS (Code Segment): Pointe sur le segment qui contient le code du
programme.
• ES (Extended Segment) : permet de pointer sur un segment
supplémentaire défini par le programmeur. Il se charge par l’intermédiaire
de AX, comme pour DS.
• SS (Stack Segment): segment contenant la pile.

C. Registre indicateur : utilisé pour sauvegarder des états particuliers du


microprocesseur en référence à la dernière instruction exécutée. Quelques
bits seulement de ce registre ont une signification sont nommés: CF
(retenue), OF (débordement), etc.

3
4
Format standard d’une instruction
Label: Mnémonique Opérandes ;commentaire

Label: est un identificateur permettant de désigner un endroit dans le code


source, soit une instruction, soit une donnée. Si le label est placé avant une
instruction, on fait référence à l’adresse de cette instruction. Si c’est avant
une donnée, on fait référence à l’adresse de cette instruction.
Le label de code doit se terminer par deux points (:). Il sert général comme
destinations des instructions ou des retour de début des boucles de
répétition.
Le label de donnée ne contient pas les deux points(:) à la fin. Il sert dans ce
cas là comme identificateur.

5
• Mnémonique (des instructions): il sert à identifier
une instruction donnée. Quelques instructions de
base sont résumées dans la prochaine section.
• Opérandes: une instruction assembleur peut avoir
de 0 à 3 opérandes. Chaque opérande peut être le
nom d’un registre, un opérande mémoire, une
expression constante ou le nom d’un périphérique
entrée/sortie.
• Commentaire: précédé du point-virgule (;). Il sert à à
ajouter des informations explicatives au sujet du
fonctionnement du programme ou de l’instruction
correspondante.

6
Quelques instructions de base-1
• Affectations
; Registres <-- Valeurs
MOV AX, 65535 ; (décimal)
MOV Cl, 01101b ; (binaire)
MOV DH, 0FAh ; (hexa)
; Entre registres
MOV AX, BX
MOV CL, DH
; Entre Registres et Variables
MOV CX, variable_de_deux_octets
MOV variable_de_un_octet, DL
;Registres <-- Adresses Mémoire
Mov AX, Offset variable ; AX <- adresse de variable
Mov CX, [ 5Ah ] ; CX <- valeur à l'adresse 5A en hexa

7
Quelques instructions de base- 2
• Arithmétique
; Incrémentation
INC AX ; AX <- AX + 1
Inc ma_variable
; Décrémentation
DEC AX
Dec ma_variable
; Addition
ADD AX, 5 ; AX <- AX + 5
ADD BH, toto ; BH <- BH + toto
Add toto, Cx ; toto <- toto + Cx
; Soustraction
SUB AX, 5 ; AX <- AX – 5
SUB BH, toto ; BH <- BH – toto
SUB toto, CX ; toto <- toto - CX

8
Quelques instructions de base-3
• Logique
; AND bit à bit
MOV AH, 0101b ; AH <- 5
MOV BH, 1001b ; BH <- 9
AND AH, BH ; AH <- AH AND BH; AH vaut 0001b, soit 1
; OR bit à bit
MOV AH, 0101b ; AH <- 5
MOV BH, 1001b ; BH <- 9
Or AH, BH ; AH <- AH OR BH; AH vaut 1101b, soit 13 (8+4+1)
; XOR bit à bit
MOV AH, 0101b ; AH <- 5
MOV BH, 1001b ; BH <- 9
XOR Ah, BH ; AH <- AH XOR BH; AH vaut 1100b, soit 12 (8+4)
; NOT bit à bit
MOV AH, 0101b ; AH <- 5 Not AH ; AH <- NOT AH; AH vaut 1010b, soit 10 (8+2)

9
Quelques instructions de base-4
• Comparaisons :
Toutes les comparaisons se font à l'aide de l'instruction CMP.
On utilise ensuite les instructions de saut conditionnel:
Jump if Equal,
JMP if Greater, ...
Il faut définir des labels (étiquettes): les endroits dans le programme où va sauter si le
test est vérifié (comme les GOTO en Fortran).
; Egalité (Jump if Equal)
CMP AX, 5
JE label_1
; Différence (Jump if Not Equal)
CMP AX, ma_variable
JNE label_2
;Inférieur, Supérieur, Inf. ou égal, Sup. ou égal
; (Jump if Lower, Greater, Lower or Equal, Greater or Equal)
CMP CH, 0
JL label_1
CMP DH, Ah
JG label_2
CMP AL, 01001b
JLE label_3

10
CMP variable, 65
JGE label_4
Label_1: instructions...
Label_2: instructions...
Label_3: instructions...
Label_4: instructions...
; Saut non conditionnel :
JMP label_1

Remarque: CMP est identique à l’instruction SUB, mais ne produit pas de résultat. Il
positionne cependant les flags. Il permet de sauter à un label qui est à une adresse
de 16 bits. Les sauts à un label sont toujours courts (à peu prés de 127octets). Il
faut donc prendre garde que ce label puisse être atteint.

11
12
JZ  Saut si zéro.   ZF = 1 JNZ 
JE Saut si égal. JNE
JC  Saut si Retenue (inférieur).   CF = 1 JNC 
JB  Saut si inférieur. 
JNAE Saut si ni supérieur ni égal.
JS Saut si signe négatif.  SF = 1 JNS
JO Saut si débordement.  OF = 1 JNO
JPE  Saut si parité paire.   PF = 1 JPO
JP Saut si parité.
JNZ  Saut si pas zéro.   ZF = 0 JZ 
JNE Saut si différent.
JNC  Saut si pas de retenue.   CF = 0 JC 
JNB  Saut si pas inférieur. 
JAE Saut si supérieur ou égal.
JNS Saut si aucun signe (positif).  SF = 0 JS
JNO Saut si pas de débordement.  OF = 0 JO
JPO  Saut si parité impaire.  PF = 0 JPE 
Djamal Rebaïne 13
JNP Saut si pas de parité.
Modes d’adressage
Un mode d'adressage est un moyen qui permet au
microprocesseur d'avoir accès à une donnée. Cette
donnée peut être un nombre quelconque dont on aura
besoin dans le programme, un nombre qui se trouve
déjà dans un registre, ou encore un nombre qui se
trouve écrit quelque part en mémoire.
• La connaissance des principaux modes d'adressage
est nécessaire car elle permet d'écrire les
programmes de la façon la plus courte, la plus simple
et la plus lisible possible.

14
Modes d’adressage
• Mode immédiat
L’opérande est codée avec l’instruction
mov AX, 568
• Mode registre
L’opérande est un registre de donnée ou d’adresse
mov AX,BX
• Mode mémoire direct
L’opérande est désigné par l’adresse donnée dans l’instruction
mov [0hC040],AL
mov DS :[0hC040],AL
mov CS:var2,AX
mais pas
mov 0hFE15 :var2,AX

15
Modes d’adressage pour accéder
aux données
• Mode mémoire indirect
L’opérande est désignée par une adresse placée dans les
registres d’adresses donnée dans l’instruction
mov AX,[SI] BX,BP,SI,DI peuvent servir de registre
pointeur
1. Indirect avec déplacement
L’adresse = contenu du registre d’adresse + déplacement (le
registre d’adresse n’est pas modifié)
mov AX, [DI]
mov BX,[DI+6]

16
Modes d’adressage pour accéder
aux données
2. Indirect avec index
L’adresse = contenu du registre d’adresse +
contenu du registre d’index (le registre
d’adresse n’est pas modifié)
mov [BP][DI],AX
les couples possibles sont BP-DI,
BP-SI, BX-DI, BX-SI

17

Vous aimerez peut-être aussi