0% ont trouvé ce document utile (0 vote)
24 vues5 pages

Instructions ARM Thumb et Exécution

Transféré par

cherni ibtissem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
24 vues5 pages

Instructions ARM Thumb et Exécution

Transféré par

cherni ibtissem
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

TD4

TD N°04_correction

Exercice
Soit un exemple de processeur ARM qui ne fonctionne qu’en mode Thumb dont un extrait de
son ISA est donné par le tableau suivant :
Instruction Action (C_style coding) Codage en binaire (16 bits)
ADDS Rds, #imm8 Rds = Rds + ZeroExtend(imm8,32) 0 0 1 1 0 Rds Imm8
Mettre à jour APSR (NZCV)
ADDS Rd, Rs1,Rs2 Rd=Rs1+Rs2 0 0 0 1 1 0 0 Rs2 Rs1 Rd
Mettre à jour APSR (NZCV)
SUBS Rds, #imm8 Rds = Rds - ZeroExtend(imm8,32) 0 0 1 1 1 Rds Imm8
Mettre à jour APSR (NZCV)
SUBS Rd, Rs1,Rs2 Rd=Rs1- Rs2 0 0 0 1 1 0 1 Rs2 Rs1 Rd
Mettre à jour APSR (NZCV)
CMP Rs, #imm8 Rs - ZeroExtend(imm8,32) 0 0 1 01 1 Rs Imm8
Mettre à jour APSR (NZCV)
CMP Rs1,Rs2 Rs1 – Rs2 0 1 0 0 0 0 1 0 1 0 Rs2 Rs1
Mettre à jour APSR (NZCV)
ANDS Rds, Rs Rds=Rds & Rs 0 1 0 0 0 0 0 0 0 0 Rs Rds
Mettre à jour APSR (NZ)
ORRS Rds, Rs Rds=Rds | Rs 0 1 0 0 0 0 1 1 0 0 Rs Rds
Mettre à jour APSR (NZ)
EORS Rds, Rs Rds=Rds ^Rs 0 1 0 0 0 0 0 0 0 1 Rs Rds
Mettre à jour APSR (NZ)
LDR Rt,[Ra,{#imm5}] Rt=MEM[Ra+ imm32] 0 1 1 0 1 Imm5 Ra Rt
LDR r1, [r0] imm32= ZeroExtend(imm5 :’00’,32)
STR Rt,[Ra, ,{#imm5}] MEM[Ra+ imm32]=Rt 0 1 1 0 0 Imm5 Ra Rt
imm32= ZeroExtend(imm5 :’00’,32)

Rs, Rs1, Rs2: numéros des registres source


Rd : numéro d’un registre destination
Rds : numéro d’un registre qui est à la fois source et destination
Rt : numéro d’un registre data
Ra : numéro d’un registre adresse
imm5, imm8, imm32 : valeurs immédiates avec chiffre désignant le nombre de bits de codage
# : Symbole obligatoire précédent aux valeurs immédiates en assembleur ARM
{} : Pour dire que c’est facultatif

D’après cet extrait :


1) Est ce que ce processeur appartient à la famille RISC ou CISC ? Justifier.
RISC car les seules instructions qui accèdent à la mémoire sont LDR (de type Load) et
STR (de type store)

2) Combien le processeur contient au maximum de registres internes ?

8 registres car on identifie les champs registres dans toutes les instructions avec 3 bits

2019-2020
TD4

3) Commenter et coder en hexadécimal les instructions suivantes :


LDR r1, [r0] ; charger dans r1 les 4 octets (mot) de la mémoire à partir de
l’adresse ;contenue dans r0

SUBS r3, r2, r1 ; soustraire le contenu de r1 du contenu de r2 et charger le résultat dans r3

; Selon le résultat on fait la MAJ des bits NZVC du PSR

EORS r4, r2 ; faire le XOR binaire du contenu de r2 et du contenu de r4 et charger le


résultat ;dans r4

; Selon le résultat on fait la MAJ des bits NZ du PSR

STR r4, [r0, #10] ; charger le contenu de r4 dans 4 cases mémoire successives à partir
de ;l’adresse donnée par le contenu de r0 décalée de 10 positions

En binaire en hexadécimal
LDR r1, [r0] 01101 00000 000 001 6801
SUBS r3, r2, r1 0001101 001 010 011 1A53
EORS r4, r2 0100000001 010 100 4054
STR r4, [r0, #10] 01100 01010 000 100 6284

4) Sachant que la cartographie mémoire est la même que le Cortex M4,


a) expliquer pourquoi on peut enregistrer l’extrait de programme précédent à
partir de l’adresse 0x00001008 ?
L’adresse de début 0x00001008 appartient à la marge des valeurs des adresses de la mémoire
Flash (CODE) entre 0x00000000 et 0x1FFFFFFF
Notre programme comporte 2×4 Octets donc nécessite 8 cases mémoire donc l’adresse de fin est
0000 1008 + 0000 0008 -1 = 0000 100F qui appartient aussi à le même marge des adresses.
b) Schématiser l’enregistrement l’extrait de programme précédent dans la
mémoire à partir de cette adresse (contenu écrit en hexadécimal) sachant que le
processeur est LE.

2019-2020
TD4

Adresse mémoire (en Contenu de la case (en hexa)


hexa)
00001008 01
00001009 68
0000100A 53
0000100B 1A
0000100C 54
0000100D 40
0000100E 84
0000100F 62

5) Exécuter pas à pas l’extrait de programme sachant que le contenu de certains registres
est le suivant :
 r0 : 0x30000001
 r2 : 0x00AF0001
 r4 : 0x0000FFFF

Et que le contenu de la mémoire à :

 adresse 0x30000001 : 00
 adresse 0x30000002 : 3B
 adresse 0x30000003 : 00
 adresse 0x30000004 : F0
Au début :
r0 Mémoire SRAM (DATA)
30000001
r2 adresse contenu
30000001 00
00AF0001 30000002 3B
r4 30000003 00
30000004 F0
0000FFFF

LDR r1, [r0]


r1
2019-2020
TD4

F0003B00

SUBS r3, r2, r1

00AF0001 – F0003B00 :

0000 0000 1010 1111 0000 0000 0000 0001

1111 0000 0000 0000 0011 1011 0000 0000

Ce qui revient en complément à 2:

0000 0000 1010 1111 0000 0000 0000 0001

0000 1111 1111 1111 1100 0101 0000 0000

0001 0000 1010 1110 1100 0101 0000 0001

= 10AE C501

r3

10AEC501

Dans PSR: N=0 Z=0 C=0 V=0

EORS r4, r2

00AF0001⊕0000FFFF : 0000 0000 1010 1111 0000 0000 0000 0001

⊕ 0000 0000 0000 0000 1111 1111 1111 1111

= 0000 0000 1010 1111 1111 1111 1111 1110

= 00AFFFFE

r4
00AFFFFE

2019-2020
TD4

Dans PSR: N=0 Z=0

STR r4, [r0, #10]

r0+10 = 30000001+ 0000000A = 3000000B

Mémoire SRAM (DATA)

adresse contenu
r4 30000001 00
30000002 3B
00AFFFFE 30000003 00
30000004 F0
...
3000000B FE
3000000C FF
3000000D AF
3000000E 00

2019-2020

Vous aimerez peut-être aussi