Académique Documents
Professionnel Documents
Culture Documents
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.
3
4
Format standard d’une instruction
Label: Mnémonique Opérandes ;commentaire
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