Vous êtes sur la page 1sur 8

GIF-16116, 11 mars 2009

Nom/Matricule : _________________________

Examen 1
Cet examen vaut 35% de la note totale du cours. Les questions seront corriges sur un total de 35 points.
La valeur de chaque question est indique avec la question. Une calculatrice scientifique peut tre utilise.
Cependant, aucune documentation, autre que les annexes, nest permise. Vous pouvez rpondre aux
questions directement sur ce questionnaire et/ou dans le cahier bleu mis votre disposition.

Q1 (2 points) : Supposez un microprocesseur simple reli une mmoire par un bus de


donnes, un bus dadresses et un bus de contrle. Si le microprocesseur excute une
instruction pour crire une variable dans la mmoire partir dun registre (i.e. MOV
Mavar, AX), dans quel ordre les vnements suivants surviendront-ils, sils surviennent :
a)
b)
c)
d)
e)
f)
g)

Le microprocesseur met ladresse de la variable crire sur le bus dadresse.


La mmoire active la ligne de contrle pour que le microprocesseur lise la donne
Le microprocesseur met la valeur du registre sur le bus de donnes.
Le microprocesseur met la valeur du registre sur le bus dadresse.
Le microprocesseur met ladresse du registre sur le bus dadresse.
La mmoire met ladresse du registre sur le bus dadresse.
Le microprocesseur active la ligne de contrle pour crire la mmoire.

Note : Certains vnements de la liste ci-dessus ne font pas partie de la rponse.


R1: a c - g
Q2 (2.5 points) : Les phrases suivantes dfinissent un mot reli larchitecture dun
microprocesseur. Dites de quel mot ou concept il sagit :
Description
Dcoupage des instructions en sous parties afin dexcuter des
sous parties diffrentes de plusieurs instructions simultanment.
Unit de calcul excutant les oprations arithmtiques ou
boolennes lintrieur du microprocesseur.
Variable ayant un rle spcial jouer lintrieur du processeur.
Partie dune instruction dcrivant ce que fait linstruction, mais
pas ses paramtres.
Petite mmoire trs rapide servant de tampon pour acclrer le
transfert de donnes entre le microprocesseur et la mmoire vive.

Mot ou Concept
Pipeline
ALU
Registre
Opcode
Cache

Q3 (3 points) : Si on suppose un 8086 avec des instructions tel que dcrit en annexe B et
si le bus de donnes a 16 bits, combien daccs la mmoire seront requis pour lire et
excuter la squence dinstructions suivante :
PUSH AX
ADD AX,CX
MOV [BX],AX

Expliquez brivement votre rponse en donnant le dtail pour chaque instruction.


R3 : Il faut lire les instructions et les excuter ensuite comme illustrer dans
la table ci-dessous:
Instruction

Taille

PUSH AX

2 octets

#accs pour
lecture de
linstruction
1

ADD AX,CX
MOV
[BX],AX

3 octets
3 octets

2
2

#accs pour Commentaire/Total


excution
1
0
1
Total

La pile est dans la


mmoire. Total = 2
2
3
7

