Objectifs du TP : Apprendre à écrire un programme en langage

publicité
Architecture des systèmes à base de microprocesseur
IN3R12, 2013/2014
Accès aux données et opérations arithmétiques
TP1 (4h)
Objectifs du TP :
 Apprendre à écrire un programme en langage assembleur et le traduire en code
machine exécutable par un microprocesseur ;
 Exécuter le programme à l’aide d’un simulateur de ARM Cortex M3 (logiciel µVision
de Keil) ;
 Apprendre à observer, analyser et comprendre les résultats obtenus après
l’exécution des différentes instructions (contenus des registres internes (R0-R12, PC,
xPSR), et de la mémoire.
Remarques sur la méthode de travail :
 Notez vos observations afin de pouvoir vous en servir pour la révision ;
 Avant d’exécuter une instruction, évaluez le résultat attendu « à la main » pour
vérifier le résultat obtenu pas la suite.
… continuez sur la page suivante
Partie 1 : Prise en main de l’environnement de développement µVision
Vous commencerez par créer un projet, selon les instructions dans le tutoriel fourni. Voici un
programme simple qui vous permet de découvrir la structure d’un programme en langage
assembleur, l’exécuter et apprendre à utiliser les différentes informations du simulateur
(contenu des registres, de la mémoire, le PC, xPSR, …)
Créez le nouveau fichier <nom_programme>.s (remplacez le <nom_programme> par un nom
de fichier de votre choix>), recopiez cet exemple et ajouter le au projet. Assembler le projet,
selon les instructions dans le tutoriel.
;; Premier programme pour la prise en main du simulateur
;; Respectez l’alignement des différentes parties
AREA TP1, CODE, READONLY
; AREA – indique une nouvelle section de programme, obligatoire en assembleur ARM
; CODE – il s’agit de la partie du programme contenant des instructions
; READONLY – ce programme sera mis dans la mémoire ROM
X
EQU 255
Y
EQU -128
Z
EQU 25800
ENTRY
; ENTRY – indique le début du programme
EXPORT __main
; EXPORT – indique que fonction __main sera utilisée dans un autre fichier
__main
; __main étiquette représentant le nom de cette partie du programme (fonction)
; charger X,Y,Z dans des différents registres
MOV r1,#X
MOV r2,#Y
LDR r3,=X
LDR r4,=Z
; faire quelques opérations arithmétiques
ADDS r1,r2
ADDS r3, r4
; fin de programme
NOP
END
QUESTION 1 : Après avoir assemblé le programme mais avant son exécution, regardez dans
le dossier du travail et ouvrez le fichier <nom_programme>.lst. Quelle est la taille du
programme dans l’exemple utilisé ? Vérifiez le résultat obtenu à l’aide du fichier
<nom_projet>.map.
QUESTION 2 : Toujours avec le fichier <nom_projet>.map , à quelle adresse sera placée la
première instruction du programme de notre exemple ?
QUESTION 3 : Selon les indications dans le tutoriel, lancez l’exécution du programme en
mode pas à pas et observez les contenus des registres R0-R12, xPSR, PC (R15)
 Quelle est l’adresse de la première instruction de la fonction __main (réponse de la
précédente question)
 Quelle est la valeur du PC avant exécuter cette première instruction ?
 Quelle est la valeur du PC après son exécution et à quoi cela correspond ?
 Quel est l’état des indicateurs N,Z,X,C après l’instruction ADDS r1,r2 ?
Partie 2 : Exercices – Opérations arithmétiques et logiques
Opérations arithmétiques et logiques : donner pour chacune des opérations ci-dessous,
l’instruction en langage assembleur ARM Cortex – M3. On traitera le cas des données
codées 32 bits. Pour ces exercices, les registres seront initialisés à l’aide des constantes
définies avec la directive EQU. Les résultats sont rangés dans un registre.
Donner pour chacune de ces opérations le résultat attendu, ainsi que l’état des indicateurs
N, Z, V et C positionnés à 1. Vérifier à l’aide du simulateur µVISION4que le résultat observé
correspond à celui attendu.






254 + 1
(-3) + (-127)
28+30
0x80000000 + 0x80000000
0xFFFFFFFF ET 0x0000FFFF
0xFFFF0000 OU 0x0000FFFF
Partie 3 : Exercices – Accès aux données
En partant de l’exemple suivant, complétez-le pour réaliser les exercices ci-dessous. Pour
chaque opération, donner le contenu de registre modifié ou de la mémoire modifiée.
On suppose que le contenu de la mémoire en octet à partir de l’adresse indiquée par
l’étiquette TAB est le suivant : 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA,
0x01, 0x02,0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09.
Chaque exercice sera réalisé a) avec un mode d’adressage indirect et b) mode d’adressage
indirecte avec décalage.



lire le 8ème élément de cette zone lui ajouter la valeur 5 et le ranger dans le registre
R3
lire le 2ème et le 3ème élément à partir de l’élément de valeur 0x88, les additionner
et ranger le résultat dans le 1er élément de la zone d’adresse indiquée par
l’étiquette R
lire 4 octets consécutifs à partir du 11ème élément, faire un décalage à gauche de
deux positions, ranger le résultat à l’adresse de R.
;; Programme pour réaliser les exercices TP1
AREA TP1P3, CODE, READONLY
; définir les constantes avec EQU ci-dessous
X
EQU 5
ENTRY
EXPORT __main
__main
; quelques exemples d’accès aux données et obtention des adresses des tableaux
LDR
LDR
LDRB
LDR
R0,=X ; on initialise le R0 avec la valeur de X, équivalent à MOV R0,#X
R1,=TAB ; on récupère l’adresse du premier élément de tableau TAB
R2,[R1] ; on récupère la valeur du premier élément
R3,=R ; on récupère l’adresse de R
; mettre les instructions pour réaliser les exercices
NOP
; Section DATA pour initialiser le contenu de la mémoire
AREA TP1d, DATA, READONLY
TAB DCB 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0x01,0x02,0x03
R
AREA TP1dw, DATA,READWRITE
SPACE 4
END
Téléchargement