Vous êtes sur la page 1sur 6

USTHB ARCHI 1

FEI / Dépt Informatique L2A / 2021-2022

Série d’exercices n° 2

Exercice 1 :
Si une adresse physique de branchement dans un programme donné est 5A230H quand CS=5200H, quelle serait
cette adresse physique quand CS devient égal à 7800H ?

Exercice 2 :
En considérant les conditions initiales suivantes du microprocesseur :
BX=0105H, DI=4506H, SI=00AH, BP=0540H, DS=4500H, SS=0100H, EA(x)=1234H, EA(y)=6789H
Calculer les adresses effectives et physiques pour les modes d’adressage suivants :
 mode immédiat
 mode registre (registre utilisé BX)
 mode registre indirect (registre utilisé BX)
 mode direct (variable utilisée x)
 mode base indexée (registres utilisés BP et DI)
 mode registre relatif (registre BX, variable x)
 mode base indexée relative (registres BX et SI, variable y)

Exercice 3 :
Interpréter les instructions assembleur suivantes :
 mov cl , [bx]
 mov cl , bx
 mov a650h , 20h
 mov a650h , [bp)
 mov ds , 1234h
 xchg bx , 9abch

Exercice 4 :
Ecrire en assembleur une séquence d’instructions qui réalise l’opération suivante :
W  X + Y +24 – Z
Où W, X, Y et Z sont des variables sur 32 bits.

Exercice 5 :
Soient les deux déclarations suivantes :
Byte_var db ‘BYTE’,12, -12, 3dup(0, ?, 2 dup(1, 2), ?)
Word_var dw 5 dup(0, 1, 2), ?, -5, ‘BY’, ‘TE’, 255H

Donner pour chacune des déclarations


 l’espace mémoire réservé et les valeurs initiales de chaque champ
 un schéma représentatif de la mémoire pour chacune des déclarations précédentes

Exercice 6 :
En supposant que le registre DS= 4ab8h et que le data segment correspondant est déclaré comme suit:

mes_données SEGMENT
budget dw 20, -30, 0f610h
poids db 3 dup(0a1h)
comptes dw 100 dup(0abch)
mes_données ENDS
a) donner la représentation mémoire du data segment mes_données,
b) en termes de temps d’exécution, que faut-il faire pour optimiser le temps d’exécution et combien
gagnerait-on si la fréquence du microprocesseur est 2 GHz.

Exercice 7 : (exercice donné en examen)


Soit le programme suivant :
mes_donnees SEGMENT
taille equ 128
tab dw taille dup(?)
compt db 0
new_tab dw taille dup(?)
mes_donnees ENDS

mon_code SEGMENT
assume cs: mon_code ,ds: mes_donnees
start: mov ax , mes_donnees
mov ds , ax
mov si ,0
mov cx , length tab
encore: mov ax , tab[si]
cmp ax , 0
jge positif
neg ax
inc compt
positif: mov new_tab[si] , ax
add si , 2
loop encore
mov ax , 4c00h
int 21h
mon_code ENDS
END start

Questions :

a) Donner la taille de l’espace réellement occupé par le segment mes_donnees


b) Quelle est l’adresse effective (l’offset) de la variable new_tab ?
c) Calculer l’espace réellement utilisé par le code segment
d) Générer le code machine de mov new_tab[si] , ax et mov ax , 4c00h
e) Que va contenir la variable compt après l’exécution du programme ?
f) Si on suppose que la fréquence du microprocesseur est 1GHz et qu’il y’a 50 éléments
négatifs dans le tableau tab, calculer en µsec le temps d’exécution du programme.
USTHB ARCHI 1
FEI / Dépt Informatique L2A / 2021-2022

Série d’exercices n° 2

(CORRIGE)

Exercice 1 :
Si une adresse physique de branchement dans un programme donné est 5A230H quand CS=5200H, quelle serait
cette adresse physique quand CS devient égal à 7800H ?

A.P = A.S x 16 + IP
IP = A.P -A.S x 16 =5A230H - 52000H = 8230H
A.P' = A.S' x 16 + IP = 78000H + 8230H =80230H

