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 PDF.
Page Count: 22

DownloadSystèmes Embarqués 1 & 2 - Jeu D'instructions Du µP ARM A.11-assembler Instructions-handout
Open PDF In BrowserView 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

Navigation menu