14/05/2022
Révision
2021-2022
Soustraction des binaires positifs (bis)
❑ Soustraire 17310 à 21710
❑ Etape 1 : Traduire en binaire
Décimal Binaire Complément à 1 Complément à 2
217 11010101
11011001 00100110 00100111
173 10101101 01010010 01010011
01011110
❑ Etape 2 : Effectuer l’addition
Addition binaire Soustraction décimale
1 1 1 1 1 1 -1
-1
1 1 0 1 0
1 1 0 1
0 1 7
22 11
11 37
+ 0 1 0 1 1
0 1 1 0
0 1 –– 11 767 3
23
1 0 0 1 1
0 0
1 0 0
1 1 0
1 0 44 44
1
14/05/2022
Les binaires à virgule flottante
Conversion binaire IEEE 754 vers décimal réel
◼ Soit N = 1 10111010 101000000000000000000002
◼ N est codé en simple précision donc
◼ taille(mantisse) = 23
◼ biais = 127
1 10111010 10100000000000000000000
-1 186 – 127 (1 + 2-1 + 2-3)259
=
(1 + 0.5 + 0.125)259
N = -1.625 259
Valeurs des Registres
On considère que la valeur de IP est 0100. Compléter le tableau suivant :
AL AH BL BH DX IP CF OF
MOV AX, 07BE8H E8 8B 00 00 0000 0103 0 0
MOV BX, 0EA71H 71 EA 0106 0 0
ADD AX, BX 59 76 0108 1 1
MOV BX, 010h 10 00 010B 1 1
MUL BX 90 65 0007 010D 1 1
2
14/05/2022
Valeurs des Registres
On considère que la valeur de IP est 0100. Compléter le tableau suivant :
AL AH BL BH DX IP CF OF
MOV AX, 07BE8H E8 8B 00 00 0000 0103 0 0
MOV BX, 0EA71H 71 EA 0106 0 0
ADD AX, BX 59 76 0108 1 1
MOV BX, 010h 10 00 010B 1 1
MUL BX 90 65 0007 010D 1 1
L’instruction MOV
Commenter chacune des instructions suivantes :
MOV AX, 0B800h
MOV DS, AX
MOV CL, 'A'
MOV CH, 11011111b ;
MOV BX, 15Eh
MOV [BX], CX
3
14/05/2022
L’instruction MOV
Commenter chacune des instructions suivantes :
MOVMOV AX, 0B800h
AX, 0B800h ; Affecter à AX la valeur hexadécimale de B800h
MOVMOV DS, AX
DS, AX ; Copier la valeur de AX à DS.
MOVMOV CL, 'A'
CL, 'A' ; Affecter à CL le code ASCII de 'A', qui est 41h.
MOVMOV CH, 11011111b; Affecter à CH la valeur binaire 11011111 (DF).
CH, 11011111b
MOVMOV
BX, 15Eh
BX, 15Eh ; Affecter à BX la valeur 15Eh.
MOVMO
[BX],V CX
[BX], CX ; Copier le contenu de CX à l’emplacement mémoire B800:015E
ADD/ADC/SHR/SHL
Donner ligne par ligne le contenu des registres manipulés ainsi que celui de l’indicateur CF
AL BX CX CF
MOV BX, 8193 2001
MOV AL,81 51
MOV CL,82 0052
ADC AL,CL A3 0
SHR AL,1 51 1
ADC CL,AL 00A4 0
ADD AL,0F6h 47 1
SHL BH,1 4001 0
4
14/05/2022
ADD/ADC/SHR/SHL
Donner ligne par ligne le contenu des registres manipulés ainsi que celui de l’indicateur CF
AL BX CX CF
MOV BX, 8193 2001 0
MOV AL,81 51 0
MOV CL,82 0052 0
ADC AL,CL A3 0
SHR AL,1 51 1
ADC CL,AL 00A4 0
ADD AL,0F6h 47 1
SHL BH,1 4001 0
NB: Voir SUB/SBB/SAR/SAL
ADD/ADC/SHR/SHL
Donner ligne par ligne le contenu des registres manipulés ainsi que celui de l’indicateur CF et SF
AL BL CF SF
STC
MOV AL, 13
MOV BL, 7
SUB AL,BL
CMC
SBB AL,BL
5
14/05/2022
ADD/ADC/SHR/SHL
Donner ligne par ligne le contenu des registres manipulés ainsi que celui de l’indicateur CF et SF
AL BL CF SF
STC 1
MOV AL, 13 0D 1
MOV BL, 7 07 1
SUB AL,BL 06 0
CMC 1
SBB AL,BL FE 1 1
Exercices
Exercice 1
Supposons que DS = 1000h; SS = 2000h; ES = 3000h; BX = 4000h; SI = 5000h; DI
= 6000h et BP = 7000h.
Trouver l'adresse mémoire à partir de quelle le 8086 accède aux données lors de
l'exécution de chacun des instructions suivantes :
1. MOV AX, [BX]
2. MOV BX, [SI]
3. MOV AL, [DI]
4. MOV BH, SS: [SI]
5. MOV CX, ES: [DI]
6. MOV AX, [BX+DI]
7. MOV AH, [BX+10]
8. MOV CX, DS: [BP+4]
6
14/05/2022
Exercice
Adresse physique = adresse de segment * 10H + offset
MOV AX, [BX] DS*10H+BX=10000+4000=14000,14001 Car il va lire deux octets successifs
MOV BX, [SI] DS*10H+SI=10000+5000=15000,15001 Car il va lire deux octets successifs
MOV AL, [DI] DS*10H+DI=10000+6000=16000 Car il va lire un seule octet
MOV BH, SS: [SI] SS*10H+SI=20000+5000=25000 SS (Stack Segment) pointe sur la base du
segment qui contient la pile gérée par les
registres SP et BP ;
MOV CX, ES: [DI] ES*10H+DI=30000+6000=36000, 36001 ES (Extra Segment) pointe sur la base d'un
segment supplémentaire qui est généralement
utilisé pour compléter le segment de données.
MOV AX, [BX+DI] DS*10H+DI+BX=10000+6000+4000 Car il va lire deux octets successifs
=1A000, 1A001
MOV AH, [BX+10H] DS*10H+BX+10=10000+4000+10=14010 Car il va lire un seule octet
MOV CX, DS: DS*10H+BP+4=10000+7000+4 Car il va lire deux octets successifs
[BP+4]
=17004, 17005
Exercice2
Définir le type d’adressage pour chacune des instructions suivantes :
MOV CX, 10 immédiat
MOV DI, 0 immédiat
MOV AX, CD Registre
MOV AL, [7000h] Direct
MOV AL, 2345h La taille de la donnée dépasse la taille du registre
DEC CX implicite
ADD AX, [DI+0200h] Indexé avec déplacement = relatif indexée
ADD AX, [BX+0100h] Basé avec déplacement = relatif basée
MOV [0300h], AX direct
MOV CS, 3490h Le registre segment CS ne peut pas modifier directement
MOV CS, BH Le registre segment CS ne peut pas modifier directement
MOV IP, 20h Le registre IP ne peut pas modifier directement
MOV DS, 20h Le registre DS ne peut pas recevoir une valeur immédiate
MOV DS, AX Registre
7
14/05/2022
Exercice2
Définir le type d’adressage pour chacune des instructions suivantes :
MOV CX, 10 immédiat
MOV DI, 0 immédiat
MOV AX, CD Registre
MOV AL, [7000h] Direct
MOV AL, 2345h La taille de la donnée dépasse la taille du registre
DEC CX implicite
ADD AX, [DI+0200h] Indexé avec déplacement = relatif indexée
ADD AX, [BX+0100h] Basé avec déplacement = relatif basée
MOV [0300h], AX direct
MOV CS, 3490h Le registre segment CS ne peut pas modifier directement
MOV CS, BH Le registre segment CS ne peut pas modifier directement
MOV IP, 20h Le registre IP ne peut pas modifier directement
MOV DS, 20h Le registre DS ne peut pas recevoir une valeur immédiate
MOV DS, AX Registre