Corige 3333
Corige 3333
Corige 3333
Etiemble
Licence d’Informatique
On suppose que les registres R0 à R5 ont les contenus suivants, exprimés en hexadécimal :
R0 0000 0000
R1 8888 AAAA
R2 FEDC 3210
R3 0000 000C
R4 A800 0000
R5 C000 0000
Q 1) Donner les valeurs des registres modifiés après exécution des instructions suivantes.
a) ADD R6, R1,R2 R6 =8764DCBA
b) ADDU R7, R4, R5 R7 = 68000000 (Débordement : négatif + négatif donne positif)
c) ADD R8, R4, R5 Trappe débordement (Débordement : négatif + négatif donne
positif)
d) SUB R8, R5, R3 R8 = BFFFFF4
e) SRA R9,R5,8 R9 = FFC0 0000
f) SRL R10,R2,16 R10 = 0000 FEDC
1 2012-2013
Université Paris Sud D. Etiemble
Licence d’Informatique
NB : l’ordre « little endian » range le mot 0x0A0B0C0D dans l’ordre suivant dans les 4 premiers octets
de la mémoire :
Octet d’adresse 3 : 0A
Octet d’adresse 2 : 0B
Octet d’adresse 1 : 0C
Octet d’adresse 0 : 0D
L’octet d’adresse 0 est donc 0D
Le mot de 16 bits d’adresse 0 est donc 0C0D
Le mot de 32 bits d’adresse 0 est donc 0A0B0C0D
a) LDRSB R11, [R5 ,#4] R11 = MEM8(C000 0004) = 0x FFFFFFFF98 R5 = C000 0000
b) LDRH R12, [R5,R3] R12 = MEM16 (C000 0008) = 0x 00002233 R5 = C000 0000
c) LDR R13, [R5, #12] R13 = MEM32 (C000 000C) = 0xA1B2C3D4 R5=C000 0000
d) LDR R14, [R5], #4 R14= MEM32(C000 0000) = 0x12345678 R5=C000 0004
e) LDR R6, [R5, #8] ! R6 = MEM32(C000 000C) = 0xA1B2C3D4 R5=C00 0 000C
f) STR R1,[R5], #8 MEM(C000 000C) = 0X33335555 R5=C000 0014
g) STRB R3, [R5,-R3] MEM8 (C000 000C) = 0x0000 0008 R5=C000 0014
2 2012-2013
Université Paris Sud D. Etiemble
Licence d’Informatique
Q 7) Soit le programme ARM qui effectue un traitement sur deux tableaux d’entiers X et Y.
Donner le programme C correspondant au programme assembleur ARM
Quel est le résultat de l’exécution du programme.
LDR r1,=X
LDR r2,=Y
MOV r3, #10
LOOP: LDR r4,[r1], #4
LDR r5,[r2],#4
LDR r6,[r1],#4
LDR r7,[r2],#4
ADD r0,r5,r4
STR r0,[r2, #-8]
ADD r0,r7,r6
STR r0,[r2,#-4]
SUBS r3,r3,#2
BGT LOOP
SWI 0x11 @ Stop program execution
.data
X: .word 1,-3,5,-7,9,-11,13,-15,17,-19
Y: .word 1, 2,3, 4,5, 6, 7, 8, 9, 10
Q 8) Ecrire un programme ARM qui compte le nombre d’entiers strictement positifs dans un
tableau de 10 entiers X. Le résultat sera retourné dans le registre R0.
LDR r1,=X
MOV r3, #10
LOOP: LDR r2,[r1], #4
CMP R2, #0
ADDGT r0, r0, #1
SUBS r3,r3,#1
BGT LOOP
SWI 0x11 @ Stop program execution
Q 9) Ecrire un programme ARM qui compte le nombre de bits à 1 dans le registre R1 et met
le résultat dans R0.
3 2012-2013
Université Paris Sud D. Etiemble
Licence d’Informatique
MOV R0,#0
Boucle: AND R2,R1,#1 @Test du bit de poids faible de R1
ADD R0,R0,R2
MOV R1,R1,LSR#1 @ Décalage logique d’une position à droite
CMP R1,#0
BGT Boucle @ Arrêt lorsqu’il n’y a plus de 1 dans R1
Autre solution
MOV R0,#0
Boucle : CMP R1,#0
ADDLT R0,R0,#1 @Le bit de signe est à 1
MOV R1,R1,LSL#1 @décalage à gauche
BNE Boucle @ tant qu’il reste des 1 dans R1
SWI 0x11 @ Stop program execution
4 2012-2013
Université Paris Sud D. Etiemble
Licence d’Informatique
5 2012-2013
Université Paris Sud D. Etiemble
Licence d’Informatique
6 2012-2013