Exercice 2 :
En considérant les conditions initiales suivantes du microprocesseur :
BX=0105H, DI=4506H, SI=00AH, BP=0540H, DS=4500H, SS=0100H, EA(x)=1234H, EA(y)=6789H
Calculer les adresses effectives et physiques pour les modes d’adressage suivants :
 mode immédiat ni A.E , ni A.P
 mode registre (registre utilisé BX ni A.E , ni A.P
 mode registre indirect (registre utilisé BX) A.E = 0105H , A.P = DS x 16 + BX = 45000H + 0105H = 45105H
 mode direct (variable utilisée x) A.E = 1234H , A.P = DS x 16 + A.E = 45000H + 1234H = 46234H
 mode base indexée (registres utilisés BP et DI) A.E = BP + DI = 0540H + 4506H = 4A46H ,
A.P = SS x 16 + A.E = 01000H + 4A46H = 05A46H
 mode registre relatif (registre BX, variable x) A.E = BX + A.E(X) = 0105H + 1234H = 1339H ,
A.P = DS x 16 + A.E = 45000H + 1339H = 46339H
 mode base indexée relative (registres BX et SI, variable y) A.E = BX+SI +A.E (y) = 0105H+000AH+6789H = 6898H
A.P = DS x 16 + A.E = 45000H + 6898H = 4B898H
Note : A.P : Adresse physique , A.E : Adresse effective ou Effective Address

Exercice 3 :
Interpréter les instructions assembleur suivantes :
 mov cl , [bx] correcte, de la forme mov reg8 , mem
 mov cl , bx incorrecte , incompatibilité de la taille des opérandes
 mov a650h , 20h correcte si la variable a650H a été déclarée au préalable
 mov a650h , [bp) incorrecte, forme impossible mov mem , mem
 mov ds , 1234h incorrecte, la forme mov reg seg , immediat impossible
 xchg bx , 9abch impossible , il s'agit d'une instruction de permutation , la constante 9abcH donne
mais ne reçoit pas

Exercice 4 :
Ecrire en assembleur une séquence d’instructions qui réalise l’opération suivante :
W  X + Y +24 – Z
Où W, X, Y et Z sont des variables sur 32 bits.
MOV AX , X
MOV DX , X+2
ADD AX , Y
ADC DX , Y+2
ADD AX , 24
ADC DX , 0
SUB AX , Z
SBB DX , Z+2
MOV W , AX
MOV W+2 , DX
Exercice 5 :
Soient les deux déclarations suivantes :
Byte_var db ‘BYTE’,12, -12, 3dup(0, ?, 2 dup(1, 2), ?)
Word_var dw 5 dup(0, 1, 2), ?, -5, ‘BY’, ‘TE’, 255H

Donner pour chacune des déclarations


 l’espace mémoire réservé et les valeurs initiales de chaque champ
Byte_var db ‘BYTE’,12, -12, 3dup(0, ?, 2 dup(1, 2), ?) 27 Bytes
Word_var dw 5 dup(0, 1, 2), ?, -5, ‘BY’, ‘TE’, 255H 40 Bytes

 un schéma représentatif de la mémoire pour chacune des déclarations précédentes

(a) Schéma représentatif de la mémoire pour la déclaration Byte_var db ‘BYTE’,12, -12, 3dup(0, ?, 2 dup(1, 2), ?)

7 0

-
REFLEXION :
-
- Donner le schéma représentatif de la mémoire pour
- la déclaration
Byte_var 42H Word_var dw 5 dup(0, 1, 2), ?, -5, ‘BY’, ‘TE’, 255H
Byte_var + 1 59H
Byte_var + 2 54H
Byte_var + 3 45H
Byte_var + 4 0CH
- F4H
- 00H
- ?
- 01H
- 02H
- 01H
02H
- ?
- 00H
- ?
- 01H
- 02H
- 01H
- 02H
- ?
- 00H
- ?
- 01H
- 02H
- 01H
- 02H
Byte_var + 26 ?
-
-
-
-
Exercice 6 :
En supposant que le registre DS= 4ab8h et que le data segment correspondant est déclaré comme suit:

mes_données SEGMENT
budget dw 20, -30, 0f610h
poids db 3 dup(0a1h)
comptes dw 100 dup(0abch)
mes_données ENDS

a) donner la représentation mémoire du data segment mes_données,


b) en termes de temps d’exécution, que faut-il faire pour optimiser le temps d’exécution et combien gagnerait-
on si la fréquence du microprocesseur est 2 GHz.
a)
7 0

-
-
-
budget 14H
00H
E2H
FFH
10H
F6H
poids A1H
- A1H
- A1H
Comptes BCH
0AH
- BCH
- 0AH
- -
100 fois 0ABCH
-
-
-
BCH
- 0AH
-
-
-
Exercice 7 : (exercice donné en examen)
Soit le programme suivant :
Langage machine Langage Assembleur
(généré par le turbo Assembleur) (code source)

1 0000 mes_donnees SEGMENT


2 =0080 taille equ 128
3 0000 80*(????) tab dw taille dup(?)
4 0100 00 compt db 0
5 0101 80*(????) new_tab dw taille dup(?)
6 0201 mes_donnees ENDS
7
8 0000 mon_code SEGMENT
9 assume cs: mon_code ,ds: mes_donnees Cycles Machine
10 (pour la question (f))
4
11 0000 B8 00 00 start: mov ax , mes_donnees
2
12 0003 8E D8 mov ds , ax
4
13 0005 BE 00 00 mov si ,0
4
14 0008 B9 80 00 mov cx , length tab
8+EA=8+9=17
15 000B 8B 84 00 00 encore: mov ax , tab[si]
4
16 000F 3D 00 00 cmp ax , 0
16/4
17 0012 7D 06 jge positif
3
18 0014 F7 D8 neg ax
15+EA=15+6=21
19 0016 FE 06 00 01 inc compt
9+EA+4=9+9+4=22
20 001A 89 84 01 01 positif: mov new_tab[si] , ax
4
21 001E 83 C6 02 add si , 2
17/5
22 0021 E2 E8 loop encore
4
23 0023 B8 00 4C mov ax , 4c00h
51
24 0026 CD 21 int 21h
25 0028 mon_code ENDS
26 END start

Questions :

a) Donner la taille de l’espace réellement occupé par le segment mes_donnees réponse : 513 bytes
b) Quelle est l’adresse effective (l’offset) de la variable new_tab ? réponse : 0101H
c) Calculer l’espace réellement utilisé par le code segment réponse : 40 bytes
d) Générer le code machine de mov new_tab[si] , ax et mov ax , 4c00h
réponse : code machine de mov new_tab[si] , ax 89 84 01 01
code machine de mov ax , 4c00h B8 00 4C

e) Que va contenir la variable compt après l’exécution du programme ?

Réponse: le nombre d’éléments négatifs dans le tableau tab.

f) Si on suppose que la fréquence du microprocesseur est 1GHz et qu’il y’a 50 éléments


négatifs dans le tableau tab, calculer en µsec le temps d’exécution du programme.

Réponse:
#cycles machine = 4+2+4+4+128x(17+4+22+4+17)-12+50x(4+3+21)+78x16+4+51=10897

Rappel : 1GHz = 109Hz  1 cycle machine = 1 ns = 0,001 µs

Tex = #cycles machine x 1cycle machine = 10897 x 0,001µs = 10,897 µs

Vous aimerez peut-être aussi