Vous êtes sur la page 1sur 7

NOM: Semestre:

Prénom: Signature:

NF02 Automne 2015


Examen final
(2 h, tous documents autorisés sauf annales)
Chaque section correspond à une ou plusieurs feuilles d'énoncé : répondre impérativement sur
les feuilles correspondantes (recto verso) exclusivement

Exercice 1 - Programme simple (6 points)


On veut ajouter le contenu de la variable mot ELEMENT (adresse $6000) à une liste s’il
n’en fait pas déjà partie. La liste est composée d’éléments, de la taille d’un mot, et son adresse de
début est contenue dans la variable mot List, située à l’emplacement mémoire $6002. Le premier
mot de la liste contient la longueur de la liste en mots. L’ajout du mot ELEMENT dans la liste
devra se faire en début de la liste ; les autres valeurs de la liste seront décalées à la suite.
Deux exemples d’exécution

adresse adresse physique contenu mémoire


symbolique en hexadécimal en hexadécimal
1) Entrée : ELEMENT 6000 16 82
LIST 6002 50 00 Adresse de la liste

5000 00 04 Longueur de la liste


5002 53 76
5004 76 18
5006 13 8A
5008 21 DC

Sortie : 5000 00 05 Nouvelle Longueur de la liste


5002 16 82
5004 53 76
5006 76 18
5008 13 8A
500A 21 DC

2) Entrée : ELEMENT 6000 16 82


LIST 6002 50 00

5000 00 03
5002 53 76
5004 16 82
5006 74 31
Sortie: aucun changement, puisque l’élément ($1682) est déjà dans la liste en $5004.
1/7
Ecrire le programme assembleur correspondant aux spécifications précédentes.

2/7
NOM: Semestre:

Prénom: Signature:

Exercice 2 - Sous-programmes (7 points)

Produit scalaire de mots entiers signés

On se propose de calculer, par un sous-programme d'adresse symbolique PSCAL, le produit scalaire


de deux vecteurs Vec1 et Vec2 dont les 3 composantes sont des mots entiers signés de 16 bits. Si on
note xi et yi les composantes des vecteurs Vec1 et Vec2, le produit scalaire est un entier signé 32 bits
3
égal à x i y i . Le résultat devra être stocké à l'adresse symbolique RESULT.
i 1
Le sous-programme PSCAL utilisera comme arguments d'entrée dans la pile successivement les
adresses symboliques Vec1, Vec2 et RESULT (adresses physiques $2000, $2006 et $200C).

Exemple d'exécution du produit scalaire

Adresse symbolique Adresse physique Contenu hexadécimal 16 bits


Vec1 $2000 $0002
$2002 $0001
$2004 $0003
Vec2 $2006 $0005
$2008 $0002
$200A $0003
RESULT $200C $0000
$200E $0015

II.1 Ecrire avec commentaires le programme principal PP contenant le chargement en pile des 3
arguments d’entrée (Vec1, Vec2 et RESULT) et l’appel du sous-programme PSCAL.

Assembleur Commentaires
PP:

3/7
II.2 Donner le schéma de la pile après l’appel du sous-programme PSCAL, sachant que le registre
SP vaut $3FFE au début du programme principal PP : on indiquera la place des 3 arguments
d’entrée (Vec1, Vec2 et RESULT) dans la pile et la valeur de SP après l’appel de PSCAL dans le
programme principal PP.

Schéma de la pile après l’appel au sous-programme PSCAL

Pointeur de pile Adresse physique Contenu hexadécimal 8 bits


$3FF5
$3FF6
$3FF7
$3FF8
$3FF9
$3FFA
$3FFB
$3FFC
$3FFD
$3FFE

II.3 Le sous-programme PSCAL devra sauvegarder dans la pile les registres de donnée et d'adresse
utilisés dans le sous-programme; il devra aussi comporter une boucle. D’autre part, on utilisera
l’instruction EMULS qui fait le produit des registres Y et D et qui donne le résultat sur 32 bits dans Y :
D (partie haute dans Y, partie basse dans D).
Écrire avec commentaires le programme assembleur du sous-programme PSCAL.

Assembleur Commentaires
PSCAL:

4/7
NOM: Semestre:

Prénom: Signature:

Exercice 3 - Interface parallèle (7 points)

On souhaite contrôler un ascenseur privatif, pour un immeuble de 4 étages (Rez-de-chaussée


+ 3 étages, avec un appartement par étage) avec un microcontrôleur HCS12. Ce système doit
fonctionner de la manière suivante :

Le clavier permet à l’utilisateur de rentrer un code de 3 digits hexadécimaux (12 bits) qui, quand
l’utilisateur le valide, en appuyant sur le bouton de validation en dessous du clavier, est positionné
sur 12 bits des ports H et J (PTH0-7=partie basse du Code + PTJ0-3=partie haute du Code).
L’appui sur le bouton de validation du code génère un front montant sur la ligne PTP0, qui doit
déclencher une interruption.
Cette interruption (programme d’adresse $3000) doit permettre de tester, à partir de la table de
codes admis, si le code entré correspond à un des 4 codes admis. Cette comparaison se fait grâce à
un sous-programme, SP Compare, qui a, comme argument d’entrée, le Code positionné dans
l’accumulateur D, et comme arguments de sortie : le bit Z (Z=1 si le code est reconnu, Z=0
autrement) et le numéro de l’étage associé au code, qui est transmis par l’accumulateur B:

Codes admis code étage


Code0 RdC
Code1 Etage 1
Code2 Etage 2
Code3 Etage 3
Si le code est reconnu, le PI doit :
o amener l’ascenseur à l’étage où le code a été entré (grâce à un SP Appel)
o ouvrir la porte (Ligne PTP6) et attendre que l’utilisateur appuie sur le numéro d’un étage.
Le choix de l’étage se traduit par l’envoi du numéro de l’étage sur les lignes PTJ6-7 et la
génération d’un front descendant sur la ligne PTP1
o vérifier que le numéro de l’étage rentré correspond bien à celui associé au code reconnu.
 Si oui, fermer la porte (Ligne PTP6) et mettre en marche le moteur de l’ascenseur pour
aller à l’étage désiré (Ligne PTP7). Le moteur doit rester en marche pendant une durée
qui dépend de l’étage à atteindre (gérée par un SP Durée). Puis arrêter le moteur et
ouvrir la porte. Après 10 s, fermer la porte.
 Si non, sortir de l’interruption et attendre un nouveau code.
Si non, sortir de l’interruption et attendre un nouveau code.
5/7
III.1 Complétez le tableau avec les valeurs initiales à mettre dans les registres concernés du
HCS12. (les valeurs indéterminées seront remplacées par " x " en valeur binaire)

Nom du registre Valeur binaire Commentaires

III.2 Quelles autres initialisations sont à réaliser pour le microcontrôleur ?

III.3 Que faudrait-il changer si on veut travailler par scrutation de PTP0 plutôt que par une
interruption ?

6/7
III.4 On choisit de travailler avec une interruption sur PTP0. Donnez l'algorithme du
programme principal (PP) et du programme d'interruption (PI).

PP PI

7/7

Vous aimerez peut-être aussi