Q4 (8 points) : On vous demande de faire une fonction calculant un bit de parit paire.
Un bit de parit paire est un bit qui sera 1 si le nombre de 1 dans loctet est impair.
Autrement dit, le nombre de 1 dans loctet et dans la parit sera pair. Par exemple, si vous
avez 00110010b, le bit de parit vaudra 1, car il y a trois bits 1 dans loctet.
En assumant quil ny a pas de drapeau de lALU donnant la parit, concevez une
fonction en assembleur 8086 qui recevra, en paramtre dentre, un octet pass par le
registre AL. Le bit de parit est retourn dans le drapeau C.
La squence suivante pourrait appeler votre fonction :
MOV AL, OctetATransmettre
CALL CalculeParite
JC
CasParitePaire
Votre fonction doit tre propre et elle doit tre commente.
R4) Il y a plusieurs rponses possibles!!!
CalculeParite PROC
PUSH AX ;AX contient le byte transmettre
PUSH BX ;BX contient le nombre de 1 dans le byte
PUSH CX ;CX est un compteu
MOV BX,0
MOV CX, 8 ;Initialise une boucle de 8 qui compte les 1 dans le byte
Boucle:
RCR AX,1 ;Dcale AX de 1 vers la droite. Le bit LSB est dans C.
JNC ProchainBit
INC BX ;Ajoute 1 BX si le bit courant est 1
ProchainBit:
SUB CX,1
JNZ Boucle ;Les 8 bits sont tests?
CLC ;Met 0 par dfaut dans C
TEST BX,1 ;Si le nombre de 1 dans le byte transmettre est impair
JZ CalculParitefin
STC ;Met 1 dans C
CalculParitefin:
POP CX
POP BX
POP AX
RET
CalculeParite ENDP

Q5 (2.5 points) : Remplacez les squences dinstructions suivantes par une instruction
unique :
Squence

PUSH AX
SUB AX,BX
POP AX

PUSH AX
RET

Instruction

CMP AX,BX

JMP AX

PUSH AX
MOX AX,BX
MUL 2
MOV BX,AX
POP AX
SAL BX, 1

PUSH BX
LEA BX,Var1
MOV AX,[BX]
POP BX

SAR BX, 3
SAL BX, 3
;Ignorez les
;drapeaux

MOV AX,Var1

AND BX,
0xFFF8

Q6 (3 points) : Vous avez un disque dur de 10 Gigaoctets. Sachant que le disque dur a 10
plateaux, 20 ttes de lecture, 100 pistes par plateaux, 100 cylindres et 1000 secteurs par
piste, quelle est la taille des blocs de donnes sur ce disque. Assumez quun Gigaoctet est
109 plutt que 10243 octets afin de simplifier les calculs.
R6) Capacit = #surfaces * #pistes/surface * #blocs/piste * taille de bloc
En considrant que
#surfaces = #ttes et que #blocs/piste = #secteurs/surface :
taille de bloc = Capacit / [#surfaces * #pistes/surface * #blocs/piste ]
taille de bloc = 10*10^9 bytes / [20 surfaces * 100 pistes/surface * 1000
blocs/piste]
Q7 (2 points) : Sachant que lon utilise linstruction CMP AL, BL afin de changer la
valeur des drapeaux, donnez, pour toutes les combinaisons possibles de AL et BL, la
valeur des drapeaux Zero et Overflow.
Par exemple, le drapeau Carry (emprunt) sera 1 si BL est plus grand que AL lorsque AL
et BL sont tous deux positifs.
R7) Le drapeau Zero sera 1 si AL == BL, 0 sinon
Le drapeau Overflow sera 1 si AL BL donne un rsultat qui nest pas
entre -128 et 127, 0 sinon.
Q8 (2 points) : Donnez un exemple de squence de code assembleur qui justifie de
passer les drapeaux de lALU en paramtre lorsquune interruption survient.
R8) CMP AL, BL
JZ qqpart
Si linterruption survient entre les deux instructions, le drapeau 0 doit tre
sauvegard.

