INF2170 Organisation des ordinateurs et assembleur
Examen Final Automne 2014
Vendredi 12 décembre 2014 Durée 2 heures
Aucun document n'est autorisé.
L'usage de la calculatrice est interdit.
L'annexe est détachable (dernière feuille).
Répondez et rendez seulement le formulaire (avant-dernière feuille).
Les questions faisant apparaître le symbole♣peuvent présenter plusieurs bonnes réponses. Les autres ont une unique bonne réponse.
Des points négatifs pourront être aectés à de très mauvaises réponses.
1 Questions de cours
Question 1 Quel est le mode d'adressage à utiliser dans un sous-programme pour accéder en lecture à un entier passé tel quel sur la pile ?
A sx B x C nx
D sxf E i F s
G d H n I sf
Question 2 ♣ Parmi les instructions suivantes, indiquez toutes celles qui peuvent modier le registre du compteur ordinal (Program Counter, PC).
A SUBSP B RETn C MOVSPA
D CPX E ASLA F CALL
G RETTR H ORX
I BRV
Question 3 À quoi peut servir l'instruction machine TRAP (aussi connue sous le nom d'interruption logicielle) ? A Sortir récusrsivement de tous les sous-programmes invoqués
B Armer et désarmer une IRQ
C Réinitialiser le compteur ordinal à 0 D L'amiral Ackbar
E Allouer une certaine quantité de mémoire F Calculer le reste de la division entière
G Invoquer un sous-programme du système d'exploitation
brouillon
2 Flottants
Question 4 Convertissez le nombre décimal 15,75 en ottant simple précision (32 bits) selon la norme IEEE-754.
Rappel : 1 bit de signe, 8 bits d'exposant (pôle 7F), 23 bits de mantisse.
Quel est le premier octet de cette représentation ? A 40xxxxxx
B 3Fxxxxxx
C FFxxxxxx D 00xxxxxx
E C0xxxxxx F 41xxxxxx
G BFxxxxxx H C1xxxxxx Question 5 Quel est le second octet de cette représentation ?
A xx77xxxx B xxFExxxx
C xx7Fxxxx D xx7Cxxxx
E xxF0xxxx F xx7Exxxx
G xxFCxxxx H xxF7xxxx Question 6 Soit 459C47A1 la représentation hexadécimale d'un ottant simple précision IEEE-754.
Déterminez dans quelle fourchette se situe le nombre.
A < -1000
B entre -1000 et -100
C entre -100 et -10 D entre -10 et 0
E entre 0 et 10 F entre 10 et 100
G entre 100 et 1000 H > 1000
Question 7 Soit 40A00000 la représentation hexadécimale d'un ottant simple précision IEEE-754.
Quel est ce nombre ? A 10
B 8.5 C 12
D -8 E 3 F 11
G 5 H 2 I 4
J 1 K 5.5 L 8
3 Sous-programmes
Question 8 Qu'ache le programme suivant ? CALL a
CALL b a: STOPCHARO '1',i
BR b
CHARO '2',i RET0
b: CHARO '3',i
RET0 .END
A 123 B 132
C ça ne termine pas
D 132131 E 312 F 13
G 1223 H 133
I 1233
J 1323
K n'importe quoi L 1
brouillon
Soit le programme mystère suivant:
main : DECI n,d
LDA n,d
DECI n,d
LDX n,d
CALL sub
STA n,d
DECO n,d STOP
n: . BLOCK 2
;
sub : SUBSP 2,i
STA a,s
CPX 0,i
BRNE cont
LDA 1,i
BR fin
cont : SUBX 1,i CALL sub ADDA a,s fin : RET2
a: . EQUATE 0
;
.END
Question 9 Qu'ache le programme mystère lorsque l'on saisit les nombre 2 et 1 ? A 2
B 21 C 10 D 0
E 5
F n'importe quoi G 22
H 01
I 12 J 20 K 1 L 4
M 3
N ça ne termine pas O rien
P 22 Question 10 Qu'ache le programme mystère lorsque l'on saisit les nombre -2 et 2 ?
A 4 B -8 C -4 D 1
E -22 F 6 G -1 H 0
I ça ne termine pas J -3
K -6 L 3
M 8 N 22
O n'importe quoi P rien
Question 11 Qu'ache le programme mystère lorsque l'on saisit les nombre 25 et 1110 ? A 27751
B n'importe quoi C 27776
D 27775
E 28862 F 26640 G 28860 H 26617
I 26616 J 26641 K 26618 L 27777
M 27750 N rien O 28861
P ça ne termine pas Question 12 Qu'ache le programme mystère lorsque l'on saisit les nombre 1 et -1 ?
A 9 B -2 C -3 D 3
E 20 F 0 G -9 H 1
I -10 J 2 K -20 L -11
M -1 N 10
O n'importe quoi P 11
4 Appel de fonction
Soit le programme suivant qui modélise un arbre binaire et implémente sum une fonction qui somme les valeurs des noeuds de cet arbre. Le programme est incomplet. Les parties manquantes sont remplacées par des séquences de lettres de A à D.
Une fois complété, ce programme ache 15 qui est la somme des valeurs des noeuds l'arbre nA.
; Calcule et affiche la somme des valeurs des noeuds de l' arbre nA main : LDX nA ,i
CALL sum STA out ,d DECO out ,d
out : STOP. BLOCK 2 ; #2d
;; Structure d'un noeud de l' arbre binaire nA
nVal : . AAAAAAAA ; #2d valeur du noeud
nLft : . AAAAAAAA ; #2h sous - arbre gauche (0 pour null ) nRht : . AAAAAAAA ; #2h sous - arbre droit (0 pour null )
;; Les noeuds de l' arbre nA
nA: . WORD 1
. ADDRSS nB . ADDRSS nD
nB: . WORD 2
. WORD 0 . ADDRSS nC
nC: . WORD 4
. WORD 0 . WORD 0
nD: . WORD 3
. ADDRSS nE . WORD 0
nE: . WORD 5
. WORD 0 . WORD 0
;
; sum : Somme récursive de la valeur des noeuds d'un arbre binaire .
; IN: X= Adresse du noeud racine (0 si pas de noeud racine )
; OUT : A= Somme des valeurs ( par convention , 0 est retourné si X ==0)
sum : LDA 0,i
CALL asum
; RET0
; asum : Accumule dans A la somme récursive des valeurs des noeuds
; Ce sous - programme est utilisé pour implémenter `sum `
; IN: A= Valeur initialle
; X= Adresse du noeud courant (0 si pas de noeud courant )
; OUT : A= Somme accumulée
asum : SUBSP 2,i ; # asx
STX asx ,s
BBBBBBBBBBBBBBBBBBBB BR asx_fin asx_cont : ADDA nVal ,x
CCCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDDD CCCCCCCCCCCCCCCCCCCC
asx_fin : RET2 ; # asx
asx : . EQUATE 0 ; #2h
.END
Question 13 Quelles doivent-être les dénitions (indiquées par des AAAAAAAA) des symboles utilisés pour décrire la structure d'un noeud de l'arbre binaire nA?
A nVal: .EQUATE 2 nLft: .EQUATE 4 nRht: .EQUATE 6 B nVal: .BLOCK 4
nLft: .BLOCK 2 nRht: .BLOCK 0 C nVal: .EQUATE 2
nLft: .EQUATE 2 nRht: .EQUATE 2
D nVal: .EQUATE 4 nLft: .EQUATE 2 nRht: .EQUATE 0 E nVal: .EQUATE 0 nLft: .EQUATE 2 nRht: .EQUATE 2 F nVal: .BLOCK 2
nLft: .BLOCK 4 nRht: .BLOCK 6
G nVal: .EQUATE 4 nLft: .EQUATE 2 nRht: .EQUATE 2 H nVal: .BLOCK 2
nLft: .BLOCK 2 nRht: .BLOCK 2 I nVal: .BLOCK 0 nLft: .BLOCK 2 nRht: .BLOCK 4
J nVal: .EQUATE 0 nLft: .EQUATE 2 nRht: .EQUATE 4 K nVal: .BLOCK 4
nLft: .BLOCK 2 nRht: .BLOCK 2 L nVal: .BLOCK 0 nLft: .BLOCK 2 nRht: .BLOCK 2 Question 14 Que faut-il écrire à la place des BBBBBBBBBBBBBBBBBBBB pour compléter l'implémentation du cas du 0 ?
A CPX 0,i BRNE asx_cont LDA 0,i B CPX 0,i
BREQ asx_cont
C CPA 0,i BREQ asx_cont
D CPA 0,i BRNE asx_cont LDX 0,i
E CPA 0,i BREQ asx_cont LDX 0,i F CPX 0,i
BRNE asx_cont
G CPA 0,i BRNE asx_cont
H CPX 0,i BREQ asx_cont LDA 0,i Question 15 Que faut-il écrire à la place des CCCCCCCCCCCCCCCCCCCC pour eectuer le travail récursif ? Note: le DDDDDDDDDDDDDDDDDDDD situé au milieu est traité à la question suivante.
A
LDX nLft,sx CALL sum
DDDDDDDDDDDDDDDDDDDD LDX nRht,sx
CALL sum
B
LDX nLft,x CALL asum
DDDDDDDDDDDDDDDDDDDD LDX nRht,x
CALL asum
C
LDX nLft,x CALL sum
DDDDDDDDDDDDDDDDDDDD LDX nRht,x
CALL sum
D
LDX nLft,x
DDDDDDDDDDDDDDDDDDDD LDX nRht,x
CALL asum
E
LDX nLft,sx
DDDDDDDDDDDDDDDDDDDD LDX nRht,sx
CALL sum
F
LDX nLft,sx CALL asum
DDDDDDDDDDDDDDDDDDDD LDX nRht,sx
CALL asum
G
LDX nLft,sx
DDDDDDDDDDDDDDDDDDDD LDX nRht,sx
CALL asum
H
LDX nLft,x
DDDDDDDDDDDDDDDDDDDD LDX nRht,x
CALL sum
Question 16 Que faut-il écrire à la place de DDDDDDDDDDDDDDDDDDDD pour le code à exécuter entre le travail sur chaque sous-arbre ?
A LDA asx,sx B ADDA nVal,sx C LDX 0,i D BR asx_fin
E ADDA asx,s F LDA 0,i G ADDX asx,sx H ADDX asx,s
I LDA asx,s J ADDA asx,sx K ADDA nVal,s L ADDX nVal,s
M NOP; rien N LDX asx,s O LDX asx,sx P ADDX nVal,sx
5 Modes d'adressage dans la pile
Soit le listing suivant :
--- Object
Addr code Symbol Mnemon Operand Comment
---
; Astuce pour positionner SP à t
0000 02 MOVSPA
0001 E1001A STA spval ,d ; spval = SP
0004 69001 A SUBSP spval ,d
0007 60001 C ADDSP t,i ; SP = SP - spval + t
; Début du programe utile
000 A 3 B0008 DECO 8,s
000 D 3 C0004 DECO 4,sf
0010 C8FFFE LDX -2,i
0013 3 E0002 DECO 2,sx
0016 3 F0004 DECO 4, sxf
0019 00 STOP
001 A 0000 spval : . BLOCK 2
; Haut de la pile 001 C 0020 t: . WORD 32 001 E 0021 u: . WORD 33
0020 0022 v: . WORD 34
0022 0023 w: . WORD 35
0024 0024 z: . WORD 36
0026 . END
--- Symbol table
---
Symbol Value Symbol Value
---
spval 001 A t 001 C
u 001 E v 0020
w 0022 z 0024
---
Question 17 Quel est le premier nombre aché (DECO 8,s) ? A -2
B -1
C 0 D 1
E 2 F 3
G 20 H 21
I 22 J 23
K 24 L 25
M 26 N 32
O 33 P 34
Q 35 R 36
S 255 T 256 Question 18 Quel est le second nombre aché (DECO 4,sf) ?
A -2 B -1
C 0 D 1
E 2 F 3
G 20 H 21
I 22 J 23
K 24 L 25
M 26 N 32
O 33 P 34
Q 35 R 36
S 255 T 256 Question 19 Quel est le troisième nombre aché (DECO 2,sx) ?
A -2 B -1
C 0 D 1
E 2 F 3
G 20 H 21
I 22 J 23
K 24 L 25
M 26 N 32
O 33 P 34
Q 35 R 36
S 255 T 256 Question 20 Quel est le quatrième nombre aché (DECO 4,sxf) ?
A -2 B -1
C 0 D 1
E 2 F 3
G 20 H 21
I 22 J 23
K 24 L 25
M 26 N 32
O 33 P 34
Q 35 R 36
S 255 T 256
brouillon
Feuille de réponses
INF2170 Organisation des ordinateurs et assembleur Examen Final Automne 2014
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
←− codez les 8 chires de votre code permanent ci-contre, et inscrivez-le à nouveau ci-dessous avec votre nom et prénom.
Code permanent :
. . . . Nom :
. . . . Prénom :
. . . .
Les réponses aux questions sont à donner exclusivement sur cette feuille : les réponses données sur les feuilles précédentes ne seront pas prises en compte.
Important : noircissez complètement l'intérieur de chaque case (pas de croix, pas de cercles).
Question 1 : A B C D E F G H I Question 2 : A B C D E F G H I Question 3 : A B C D E F G H Question 4 : A B C D E F G H Question 5 : A B C D E F G H Question 6 : A B C D E F G H
Question 7 : A B C D E F G H I J K L Question 8 : A B C D E F G H I J K L
Question 9 : A B C D E F G H I J K L M N O P
Question 10 : A B C D E F G H I J K L M N O P
Question 11 : A B C D E F G H I J K L M N O P
Question 12 : A B C D E F G H I J K L M N O P
Question 13 : A B C D E F G H I J K L Question 14 : A B C D E F G H
Question 15 : A B C D E F G H
Question 16 : A B C D E F G H I J K L M N O P
Question 17 : A B C D E F G H I J K L M N O P Q R S T
Question 18 : A B C D E F G H I J K L M N O P Q R S T
Question 19 : A B C D E F G H I J K L M N O P Q R S T
Question 20 : A B C D E F G H I J K L M N O P Q R S T
1 Annexes (détachable)
1.1 39 instructions Pep/8
Spécif. Instruct. Signications Modes Codes conditions
instr. d'adressage aectés
00000000 STOP Arrête l'exécution du programme 00000001 RETTR Retour d'interruption
00000010 MOVSPA Placer SP dans A 00000011 MOVFLGA Placer NZVC dans A
0000010a BR Branchement inconditionnel i,x
0000011a BRLE Branchement si inférieur ou égal i,x
0000100a BRLT Branchement si inférieur i,x
0000101a BREQ Branchement si égal i,x
0000110a BRNE Branchement si non égal i,x
0000111a BRGE Branchement si supérieur ou égal i,x
0001000a BRGT Branchement si supérieur i,x
0001001a BRV Branchement si débordement i,x
0001010a BRC Branchement si retenue i,x
0001011a CALL Appel de sous-programme i,x
0001100r NOTr NON bit-à-bit du registre NZ
0001101r NEGr Opposé du registre NZV
0001110r ASLr Décalage arithmétique à gauche du registre NZVC 0001111r ASRr Décalage arithmétique à droite du registre NZC
0010000r ROLr Décalage cyclique à gauche du registre C
0010001r RORr Décalage cyclique à droite du registre C
001001nn NOPn Interruption unaire pas d'opération
00101aaa NOP Interruption non unaire pas d'opération i
00110aaa DECI Interruption d'entrée décimale d,n,s,sf,x,sx,sxf NZV 00111aaa DECO Interruption de sortie décimale i,d,n,s,sf,x,sx,sxf
01000aaa STRO Interruption de sortie de chaîne d,n,sf
01001aaa CHARI Lecture caractère d,n,s,sf,x,sx,sxf
01010aaa CHARO Sortie caractère i,d,n,s,sf,x,sx,sxf
01011nnn RETn Retour d'un appel avec n octets locaux
01100aaa ADDSP Addition au pointeur de pile (SP) i,d,n,s,sf,x,sx,sxf NZVC 01101aaa SUBSP Soustraction au pointeur de pile (SP) i,d,n,s,sf,x,sx,sxf NZVC 0111raaa ADDr Addition au registre i,d,n,s,sf,x,sx,sxf NZVC 1000raaa SUBr Soustraction au registre i,d,n,s,sf,x,sx,sxf NZVC 1001raaa ANDr ET bit-à-bit du registre i,d,n,s,sf,x,sx,sxf NZ 1010raaa ORr OU bit-à-bit du registre i,d,n,s,sf,x,sx,sxf NZ
1011raaa CPr Comparer registre i,d,n,s,sf,x,sx,sxf NZVC
1100raaa LDr Placer 1 mot dans registre i,d,n,s,sf,x,sx,sxf NZ 1101raaa LDBYTEr Placer octet dans registre (0-7) i,d,n,s,sf,x,sx,sxf NZ 1110raaa STr Ranger registre dans 1 mot d,n,s,sf,x,sx,sxf
1111raaa STBYTEr Ranger registre (0-7) dans 1 octet d,n,s,sf,x,sx,sxf
1.2 8 directives Pep/8
Directive Signication
.BYTE Réserve 1 octet mémoire avec valeur initiale.
.WORD Réserve 1 mot mémoire avec valeur initiale.
.BLOCK Réserve un nombre d'octets mis à zéro.
.ASCII Réserve l'espace mémoire pour une chaîne de caractères (ex: "Chaîne").
.ADDRSS Réserve 1 mot mémoire pour un pointeur.
.EQUATE Attribue une valeur à une étiquette.
.END Directive obligatoire de n d'assemblage qui doit être à la n du code.
.BURN Le programme se terminera à l'adresse spéciée par l'opérande.
Ce qui suit .BURN est écrit en ROM.
1.3 Codes ASCII importants (hexadécimaux)
Codes ASCII Caractères
00 Caractère NUL
0A Caractère de saut de ligne '\n' (Enter)
20 Espacement ' '
30 Premier chire '0'
41 Premier caractère alphabétique majuscule 'A' 61 Premier caractère alphabétique minuscule 'a'
1.4 Adressages
Mode aaa a Lettres Opérande
Immédiat 000 0 i Spec
Direct 001 d mem[Spec]
Indirect 010 n mem[mem[Spec]]
Sur la pile 011 s mem[PP+Spec]]
Indirect sur la pile 100 sf mem[mem[PP+Spec]
Indexé 101 1 x mem[Spec + X]
Indexé sur la pile 110 sx mem[PP+Spec+X]]
Indirect indexé sur la pile 111 sxf mem[mem[PP+Spec]+X]
1.5 Registres
Symbole r Description Taille
N Négatif 1 bit
Z Nul (Zero) 1 bit
V Débordement (Overow) 1 bit
C Retenue (Carry) 1 bit
A 0 Accumulateur 2 octets (un mot)
X 1 Registre d'index 2 octets (un mot) PP Pointeur de pile (SP) 2 octets (un mot) CO Compteur ordinal (PC) 2 octets (un mot)
Spécicateur d'instruction 1 octet
Spec Spécicateur d'opérande 2 octets (un mot)