Vous êtes sur la page 1sur 5

Systèmes embarqués ENICarthage 2017/2018

TD 2 : Assembleur ARM

EXERCICE 1
On considère le programme suivant (fichier test.s) écrit en langage d’assemblage ARM :

AREA |.text|, CODE, READONLY
x EQU 0x7
y EQU 0x9
MIN EQU 0x0
ENTRY
EXPORT __main
__main
LDR R1, =x    ; R1=0x7
LDR R2, =y    ; R2=0x9
LDR R3, =MIN  ; R3=0x0
CMP R1, R2    ;  PSR affecté : N=1 Z=0 C=0 V=0 
(faire addition R1 + (­R2) pour trouver C et V)
BLS Inst1     ; la condition est vraie; aller à inst1
MOV R3, R2
B fsi
Inst1
MOV R3, R1 ; R3=0x7
fsi
NOP
END

1. Expliquer le fonctionnement de ce programme en donnant après l’exécution de chaque


instruction le contenu du registre modifié
le programme calcule le minimum entre x et y
2. Le résultat stocké dans quel registre ?
Résultat dans R3
3. Réécrire le programme dans le cas ou x, y et MIN sont des variables stockées dans une
mémoire de type READWRITE (x, y et MIN sont des entiers codés sur 8 bits)
AREA donnees, DATA, READWRITE
x DCB 0x7
y DCB 0x9
MIN DCB 0x0
AREA |.text|, CODE, READONLY
ENTRY
EXPORT __main
__main
LDR R1, =x   
LDRB R1, [R1] 
LDR R2, =y 
LDRB R2, [R2]   
CMP R1, R2
BLS Inst1 
MOV R3, R2
B fsi
Inst1
MOV R3, R1 
fsi
LDR R1,=MIN
STRB R3,[R1]

-1-
4. Quelles sont les modifications qui seront ajoutées si x et y sont codés sur 16 bits ? sur 32
bits ?

16 bit 32 bits
données DCW au lieu de DCB DCD
programme LDR R1,=x LDR R1,=x
LDRH R1, [R1] LDR R1, [R1]
LDR R2,=y LDR R2,=y
LDRH R2, [R2] LDR R2, [R2]
.. ..
… …
STRH R3,[R1] STR R3,[R1]

EXERCICE 2
On considère le lexique suivant :
aa: le caractère ’F’
bb: le caractère ’y’
xx: l’entier naturel sur 16 bits 264
yy: l’entier naturel sur 32 bits 2387
Ecrire en langage d’assemblage :
1. La réservation de place dans la section data qui correspond à ce lexique.
AREA donnees, DATA, READWRITE
aa DCB ‘F’
bb DCB ‘y’
xx DCW 264
yy DCD 2387
2. La section text d’un programme qui remplace la valeur à l’adresse xx par la valeur maximale
qui peut y être stockée.
AREA |.text|, CODE, READONLY
LDR R0, =xx
LDR R1, =0xFFFF  
STRH R1, [R0] 

EXERCICE 3
On considère l’extrait de programme C suivant :

int x, y ; /* int est le type entier relatif */


if (x < y) x = x + 1 ; else y = y + 3 ;

Les variables x, y sont respectivement implantées dans les registres r2, r3

1. Donner une zone data déclarant les 2 variables x et y


AREA donnees, DATA, READWRITE
x DCD 0
y DCD 0
2. Ecrire le programme en assembleur ARM
AREA |.text|, CODE, READONLY
LDR R2, =x
LDR R2, [R2] 
LDR R3, =y
LDR R3, [R3]

-2-
CMP R2,R3
BGE else
ADD R2,R2,#1
B suite
else
ADD R3,R3,#3
suite
 

EXERCICE 4
Soit la fonction Somme permettant de retourner la somme d’un tableau de N entiers signés sur 8.
int Somme(char * tab, int N)
1. Ecrire un programme assembleur ARM qui implémente cette fonction
AREA |.text|, CODE, READONLY
Somme 
; selon la convention de passage de paramètres ARM, R0 contient tab et
; R1 contient N (R0,R1,R2 et R3 utilisées pour passer jusqu’à 4
; paramètres). La valeur de retour sera dans R0
LDR R2,=0 ; R2 va contenir la somme
CMP R1,#0 ; tester si N est initialement nul
BEQ sortie
loop
LDRSB R3,[R0],#1 ; lire un octet signé et incrémente R0 de 1
ADD R2,R2,R3
SUBS R1,R1,#1 ; (S) pour metter à jour PSR 
BNE loop
sortie
MOV R0,R2
BX LR

2. Ecrire un programme principal en assembleur qui :


• déclare deux variables en mémoire : un tableau tab de 100 entiers sur 8 bits non initialisés
et une variable result sur 32 bits
• remplit le tableau avec des valeurs de 1 à 100
• teste la fonction Somme en utilisant les deux variables déclarées précédemment
AREA donnees, DATA, READWRITE
tab space 100
result DCD 0
AREA |.text|, CODE, READONLY
LDR R0,=tab
LDR R1,=100
ADD R0,R0,R1 ;on va parcourir le tableau à l’inverse
loop
STRSB R1, [R0,#­1]!   ;R0=R0­1 à la fin du transfer
SUBS R1,#1
BNE loop
;R0 contient tab à la sortie de la boucle, remettre R1 à 100 et 
;appeler Somme
LDR R1,=100
BL Somme
LDR R1,=result ; stocker la valeur de retour R0 dans result
STR R0,[R1] 

-3-
Annexe
- Instructions du processeur ARM

- Codes de conditions arithmétiques cc pour l’instruction de branchement Bcc

-4-
-5-