GIF-16116, 11 mars 2009 Nom/Matricule : _________________________
Examen 1
Cet examen vaut 35% de la note totale du cours. Les questions seront corrigées sur un total de 35 points.
La valeur de chaque question est indiquée avec la question. Une calculatrice scientifique peut être utilisée.
Cependant, aucune documentation, autre que les annexes, n’est permise. Vous pouvez répondre aux questions directement sur ce questionnaire et/ou dans le cahier bleu mis à votre disposition.
Q1 (2 points) : Supposez un microprocesseur simple relié à une mémoire par un bus de données, un bus d’adresses et un bus de contrôle. Si le microprocesseur exécute une instruction pour écrire une variable dans la mémoire à partir d’un registre (i.e. MOV Mavar, AX), dans quel ordre les évènements suivants surviendront-ils, s’ils surviennent :
a) Le microprocesseur met l’adresse de la variable à écrire sur le bus d’adresse.
b) La mémoire active la ligne de contrôle pour que le microprocesseur lise la donnée c) Le microprocesseur met la valeur du registre sur le bus de données.
d) Le microprocesseur met la valeur du registre sur le bus d’adresse.
e) Le microprocesseur met l’adresse du registre sur le bus d’adresse.
f) La mémoire met l’adresse du registre sur le bus d’adresse.
g) Le microprocesseur active la ligne de contrôle pour écrire la mémoire.
Note : Certains évènements de la liste ci-dessus ne font pas partie de la réponse.
Q2 (2.5 points) : Les phrases suivantes définissent un mot relié à l’architecture d’un microprocesseur. Dites de quel mot ou concept il s’agit :
Description Mot ou Concept
Découpage des instructions en sous parties afin d’exécuter des sous parties différentes de plusieurs instructions simultanément.
Unité de calcul exécutant les opérations arithmétiques ou booléennes à l’intérieur du microprocesseur.
Variable ayant un rôle spécial à jouer à l’intérieur du µprocesseur.
Partie d’une instruction décrivant ce que fait l’instruction, mais pas ses paramètres.
Petite mémoire très rapide servant de tampon pour accélérer le transfert de données entre le microprocesseur et la mémoire vive.
Q3 (3 points) : Si on suppose un 8086 avec des instructions tel que décrit en annexe B et si le bus de données a 16 bits, combien d’accès à la mémoire seront requis pour lire et exécuter la séquence d’instructions suivante :
PUSH AX ADD AX,CX MOV [BX],AX
Expliquez brièvement votre réponse en donnant le détail pour chaque instruction.
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 l’octet est impair.
Autrement dit, le nombre de 1 dans l’octet 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 l’octet.
En assumant qu’il n’y a pas de drapeau de l’ALU donnant la parité, concevez une fonction en assembleur 8086 qui recevra, en paramètre d’entrée, un octet passé par le registre AL. Le bit de parité est retourné dans le drapeau C.
La séquence suivante pourrait appeler votre fonction : MOV AL, OctetATransmettre
CALL CalculeParite JC CasParitePaire
Votre fonction doit être propre et elle doit être commentée.
Q5 (2.5 points) : Remplacez les séquences d’instructions suivantes par une instruction unique :
Séquence PUSH AX SUB AX,BX POP AX
PUSH AX RET
PUSH AX MOX AX,BX MUL 2 MOV BX,AX POP AX
PUSH BX LEA BX,Var1 MOV AX,[BX]
POP BX
SAR BX, 3 SAL BX, 3
;Ignorez les
;drapeaux Instruction
Q6 (3 points) : Vous avez un disque dur de 10 Gigaoctets. Sachant que le disque dur a 10 plateaux, 20 têtes de lecture, 100 pistes par plateaux, 100 cylindres et 1000 secteurs par piste, quelle est la taille des blocs de données sur ce disque. Assumez qu’un Gigaoctet est 109 plutôt que 10243 octets afin de simplifier les calculs.
Q7 (2 points) : Sachant que l’on utilise l’instruction 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.
Q8 (2 points) : Donnez un exemple de séquence de code assembleur qui justifie de passer les drapeaux de l’ALU en paramètre lorsqu’une interruption survient.
Q9 (10 points) : Tous les énoncés suivant sont totalement ou partiellement faux. Dites brièvement pourquoi ou dites comment rendre l’énoncé vrai. Un énoncé peut être faux pour plusieurs raisons. Notez que les énoncés s’appliquent au 8086 lorsque ce n’est pas spécifié. Exemple : l’énoncé « Le cours d’OSA est peu intéressant, mais les laboratoires sont instructifs. » serait faux en raison du mot « peu » ☺.
# Énoncé Faux
A Selon la loi de Moore, la vitesse d’horloge des microprocesseurs double à tous les 18 à 24 mois.
B Pour assurer que les ordinateurs démarreront toujours, les instructions exécutées au démarrage sont à l’intérieur du microprocesseur, dans une mémoire non-volatile.
C Dans une architecture CISC, les instructions ont des longueurs diverses et elles accomplissent des tâches complexes. Cela permet de simplifier l’architecture du microprocesseur et de reproduire la taille des programmes.
D Lorsque le microprocesseur rencontre une directive #IFDEF en mémoire, il l’exécute comme une instruction if en langage C.
E Le compilateur relie les fichiers objet de plusieurs modules pour créer un programme.
L’assembleur génère des fichiers objet.
F Les instructions CALL, PUSH, RETI, MOV, INT et CMP changent le pointeur de pile (SP) automatiquement.
G Le nombre 4112 en décimal est représenté en hexadécimal sur 2 bytes. En Big Endian, la plus haute adresse en mémoire contiendra le byte le moins significatif. En Little Endian, la plus haute adresse en mémoire aurait un contenu différent.
H Le principal avantage de la notation complément à 2 est qu’il est plus facile de représenter les données en fractions.
I Le contrôleur de DMA contrôle le bus d’adresse du microprocesseur en même temps que ce dernier afin de doubler la vitesse des accès à la mémoire.
J Un bus d’ordinateur est un programme qui gère les échanges de données entre un périphérique et un microprocesseur.
QBonus (3 points bonus) : Une fonction réentrante est définie comme une fonction qui peut s’appeler de différents contextes simultanément sans que cela ne pose de problème.
Par exemple, si la fonction MAFUN est appelée dans le main et si la fonction MAFUN est aussi appelée dans l’interruption #8, la fonction MAFUN sera dite réentrante s’il n’y a pas de problème à ce que l’interruption #8 se produise lorsque MAFUN est exécutée dans le main.
Trois méthodes de passage de paramètres ont été vues dans le cours : par la pile, par registres et par variables globales. Laquelle (lesquelles) de ces méthodes permet d’écrire des fonctions réentrantes et sous quelles conditions? Laquelle (lesquelles) ne le permet pas? Expliquez, dans tous les cas, pourquoi.
Annexe A : Liste non exhaustive des instructions du 8086 Instruction Description
ADD a,b Effectue a = a+b.
AND a,b Effectue a = a ET b, où ET est un ET logique.
CALL proc Appelle la procédure proc et empile l’emplacement de retour.
CLC Met à 0 le drapeau de retenue (carry).
CMP a,b Effectue a-b, a et b sont inchangés.
DEC a Décrémente a.
DIV mot Effectue AX = DXAX/mot, non signé, le résultat est tronqué (arrondi inférieur).
IDIV mot Effectue AX = DXAX/mot, signé, le résultat est tronqué (arrondi inférieur).
IMUL mot Effectue DXAX = AX*mot, signé.
IN dst, port Met la valeur lue sur le port de I/O port dans dst.
INC a Incrémente a.
INT a Appelle la routine de service d’interruption a. Empile les drapeaux et l’emplacement de retour.
IRET Retourne d’une int. en dépilant l’emplacement de retour et les drapeaux.
JC label Saute à l’instruction désignée par label si le drapeau Carry est 1.
JMP label Saute à label. La prochaine instruction exécutée est désignée par label.
JNC label Saute à l’instruction désignée par label si le drapeau Carry est 0.
JNZ label Saute à l’instruction désignée par label si le drapeau Zéro est 0.
JNS label Saute à l’instruction désignée par label si le drapeau Signe est 0.
JZ label Saute à l’instruction désignée par label si le drapeau Zéro est 1.
JS label Saute à l’instruction désignée par label si le drapeau Signe est 1.
LEA dst,var Met l’adresse de la variable var dans dst.
MOV dst,src Met le contenu de src dans dst. Ne change pas les drapeaux.
MUL octet Effectue AX = AL*octet, non signé.
NEG a Inverse tous les bits de a, puis ajoute 1.
NOT a Inverse tous les bits de a.
OR a,b Effectue a = a OU b, où OU est un OU logique.
OUT port, src Met la valeur de src sur le port de I/O port.
POP mot Dépile un mot. Ne change pas les drapeaux.
POPF Dépile les drapeaux.
PUSH mot Empile un mot. Ne change pas les drapeaux.
PUSHF Empile les drapeaux.
RET et RETF Retourne d’une procédure en dépilant l’emplacement de retour. RET dépile IP. RETF dépile IP puis CS.
RCL a,b Fait une rotation de b bits vers la gauche. La rotation inclut le bit de Carry.
RCR a,b Fait une rotation de b bits vers la droite. La rotation inclut le bit de Carry.
SAL a,b Décale tous les bits de a vers la gauche d’un nombre de bits égal à b. Des zéros sont mis à droite. Carry prend la valeur du bit disparu.
SAR a,b Décale tous les bits de a vers la droite d’un nombre de bits égal à b. Le bit le plus significatif de a est mis à gauche. Carry prend la valeur du bit disparu.
STC Met à 1 le drapeau de Carry SUB a,b Effectue a = a-b.
TEST a,b Effectue a ET b, où ET est un ET logique.
XOR a,b Effectue a = a XOR b, où XOR est un OU eXclusif.
Annexe B : Table ASCII et codes op (opcodes) du 8086
Dec 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
Sous-ensemble de la table ASCII
Instruction Taille Opcode Paramètres
ADD Reg/Reg 3 bytes 21h Deux bytes pour décrire les deux registres qu'il faut additonner ADDA Reg 2 bytes 22h Un byte pour décrire le registre qu'il faut additonner à AX
JMP Reg 2 bytes 40h Un byte pour décrire le registre désignant la prochaine instruction (IP) JMP dest 3 bytes 41h Deux bytes pour décrire le IP de la prochaine instruction
MOV Reg/Reg 3 bytes 80h Deux bytes pour décrire le registre source et le registre destination MOV Reg/Mem 4 bytes 81h Un byte pour décrire le registre et deux byte pour décrire l'adresse MOV Mem/Reg 4 bytes 83h Un byte pour décrire le registre et deux byte pour décrire l'adresse POP Reg 2 bytes A0h Un byte pour décrire le registre qu'il faut dépiler
POP Mem 3 bytes A2h Deux byte pour décrire l'adresse qu'il faut dépiler PUSH Reg 2 bytes A1h Un byte pour décrire le registre qu'il faut empiler PUSH Mem 3 bytes A3h Deux byte pour décrire l'adresse qu'il faut empiler Opcodes et paramètres fictifs d'instructions 8086
Note: Les données contenues dans cette table sont fictives