Q9 (10 points) : Tous les noncs suivant sont totalement ou partiellement faux. Dites
brivement pourquoi ou dites comment rendre lnonc vrai. Un nonc peut tre faux
pour plusieurs raisons. Notez que les noncs sappliquent au 8086 lorsque ce nest pas
spcifi. Exemple : lnonc Le cours dOSA est peu intressant, mais les laboratoires
sont instructifs. serait faux en raison du mot peu .
#
nonc Faux
A Selon la loi de Moore, la vitesse dhorloge des microprocesseurs double tous les 18
24 mois.
Le nombre de transistor par unit de surface double
B Pour assurer que les ordinateurs dmarreront toujours, les instructions excutes au
dmarrage sont lintrieur du microprocesseur, dans une mmoire non-volatile.
.. lintrieur de la mmoire
C Dans une architecture CISC, les instructions ont des longueurs diverses et elles
accomplissent des tches complexes. Cela permet de simplifier larchitecture du
microprocesseur et de reproduire la taille des programmes.
Une architecture CISC est plus complexe implmenter que RISC.
D Lorsque le microprocesseur rencontre une directive #IFDEF en mmoire, il lexcute
comme une instruction if en langage C.
Une directive #IFDEF est prcompile et elle nest jamais vue par le
microprocesseur
E Le compilateur relie les fichiers objet de plusieurs modules pour crer un programme.
Lassembleur gnre des fichiers objet.
Lditeur de liens relie
F Les instructions CALL, PUSH, RETI, MOV, INT et CMP changent le pointeur de pile
(SP) automatiquement.
MOV et CMP ne changent pas SP.
G Le nombre 4112 en dcimal est reprsent en hexadcimal sur 2 bytes. En Big
Endian, la plus haute adresse en mmoire contiendra le byte le moins significatif. En
Little Endian, la plus haute adresse en mmoire aurait un contenu diffrent.
Laffirmation serait vraie si 4112 ntait pas 0x1010. Peu importe la
convention, 0x1010 apparatra comme 0x1010!!!
H Le principal avantage de la notation complment 2 est quil est plus
facile de reprsenter les donnes en fractions.
La notation complment 2 reprsente les entiers ngatifs
I Le contrleur de DMA contrle le bus dadresse du microprocesseur en mme temps
que ce dernier afin de doubler la vitesse des accs la mmoire.
Il ny a quun seul contrleur de bus dadresse un temps donn sur un
bus.
J Un bus dordinateur est un programme qui gre les changes de donnes entre un
priphrique et un microprocesseur.
Un bus est un groupe de fils
QBonus (3 points bonus) : Une fonction rentrante est dfinie comme une fonction qui
peut sappeler de diffrents contextes simultanment sans que cela ne pose de problme.

Par exemple, si la fonction MAFUN est appele dans le main et si la fonction MAFUN
est aussi appele dans linterruption #8, la fonction MAFUN sera dite rentrante sil ny
a pas de problme ce que linterruption #8 se produise lorsque MAFUN est excute
dans le main.
Trois mthodes de passage de paramtres ont t vues dans le cours : par la pile, par
registres et par variables globales. Laquelle (lesquelles) de ces mthodes permet dcrire
des fonctions rentrantes et sous quelles conditions? Laquelle (lesquelles) ne le permet
pas? Expliquez, dans tous les cas, pourquoi.
Une fonction propre utilisant la pile est rentrante.
Une fonction propre utilisant les registres est rentrante si la fonction
sauvegarde les paramtres dentre et de sortie (sur la pile par exemple) ou
si elle ne les modifie pas.
Une fonction utilisant des variables globales nest pas rentrante.

Annexe A : Liste non exhaustive des instructions du 8086


Instruction

Description

ADD a,b
AND a,b
CALL proc
CLC
CMP a,b
DEC a
DIV mot

