Vous êtes sur la page 1sur 21

Format d'une instruction

La structure la plus générale d’une instruction est la suivante :

L’opération est réalisée entre les 2 opérandes et le résultat est toujours


récupéré dans l’opérande de gauche.

Il y a aussi des instructions qui agissent sur un seul opérande :

Il y a aussi des instructions sans opérande.


Les opérandes peuvent être des registres, des constantes ou le contenu de
cases mémoire.
35
Jeu d'instructions
Le 8086 possède environ 350 instructions, on cite par exemple:

Instructions de Transfert (MOV, XCHG, ....)

Instructions Arithmétiques (ADD, SUB, MUL, DIV, ...)

Instruction de Branchement (JMP, Jxx, LOOP....)

Instructions Logiques (NOT, AND, OR, XOR, ...)

Instructions de Décalage (SHR, SHL, ROL, ROR, ...)

36
Instructions de Transfert (MOV, XCHG, ....)

37
MOV

MOV Od, Os : Copie l'opérande Source (Os) dans l'opérande


Destination (Od) [Od OS]

MOV [adr], [adr]


MOV Rseg, Rseg
38
XCHG

XCHG Od, Os : Échange l'opérande source (Os) avec l'opérande


destination (Od) [Od OS]

39
Instructions Arithmétiques

40
INSTRUCTIONS ARITHMÉTIQUES

Le 8086 permet d'effectuer les quatre opérations arithmétiques


de base: l'addition, la soustraction, la multiplication et la division.

Les opérations peuvent s'effectuer sur des nombres de 8 bits ou


de 16 bits signés ou non signés.

Les nombres signés sont représentés en complément à 2.

41
ADD

ADD Od, Os : additionne l'opérande source et l'opérande destination et


met le résultat dans l'opérande destination [OdOd+Os].

ADD [adr], [adr]


42
SUB
SUB Od, Os : Soustrait l'opérande source de l'opérande destination et
met le résultat dans l'opérande destination [Od  Od – Os].

43
Exercice d'application

Prog1.asm: Ecrire un programme assembleur réalisant les opérations


algorithmique suivantes avec les registres généraux:

A3 MOV AX,3


B101b MOV BX,101b
AA+B ADD AX,BX
C15h MOV CX,15h
D0FFh MOV DX,0FFh
CC+D ADD CX,DX
Peut-on écrire ces opérations sur 8 bits? Justifiez.
44
Exercice d'application "prog2.asm"

Effectuer à la main les opérations suivantes en complément à deux sur 8 bits:

 Convertir A=(+43)10 et B=(+100)10 en complément à deux hexadécimal.

 Effectuer la somme A+B en hexadécimal.

 Vérifier à l'aide de l'assembleur.


MOV AL,43 AL = 2Bh
MOV BL,100 BL = 64h
ADD AL,BL AL = 8Fh

45
Exercice d'application "prog2.asm"

Effectuer à la main les opérations suivantes en complément à deux sur 8 bits:

 A=(+43) 10 , Convertir B=(-100)10 en complément à deux hexadécimal.

 Effectuer la somme A +B en hexadécimal.

 Vérifier à l'aide de l'assembleur.

MOV AL,43 AL = 2Bh


MOV BL,-100 BL = 9Ch
ADD AL,BL AL = C7h

46
Exercice d'application "prog2.asm"
Effectuer à la main les opérations suivantes en complément à deux sur 16 bits:

 A=(+43), Convertir B=(-100)10 en complément à deux hexadécimal.

 Effectuer la somme A +B en hexadécimal.

 Vérifier à l'aide de l'assembleur.

MOV AX,43 AX = 002Bh


MOV BX,-100 BX = FF9Ch
ADD AX,BX AX = FFC7h

47
MUL/IMUL
MUL Op: Effectue une multiplication non signée entre l'accumulateur
(AL ou AX) et l'opérande Op. Le résultat de taille double est stocké dans
l'accumulateur et son extension (AH ou DX).
IMUL Os : identique à MUL excepté qu'une multiplication signée est
effectuée.

48
Exemple MUL "prog3.asm"
Multiplication non signée sur 8 bits:
MOV AL, 4 AL = 04h
• AXAL*AH MOV AH, 25 AH = 09h
MUL AH AX = 64h

Multiplication non signée sur 16 bits:

• AXAX*BX MOV BX, 435 BX = 01B3h


MOV AX, 2372 AX = 0944h
MUL BX DX:AX =000FBE8C

49
Exemple IMUL "prog3.asm"
Multiplication signée sur 8 bits:
MOV AL, -4 AL = 0FCh
• AXAL*AH MOV AH, 25 AH = 19h
IMUL AH AX = 0FF9Ch

Multiplication signée sur 16 bits:

• AXAX*BX MOV BX, -435 BX = 0FE4Dh


MOV AX, 2372 AX = 0944h
IMUL BX DX:AX = 0FFF04174h

50
DIV/IDIV
DIV Op: Effectue une division non signée de l'accumulateur (AL ou AX)
par l'opérande Op. Le quotient est récupéré dans le registre AL ou AX et
le reste dans le registre AH ou DX.
IDIV Op: Identique à DIV excepté qu'une division signée est effectuée.

51
Exemple DIV/IDIV "prog3.asm"
Division non signée sur 8 bits:
MOV AL, 16 AL = 01h
MOV BL, 3 BL = 03h
DIV BL AL = 05h AH=01h

Division signée sur 16 bits:

MOV BX, -435 BX = 0FE4Dh


MOV AX, 2372 AX = 0944h
IDIV BX AX =0FFFBh DX =00C5

52
Instructions de Branchement inconditionnel
JMP label: Effectue un saut (jump) vers le label spécifié.

Debut:
MOV AX, 9
JMP Fin
MOV AX,1
Fin:
MOV BX,2
53
JMP Debut
Instructions de branchement conditionnel

Un saut conditionnel n’est exécuté que si une certaine


condition est satisfaite, sinon l’exécution se poursuit
séquentiellement à l’instruction suivante.

La condition du saut porte sur l’état de l’un (ou plusieurs) des


indicateurs d’état (flags) du microprocesseur qui sont
positionnés en fonction du résultat de la dernière opération.

54
Branchements (sauts) arithmétiques
Les instructions de branchement suivent en général l’instruction de
comparaison CMP .

CMP op1, op2: Compare op1 et op2 et ne renvoi aucun résultat mais
permet de positionner les flags du registre d'état.
Condition Nombres signés Nombres non signés
A=B JE
A≠B JNE
A>B JG JA
A≥B JGE JAE
A< B JL JB
55 A≤B JLE JBE

Vous aimerez peut-être aussi