Vous êtes sur la page 1sur 3

Correction Examen – Session Principale

EE Processors & Programmable Logic Date 30 novembre 2020


Classe INDP2 Durée 1H30 mn
Enseignant F. Tlili, C. Rebai, M. Ben Romdhane, K. Grati, Barème 5–7-8
L. Bel Hadj Slama, A. Ghazel

Supports de cours non autorisés – Liste des instructions ARM autorisée

Exercice 1 : (5 pts)
1) 4 bytes
2) @bit_band = 0x22000000 +( 0x20 * 0x11) + (0x4 * 0x6)= 0x22000238
Avec
Byte offset = 0x11
Bit position = 0x6
Bit band base = 0x22000000
3) LDRSB R1, [R0] ; Charger un Byte avec extension de signe
4) ASR R1, #1 ; un décalage arithmétique à droite permet de diviser par deux tout en
gardant le bit de signe.
5) SUBS R0, R1, R2 ; le préfixe « S » permet la mise à jour des bits d’état dans le xPSR
register.

Exercice 2 : (7 pts)
1) R1=0 (initialisation par Xor). 1pt
2) Les éléments de la table sont codés sur 4 cases mémoire. 1pt
3) L’écriture s’effectue seulement sur la mémoire de type SRAM. 1pt
4) Compter le nombre d’éléments dont la valeur est inférieure à -1. 1pt
5) R1=1 (puisqu’un seul élément est inférieur à -1, 0xFFFFFFFD). 2pts

Examen « Processors & Programmable Logic », INDP2, Novembre 2020 Page 1 sur 3
Exercice 3 : (8 pts)
1) 2 pts
AREA Constants, DATA
N DCD 4
C DCD 1, 0, -1, 1
X DCD 1,2,3,4
END

2) 2 pts
MOV r0,#0 ; use r0 for I
MOV r8,#0 ; use separate index for array addresses
ADR r2,N ; get address for N
LDR r1,[r2] ; get value of N
MOV r2,#0 ; use r2 for f
ADR r3,c ; load r3 with base of c
ADR r5,x ; load r5 with base of x

3) 3 pts
loop
LDR r4,[r3,r8] ; get c[i]
LDR r6,[r5,r8] ; get x[i]
MUL r7,r4,r6 ; compute c[i]*x[i]
ADD r2,r2,r7 ; add into running sum
ADD r8,r8,#4 ; add one word offset to array address
ADD r0,r0,#1 ; add 1 to i
CMP r0,r1 ; exit?
BLT loop ; if i < N, continue
SWI 0x11
4) 1 pt
AREA Program, CODE, READONLY
ENTRY
Main
MOV r0,#0 ; use r0 for I
MOV r8,#0 ; use separate index for array addresses
ADR r2,N ; get address for N
LDR r1,[r2] ; get value of N
MOV r2,#0 ; use r2 for f
ADR r3,c ; load r3 with base of c
ADR r5,x ; load r5 with base of x

Examen « Processors & Programmable Logic », INDP2, Novembre 2020 Page 2 sur 3
loop
LDR r4,[r3,r8] ; get c[i]
LDR r6,[r5,r8] ; get x[i]
MUL r7,r4,r6 ; compute c[i]*x[i]
ADD r2,r2,r7 ; add into running sum
ADD r8,r8,#4 ; add one word offset to array address
ADD r0,r0,#1 ; add 1 to i
CMP r0,r1 ; exit?
BLT loop ; if i < N, continue
SWI 0x11

AREA Constants, DATA


N DCD 4
C DCD 1, 0, -1, 1
X DCD 1,2,3,4
END

Examen « Processors & Programmable Logic », INDP2, Novembre 2020 Page 3 sur 3