TD5 2020 Correction

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 6

TD5 : Assembleur Cortex M4

TD N°05 : Assembleur CORTEX M4

Exercice 1

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

AREA |.text|, CODE, READONLY ; création d’une zone dans la mémoire code
pour enregister

; du code assembleur converti en binaire

x EQU 0x7 ; constante x ayant la valeur 7 en hexadécimal

y EQU 0x9 ; constante y ayant la valeur 9 en hexadécimal

MIN EQU 0x0 ; constante Min ayant la valeur 0 en hexadécimal

ENTRY ; entrée du programme principal

EXPORT __main ; déclaration d’un label __main (équivalent à l’adresse de


début qui va être

;exporté à tout fichier externe surtout celui du reset)

__main

LDR R1, =x ; R1=00000007H

LDR R2, =y ; R2= 00000009H

LDR R3, =MIN ; R3=00000000H

CMP R1, R2 ; faire R1-R2 sans enregistrement et update du PSR

;(PSR affecté : N=1 Z=0 C=0 V=0)

BLS Inst1 ; la condition est vraie, aller vers Inst1

MOV R3, R2

B fsi

Inst1

MOV R3, R1 ; R3=00000007H

fsi

NOP

2019-2020
TD5 : Assembleur Cortex M4

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]

4) Quelles sont les modifications qui seront ajoutées si x et y sont codés sur 16 bits ? sur
32 bits ?
16 bits 32 bits
données DCW au lieu de DCB DCD au lieu de DCB
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]

.. ..

… …

2019-2020
TD5 : Assembleur Cortex M4

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 ARM:

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.

N’oubliez pas de commenter votre programme.


AREA |.text|, CODE, READONLY
LDR R0, =xx ; mettre dans R0 l’adresse de xx
LDR R1, =0xFFFF ; valeur maximale pour la taille 16 bits enregistrée dans les deux
;octets de poids faible de R1
STRH R1, [R0] ; enregistrer les deux octets de poids faible de R1 dans deux cases
;mémoire pointée par l’adresse contenue dans R0 qui est celle de xx
; donc on a remplacé la valeur de xx par 0xFFFF

Exercice 3

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

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

2019-2020
TD5 : Assembleur Cortex M4

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

Méthode inconditionnelle

AREA |.text|, CODE, READONLY

LDR R2, =x

LDR R2, [R2]

LDR R3, =y

LDR R3, [R3]

CMP R2,R3

BGE else

ADD R2,R2,#1

B suite

else

ADD R3,R3,#3

suite

Méthode conditionnelle :

AREA |.text|, CODE, READONLY

LDR R2, =x

LDR R2, [R2]

2019-2020
TD5 : Assembleur Cortex M4

LDR R3, =y

LDR R3, [R3]

CMP R2, R3

ADDLS R2 , R2,#1

ADDGE R3, R3, #3

Exercice 4
Soit la fonction Somme permettant de retourner la somme d’un tableau de N entiers signés sur
8 bits.
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 mettre à jour PSR
BNE loop
sortie
MOV R0,R2 ; valeur de retour qui est la somme finale mise dans R0
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
initialisés par défaut à 0 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 ; initialiser 100 cases à 0 pointée par l’étiquette tab

2019-2020
TD5 : Assembleur Cortex M4

result DCD 0

AREA |.text|, CODE, READONLY

LDR R0,=tab

LDR R1,=100

LDR R2,=0

; on va remplir le tableau

loop

ADD R2,R2,#1

STRSB R2, [R0],#1 ;R0=R0+1

CMP R1, R2

BNE loop

LDR R0,=tab

; R0 contient tab et R1 contient 100 (taille du tableau) à la sortie de la boucle

; appeler Somme

BL Somme

LDR R1, =result

STR R0,[R1] ; stocker la valeur de retour R0 dans result

2019-2020

Vous aimerez peut-être aussi