Vous êtes sur la page 1sur 6

L2 STIC

TP1 : Initiation à la programmation en assembleur d’un


microprocesseur ARM et prise en main de keil µvision

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

▪ Exécuter le programme à l’aide d’un simulateur de ARM (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, CPSR), et de la mémoire.

Partie1 : Prise en main de l’outil Keil µvision


D’abord, créez un dossier et nommez le TP1. Lancez l’outil Keil µvision. Ensuite, créez un
nouveau projet que vous nommerez TP1_init.

Une fenêtre va s’ouvrir vous invitant à choisir le processeur cible. Vous choisirez ARM7 – little
endian comme le montre la figure suivante.

1/6
Emna Amouri TP1 Programmation Assembleur
L2 STIC

Créez un nouveau fichier en cliquant sur File -> New. Ensuite, enregistrez le fichier avec
l’extension (.s). (tp1.s)

Puis, ajoutez ce fichier au projet. Pour cela, vous cliquez droit sur source_group (comme le
montre la figure suivante) et vous sélectionnez ADD existing files to group.

Voici un programme simple qui vous permet de découvrir la structure d’un programme en
langage assembleur. Vous allez écrire ce programme, l’exécuter et apprendre à utiliser les
différentes informations du simulateur (contenu des registres, de la mémoire, le PC, CPSR, ...).

2/6
Emna Amouri TP1 Programmation Assembleur
L2 STIC

;; Premier programme pour la prise en main du simulateur


;; Respectez l’alignement des différentes parties

AREA mycode , 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 r5, r1, r2
SUBS r6, r3, r4

;fin de programme
NOP
END ; Mark end of file

QUESTION 1:

Tout d’abord, vous compilez le programme en cliquant sur le menu Project -> Build Target,
comme le montre la figure suivante.

3/6
Emna Amouri TP1 Programmation Assembleur
L2 STIC

Après avoir compilé le programme mais avant son exécution, regardez dans le dossier du travail
et ouvrez le fichier tp1.lst. Dans ce fichier, vous trouverez le code binaire de chaque instruction
et l’adresse mémoire à laquelle l’instruction est stockée.

Quelle est la taille du programme dans l’exemple utilisé ? Vérifiez le résultat obtenu à l’aide du
fichier tp1.map.

QUESTION 2 :

A partir du fichier tp1.map, à quelle adresse sera placée la première instruction du programme
de notre exemple ?

QUESTION 3 :

▪ Lancez l’exécution du programme en cliquant sur debug -> start debug session, ou

L’environnement de mise au point apparait (en mode simulateur). Le microprocesseur est


remis à « 0 ». Une flèche jaune indique la position du compteur de programme (PC).

4/6
Emna Amouri TP1 Programmation Assembleur
L2 STIC

- Sur la partie gauche sont visibles les registres du microprocesseur.

- En bas à gauche une fenêtre de ligne de commande

- En bas à droite une fenêtre des mémoires

▪ Exécutez le programme pas à pas en cliquant sur F11. Observez les contenus des
registres R0-R12, CPSR et PC(R15) à chaque instruction exécutée.

▪ Quelle est l’adresse de la première instruction de la fonction _main.

▪ Quelle est la valeur du PC avant d’exécuter cette première instruction ? Et quelle est la
valeur du PC après son exécution et à quoi cela correspond ?

▪ Quel est l’état des indicateurs N,Z,C après l’instruction ADDS r5, r1,r2 ?

Partie2 : Opérations arithmétiques et logiques


Donner pour chacune des opérations ci-dessous, l’instruction en langage assembleur ARM7.
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.
Vérifier à l’aide du simulateur μVISION4 que le résultat observé correspond à celui attendu.
• 0xAC - 0xAC
• 3 - 127

• 0x80000000 + 0x80000000
• 0xFF000000 OU 0x000000FF

5/6
Emna Amouri TP1 Programmation Assembleur
L2 STIC

Partie3 : 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 du 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é avec un mode d’adressage indirect avec décalage.
▪ lire le 4ème élément de cette zone, lui ajouter la valeur 5 et le ranger dans le registre R4.
▪ lire le 10ème et le 11ème élément, 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. Qu’est ce que vous remarquez ?
▪ lire 4 octets consécutifs à partir du 9ème élément, faire un décalage à gauche
de deux bits, et ranger le résultat à l’adresse de R+4.

AREA mycode , 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 R0, =X
; on initialise le R0 avec la valeur de X, équivalent à
MOV R0, #X
LDR R1, =TAB ; on récupère l’adresse du premier élément de tableau TAB
LDRB R2, [R1] ; on récupère la valeur du premier élément
LDR 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 mydata1, DATA, READONLY
TAB DCB 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0x01, 0x02, 0x03

AREA mydata2, DATA, READWRITE


R SPACE 8
END

6/6
Emna Amouri TP1 Programmation Assembleur

Vous aimerez peut-être aussi