Systèmes Embarqués 1 & 2 Jeu D'instructions Du µP ARM A.11 Assembler Instructions Handout
User Manual:
Open the PDF directly: View PDF
.
Page Count: 22
| Download | |
| Open PDF In Browser | View PDF |
Systèmes Embarqués 1 & 2
a.11 - Jeu d’instruc ons du µP ARM
Classes T-2/I-2 // 2018-2019
Daniel Gachet | HEIA-FR/TIC
a.11 | 16.11.2018
Contenu
■
Les instruc ons de transfert
Load and Store instruc on
■
Les instruc ons pour les opéra ons arithmé ques et logiques
Arithme cal and logical instruc ons
■
Les instruc ons pour des boucles et des branchements
Loop and branch instruc ons
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
2 / 22
Instruc on de transfert
■
On trouve 3 familles d’instruc ons
▶
▶
▶
Load pour les transferts de données de la mémoire vers le CPU
(registres Rx)
Move pour les transferts de données à l’intérieur du CPU (entre
registres Rx)
Store pour les transferts de données du CPU (registres Rx) vers la
mémoire
ldr
(load)
mov
(move)
Memory
I/O
CPU
str
(store)
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
3 / 22
MOV Instruc ons
■
MOV (move) place une donnée dans le registre des na on. La
donnée peut être une valeur immédiate ou une donnée contenue
dans un autre registre. Elle peut être décalée (shi ed) avant d’être
stockée.
MOV{}{S} ,
■
U lisa on
▶
copie d’une donnée d’un registre vers un autre
mov r1, r4
▶
// copie de la donnée contenue dans le
// registre R4 dans le registre R1
décalage ou rota on sur un registre
mov r1, r1, lsl #5 // décale sur la gauche de 5 bits la donnée
// contenue dans le registre R1
▶
retour de sous-rou ne en copiant l’adresse de retour (LR/R14) dans
le compteur ordinal (PC/R15)
mov pc, lr
[Gac/a.11] T-2/I-2 // 16.11.2018
// retour de sous-routine si l’adresse a été
// précédemment sauvée dans le registre LR
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
4 / 22
”move”, d’autres instruc ons…
MVN
Copie le complément à 1 de la donnée
(inversion binaire de la valeur)
MVN{}{S} ,
MRS
Copie la donnée d’un registre de statut
dans un registre général
MRS{} , CPSR
MRS{} , SPSR
MSR
Copie la donnée d’un registre général
dans les champs (c, x, s, f) d’un registre
de statut (CPSR current ou SPSR saved)
MSR{} CPSR_<fields>, #
MSR{} CPSR_<fields>,
MSR{} SPSR_<fields>, #
MSR{} SPSR_<fields>,
<fields> :
c = control (bits 0..7)
x = extended (bits 8..15)
s = status (bits 16..23)
f = flags (bits 24..31)
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
5 / 22
MSR/MRS, un exemple…
■
Instruc ons forçant le processeur en mode user (bit 4 – bit 0) du
CPSR (0b10000)
mrs
bic
msr
[Gac/a.11] T-2/I-2 // 16.11.2018
r0,cpsr
r0,r0,#0xf
cpsr_c,r0
// read CPSR
// modify by removing current mode
// write the result back to CPSR
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
6 / 22
LDR Instruc on
■
LDR (load) charge le contenue d’une cellule mémoire à une adresse
donnée dans un registre général du CPU
LDR{} ,
■
U lisa on
▶
copie d’une constante dans un registre interne
ldr r0,=0x1201
▶
copie d’une adresse dans un registre interne
ldr r4,=var
▶
// copie la constante 0x1201 dans le registre R0
// copie de la valeur de l’adresse de la
// variable var dans le registre R4
copie d’une donnée stockée en mémoire dans un registre général
ldr r1,[r4]
[Gac/a.11] T-2/I-2 // 16.11.2018
// copie de la donnée stockée en mémoire à
// l’adresse contenue dans le registre R4 (var)
// dans le registre R1
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
7 / 22
”load”, une autre instruc on…
LDM
Transferts mul ples de la mémoire vers
les registres. U lisé pour restaurer de
manière con guë le contenu de plusieurs registres préalablement stocké en
mémoire.
LDM{} { !},
Modes d’adressage :
dest :
.long
ldr
ldmia
101,102,103,104,105,106
r9,=dest
r9 !,{r1-r6}
IA → increment a er
IB → increment before
DA → decrement a er
DB → decrement before
! → Mise à jour du registre après opéra on
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
8 / 22
STR Instruc on
■
STR (store) transfert le contenu d’un registre général du CPU vers
une cellule mémoire à une adresse donnée
STR{} ,
■
U lisa on
▶
copie d’une donnée d’un registre général vers la mémoire
str r1,[r4]
▶
// copie de la donnée contenue dans le
// registre R1 vers l’adresse contenue
// dans le registre R4
stockage du PC (R15) comme adresse rela ve en mémoire
str pc,[r3]
[Gac/a.11] T-2/I-2 // 16.11.2018
// copie l’adresse de PC, vers la position
// mémoire contenue dans le registre R3
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
9 / 22
”store”, une autre instruc on…
STM
Transferts mul ples des registres vers
la mémoire. U lisée pour sauvegarder
de manière con guë le contenu de plusieurs registres dans la mémoire.
STM{} { !},
Modes d’adressage :
dest :
.space
ldr
ldr
ldr
ldr
ldr
stmia
16*4
r1,=1
r2,=2
r3,=3
r4,=4
r9,=dest
r9 !,{r1-r4}
IA → increment a er
IB → increment before
DA → decrement a er
DB → decrement before
! → Mise à jour du registre après opéra on
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
10 / 22
Instruc ons arithmé ques et logiques
■
Les instruc ons arithmé ques et logiques sont groupées en
plusieurs familles dis nctes
▶
▶
▶
■
Les instruc ons arithmé ques (addi on, soustrac on et
mul plica on)
Les instruc ons logiques ( ET, OU, OU exclusif, test)
Les instruc ons de comparaison
Format de ces opéra ons
{}{S} , ,
▶
▶
▶
▶
▶
▶
:
opération (mov, add, sub,…)
{} :
condition d’exécution, optionnel
{S} :
mise à jour des fanions après exécution, optionnel
:
1ère opérande -> registre de destination
:
2ème opérande
: 3ème opérande
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
11 / 22
Opéra ons arithmé ques
ADD
Addi on de deux données
(Rd = Rn + shi er_operand)
ADD{}{S} , ,
ADC
Addi on de deux données en tenant
compte du carry
ADC{}{S} , ,
SUB
Soustrac on de deux données
(Rd = Rn - shi er_operand)
SUB{}{S} , ,
SBC
Soustrac on de deux données en tenant
compte du carry
SBC{}{S} , ,
RSB
Soustrac on inverse de deux données
(Rd = shi er_operand - Rn)
RSB{}{S} , ,
RSC
Soustrac on inverse de deux données
en tenant compte du carry
RSC{}{S} , ,
ldr
ldr
add
r0, =3583
r1, =7620
r2, r0, r1
[Gac/a.11] T-2/I-2 // 16.11.2018
→ R2 = R0 + R1 = 3583 + 7620
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
12 / 22
Addi on avec Carry
■
Une addi on avec carry permet de réaliser une addi on sur 64 bits
R1
R3
R5
0x00000000
0x00000000
0x00000001
ldr
ldr
ldr
ldr
adds
adc
[Gac/a.11] T-2/I-2 // 16.11.2018
R0
R2
R4
0xffffffff
0x00000001
0x00000000
r0,=0xffffffff
r1,=0x0
r2,=0x1
r3,=0x0
r4,r0,r2
r5,r1,r3
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
13 / 22
Soustrac on et soustrac on inverse
■
L’opéra on de soustrac on a un sens :
Rd = Rn – shi er_operand
ldr
ldr
sub
■
→R2 = R0 – R1 = 50 – 24 = 26
L’opéra on de soustrac on inverse change le sens des opérandes :
Rd = shi er_operand – Rn
ldr
rsb
■
r0, =50
r1, =24
r2, r0, r1
r0, =50
r2, r0, #24
→R2 = 24 – R0 = 24 – 50 = -26
La soustrac on inverse permet d’obtenir le complément à 2 d’une
valeur contenue dans un registre
rsb
r2, #0
[Gac/a.11] T-2/I-2 // 16.11.2018
→R2 = 0 – R2 = -R2
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
14 / 22
Opéra ons de mul plica on
MUL
Mul plica on
32 bits x 32 bits → 32 bits
MUL , ,
→Rd = Rm * Rs
MLA
Mul plica on avec un accumulateur
32 bits x 32 bits → 32 bits + acc
MLA , , ,
→ Rd = Rm * Rs + Rn
SMULL
Mul plica on en valeurs signées
32 bits signés x 32 bits signés
→ 64 bits signés
SMULL , , ,
→ RdLo = lower (Rm * Rs) → bits 31-0
→ RdHi = upper (Rm * Rs) → bits 63-32
UMULL
Mul plica on en valeurs non-signés
32 bits x 32 bits → 64 bits
UMULL , , ,
→ RdLo = lower (Rm * Rs) → bits 31-0
→ RdHi = upper (Rm * Rs) → bits 63-32
■
Hormis ces quatre instruc ons principales, le processeur
implémente également d’autres opéra ons de mul plica on
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
15 / 22
Opéra ons logiques / booléennes
AND
Réalise une opéra on ET logique bit à bit
entre deux opérandes
AND{}{S} , ,
EOR
Réalise une opéra on OU-Exclusif logique bit à bit entre deux opérandes
EOR{}{S} , ,
ORR
Réalise une opéra on OU logique bit à
bit entre deux opérandes
ORR{}{S} , ,
BIC
Réalise un ET logique bit à bit entre une
valeur et le complément à 1 de la seconde
BIC{}{S} , ,
ldr
ldr
ldr
ldr
and
orr
eor
bic
[Gac/a.11] T-2/I-2 // 16.11.2018
r0,
r1,
r2,
r3,
r0,
r1,
r2,
r3,
=0x11
=0x22
=0x44
=0x88
r0, #0x0f
r1, #0x88
r2, #0xf0
r3, #0xf0
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
16 / 22
CMP Instruc on
■
CMP (compare) compare deux données. La première donnée vient
d’un registre. La deuxième peut être une valeur immédiate, une
donnée contenue dans un registre ou le résultat d’un décalage
avant la comparaison. CMP met à jour les condi on flags à par r
du résultat de la soustrac on de la deuxième donnée à la première.
CMP{} ,
→ -
■
U lisa on
▶
comparaison d’un registre avec une valeur immédiate
cmp r1, #35
▶
// compare la donnée contenue dans le
// registre R1 avec la valeur 35
comparaison de deux données contenues dans deux registres
cmp r1, r3
[Gac/a.11] T-2/I-2 // 16.11.2018
// compare les données contenues dans les
// registres R1 et R3
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
17 / 22
CMN Instruc on
■
CMN (Compare Nega ve) compare une donnée avec le
complément à 2 d’une deuxième donnée. La première donnée
vient d’un registre. La seconde peut être une valeur immédiate, une
donnée contenue dans un registre ou le résultat d’un décalage
préalable. CMN met à jour les condi on flags à par r du résultat de
l’addi on des deux données.
CMN{} ,
→ - (0 - )
→ +
■
U lisa on
▶
compare avec le complément à 2 d’une donnée
cmn r1, #35
[Gac/a.11] T-2/I-2 // 16.11.2018
// compare la donnée contenue dans le
// registre R1 avec la valeur -35
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
18 / 22
Autres instruc ons de comparaison…
TST
Compare deux données et met à jour les
flags sur la base d’une opéra on AND logique
TST{}{S} ,
TEQ
Compare deux données et met à jour les
flags sur la base d’une opéra on EOR (ou
exclusif)
TEQ{}{S} ,
■
TST peut être u lisé afin de déterminer si au moins un bit contenu
dans une série est à un.
■
Exemple
ldr
ldr
tst
[Gac/a.11] T-2/I-2 // 16.11.2018
r0, =0x53
r1, =0x04
r0, r1
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
19 / 22
Opéra ons de branchement
B
Branchement par offset, valeur immédiate de 24 bits signés
→ PC = PC + offset « 2 + 8 → ±32MB
B
loop :
…
…
b loop
BX
Branchement direct par registre (p. ex.
pour le retour de sous-rou nes)
→ PC = Rm & 0xffff’fffe
BX
rou ne :
…
…
bx lr
BL
Branchement par offset et sauvetage de
l’adresse de la prochaine instruc on à
exécuter (adresse de retour), pour appel
de sous-rou nes
→ LR = PC + 4
→ PC = PC + offset « 2 + 8 → ±32MB
BL
…
…
…
bl rou ne
BLX
Branchement et sauvetage de la prochaine adresse à exécuter, pour appel indirect de sous-rou nes
→ LR = PC + 4
→ PC = Rm & 0xffff’fffe
BLX
ldr r1,=rou ne
…
…
blx r1
■
Chaque branchement peut s’exécuter de manière condi onnelle
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
20 / 22
Branchements condi onnels
■
Pour effectuer un branchement condi onnel, il suffit d’ajouter les 2
caractères de la condi on à l’opéra on de branchement
B label ou BLX R1
Mnemonic
Descrip on
Mnemonic
Descrip on
AL
Always (AL normally omi ed)
HI
>
Unsigned higher
EQ
(Z==1)
Equal
HS
>=
Unsigned higher or same
NE
(Z==0)
Not equal
LS
<=
Unsigned lower or same
CS
(C==1)
Carry Set
LO
<
Unsigned lower
CC
(C==0)
Carry Clear
Mnemonic
Descrip on
MI
(N==1)
Nega ve (minus)
GT
>
Signed greater than
PL
(N==0)
Posi ve or zero (plus)
GE
>=
Signed greater than or equal
VS
(V==1)
Overflow
LE
<=
Signed less than or equal
VC
(V==0)
No overflow
LT
<
Signed less than
[Gac/a.11] T-2/I-2 // 16.11.2018
Systèmes Embarqués 1 & 2 - Jeu d’instruc ons du µP ARM
21 / 22
Exemple de boucle
// C-code
#define CONSTANT 10
sum=10
i
=
0
int sum = CONSTANT ;
for (int i=0 ; i
Source Exif Data:
File Type : PDF
File Type Extension : pdf
MIME Type : application/pdf
PDF Version : 1.5
Linearized : No
Page Mode : UseOutlines
Page Count : 22
Creator : LaTeX with Beamer class version 3.36
Title : Systèmes Embarqués 1 & 2 - Jeu d'instructions du µP ARM
Author : Daniel Gachet
Producer : XeTeX 0.99992
Create Date : 2018:11:16 06:49:34+01:00
EXIF Metadata provided by EXIF.tools