Effectue a = a+b.
Effectue a = a ET b, o ET est un ET logique.
Appelle la procdure proc et empile lemplacement de retour.
Met 0 le drapeau de retenue (carry).
Effectue a-b, a et b sont inchangs.
Dcrmente a.
Effectue AX = DXAX/mot, non sign, le rsultat est tronqu (arrondi
infrieur).
Effectue AX = DXAX/mot, sign, le rsultat est tronqu (arrondi infrieur).
Effectue DXAX = AX*mot, sign.
Met la valeur lue sur le port de I/O port dans dst.
Incrmente a.
Appelle la routine de service dinterruption a. Empile les drapeaux et
lemplacement de retour.
Retourne dune int. en dpilant lemplacement de retour et les drapeaux.
Saute linstruction dsigne par label si le drapeau Carry est 1.
Saute label. La prochaine instruction excute est dsigne par label.
Saute linstruction dsigne par label si le drapeau Carry est 0.
Saute linstruction dsigne par label si le drapeau Zro est 0.
Saute linstruction dsigne par label si le drapeau Signe est 0.
Saute linstruction dsigne par label si le drapeau Zro est 1.
Saute linstruction dsigne par label si le drapeau Signe est 1.
Met ladresse de la variable var dans dst.
Met le contenu de src dans dst. Ne change pas les drapeaux.
Effectue AX = AL*octet, non sign.
Inverse tous les bits de a, puis ajoute 1.
Inverse tous les bits de a.
Effectue a = a OU b, o OU est un OU logique.
Met la valeur de src sur le port de I/O port.
Dpile un mot. Ne change pas les drapeaux.
Dpile les drapeaux.
Empile un mot. Ne change pas les drapeaux.
Empile les drapeaux.
Retourne dune procdure en dpilant lemplacement de retour. RET dpile
IP. RETF dpile IP puis CS.
Fait une rotation de b bits vers la gauche. La rotation inclut le bit de Carry.
Fait une rotation de b bits vers la droite. La rotation inclut le bit de Carry.
Dcale tous les bits de a vers la gauche dun nombre de bits gal b. Des
zros sont mis droite. Carry prend la valeur du bit disparu.
Dcale tous les bits de a vers la droite dun nombre de bits gal b. Le bit le
plus significatif de a est mis gauche. Carry prend la valeur du bit disparu.
Met 1 le drapeau de Carry
Effectue a = a-b.
Effectue a ET b, o ET est un ET logique.
Effectue a = a XOR b, o XOR est un OU eXclusif.

IDIV mot
IMUL mot
IN dst, port
INC a
INT a
IRET
JC label
JMP label
JNC label
JNZ label
JNS label
JZ label
JS label
LEA dst,var
MOV dst,src
MUL octet
NEG a
NOT a
OR a,b
OUT port, src
POP mot
POPF
PUSH mot
PUSHF
RET et RETF
RCL a,b
RCR a,b
SAL a,b
SAR a,b
STC
SUB a,b
TEST a,b
XOR a,b

Annexe B : Table ASCII et codes op (opcodes) du 8086


Dec

Sous-ensemble de la table ASCII


Hex
Chr
65d
41h
A
66d
42h
B

76d
4Ch
L

90d
5Ah
Z

97d
61h
a
98d
62h
b

108d
6Ch
l

122d
7Ah
z

Opcodes et paramtres fictifs d'instructions 8086


Instruction
Taille Opcode Paramtres
ADD Reg/Reg 3 bytes
21h
Deux bytes pour dcrire les deux registres qu'il faut additonner
ADDA Reg
2 bytes
22h
Un byte pour dcrire le registre qu'il faut additonner AX
JMP Reg
2 bytes
40h
Un byte pour dcrire le registre dsignant la prochaine instruction (IP)
JMP dest
3 bytes
41h
Deux bytes pour dcrire le IP de la prochaine instruction
MOV Reg/Reg 3 bytes
80h
Deux bytes pour dcrire le registre source et le registre destination
MOV Reg/Mem 4 bytes
81h
Un byte pour dcrire le registre et deux byte pour dcrire l'adresse
MOV Mem/Reg 4 bytes
83h
Un byte pour dcrire le registre et deux byte pour dcrire l'adresse
POP Reg
2 bytes
A0h Un byte pour dcrire le registre qu'il faut dpiler
POP Mem
3 bytes
A2h Deux byte pour dcrire l'adresse qu'il faut dpiler
PUSH Reg
2 bytes
A1h Un byte pour dcrire le registre qu'il faut empiler
PUSH Mem
3 bytes
A3h Deux byte pour dcrire l'adresse qu'il faut empiler
Note: Les donnes contenues dans cette table sont fictives