Vous êtes sur la page 1sur 67

Langage assembleur

Exemple de lassembleur ARM

Tarik Graba
Anne scolaire 2015/2016
Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

2/67 SE 202 Tarik Graba P1-2015/2016


Assembleur
Langage

Un processeur interprte des instructions numriques


(gnralement codes en binaire),
Cest ce qui est appel langage machine.
Lassembleur est un langage de programmation bas
niveau,
lisible par lHomme (reprsentation textuelle),
quivalent au langage machine (1 1).
Il est spcique chaque processeur et li son
architecture.

3/67 SE 202 Tarik Graba P1-2015/2016


Assembleur
Outils

Pour faciliter la programmation, en plus des instructions,


les outils permettent de :
Dnir des symboles, des tiquettes, tables
Des macrosfonctions
On appelle cela des directives dassemblage.
Ces directives varient en fonction des outils utiliss (chaine
de compilation).
Nous utiliserons dans ce cours celles de Gnu AS.

4/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

5/67 SE 202 Tarik Graba P1-2015/2016


Modle du programmeur

Processeur Adresses

Mmoire
Registres Donnes

Espace mmoire extrieur au processeur.


Des registres internes au processeur.

Instructions pour le transfert entre les registres et la mmoire.


Oprations sur le contenu des registres.

Lespace mmoire est communs aux instructions et aux donnes.


Les priphriques font aussi partie de lespace mmoire.

6/67 SE 202 Tarik Graba P1-2015/2016


Caractristiques de lARM
Taille des donnes

Processeur RISC 1 32 bits :


Les registres internes font 32 bits
Les donnes manipules sont des word (32 bits), halfword
(16 bits) ou byte (8 bits).

1. Reduced Instruction Set Computer

7/67 SE 202 Tarik Graba P1-2015/2016


Caractristiques de lARM
Direntes tailles pour les instructions

Historiquement les instructions faisaient toutes 32 bits.


Pour rendre le code plus compact et permettre des rductions
de cots, des jeux dinstructions simplis ont t ajouts :
Les instructions font :
32 bits (mode ARM)
16 bits (mode THUMB)
mixte 32/16 bits (mode THUMB 2)

8/67 SE 202 Tarik Graba P1-2015/2016


Modle du programmeur
Les registres

r0
r1
r2
r3

16 registres gnraux r4
r5
3 registres avec des rles particuliers : r6
r7
r15 (pc) : Compteur programme r8
r14 (lr) : Link register (adresse de retour) r9

r13 (sp) : Stack pointer (pointeur de pile) r10


r11
r12
r13 (sp)
r14 (lr)
r15 (pc)

9/67 SE 202 Tarik Graba P1-2015/2016


Modle du programmeur
En fonction de ltat du processeur

Les shadow registers de lARM7TDMI (ARMv4T) :


User/Syst. Superv. FIQ IRQ Abort Undef
r0 r0 r0 r0 r0 r0
r1 r1 r1 r1 r1 r1
r2 r2 r2 r2 r2 r2
r3 r3 r3 r3 r3 r3
r4 r4 r4 r4 r4 r4
r5 r5 r5 r5 r5 r5
r6 r6 r6 r6 r6 r6
r7 r7 r7 r7 r7 r7
r8 r8 r8fiq r8 r8 r8
r9 r9 r9fiq r9 r9 r9
r10 r10 r10fiq r10 r10 r10
r11 r11 r11fiq r11 r11 r11
r12 r12 r12fiq r12 r12 r12
r13 (sp) r13svc r13fiq r13irq r13abt r13und
r14 (lr) r14svc r14fiq r14irq r14abt r14und
r15 (pc) r15 (pc) r15 (pc) r15 (pc) r15 (pc) r15 (pc)

10/67 SE 202 Tarik Graba P1-2015/2016


Modle du programmeur
En fonction de ltat du processeur

core
r0
r1
r2
r3
Les deux pointeurs de pile des r4
Cortex-M (ARMv6-M) : r5
r6
Main Stack Pointer (MSP) r7
r8
Process Stack Pointer (PSP)
r9
r10
r11
main process
r12
r13 (sp) MSP PSP
r14 (lr)
r15 (pc)

11/67 SE 202 Tarik Graba P1-2015/2016


Modle du programmeur
Le registre dtat xPSR

CPSR : Current Program Status Register de lARM7TDMI

31 30 29 28 7 6 5 4 0

N Z C V I F T mode

Flags : Interruptions :
N : ngatif F : dsactiver les FIQ
Z : zro I : dsactiver les IRQ
C : retenue T : Thumb
V : dpassement
Mode de fonctionnement

12/67 SE 202 Tarik Graba P1-2015/2016


Modle du programmeur
Le registre dtat xPSR

PSR : Program Status Registers du Cortex-M0

31 30 29 28 24 5 0

APSR N Z C V Reserved

IPSR Reserved Except.

EPSR Reserved T Reserved

APSR : Application Program Status Register


IPSR : Interrupt Program Status Register
EPSR : Execution Program Status Register

13/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

14/67 SE 202 Tarik Graba P1-2015/2016


Spcicits de lARM

Instructions ARM/Thumb

lorigine les syntaxes des instructions thumb et arm taient


direntes.
Une syntaxe unie (unified) est supporte par les versions
rcentes des outils de dveloppement.
Du fait de la taille des instructions thumb (16-bits) certaines
restrictions dusage existent.

Dans ce cours nous prsentons la syntaxe unie. Pour les


restrictions du mode thumb se rfrer la documentation
ocielle.

15/67 SE 202 Tarik Graba P1-2015/2016


Jeu dinstructions

On peut classer les instructions en trois grandes catgories :


1. Traitement et manipulation des donnes :
Arithmtiques et logiques
Tests et comparaisons
2. Transfert de donnes depuis et vers la mmoire
3. Contrle de ot
Branchements

16/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

17/67 SE 202 Tarik Graba P1-2015/2016


Oprations arithmtiques et logiques

Opration sur 3 registres

OPE r_dest, r_s1, r_s2

Exemples
AND r0,r1,r2 pour (r0 = r1 &r2 )
ADD r5,r1,r5 pour (r5 = r1 + r5 )

18/67 SE 202 Tarik Graba P1-2015/2016


Oprations arithmtiques et logiques
Les instructions

ADD r0,r1,r2 r0=r1+r2 Addition


ADC r0,r1,r2 r0=r1+r2+C Addition avec retenue
SUB r0,r1,r2 r0=r1-r2 Soustraction
SBC r0,r1,r2 r0=r1-r2-C+1 Soustraction avec retenue
RSB r0,r1,r2 r0=r2-r1 Soustraction inverse
RSC r0,r1,r2 r0=r2-r1-C+1 Soustraction inverse avec retenue
AND r0,r1,r2 r0=r1&r2 Et binaire
ORR r0,r1,r2 r0=r1|r2 Ou binaire
EOR r0,r1,r2 r0=r1^r2 Ou exclusif binaire
BIC r0,r1,r2 r0=r1&~r2 Met 0 les bits de r1 indiqus par r2

19/67 SE 202 Tarik Graba P1-2015/2016


Oprations de dplacement de donnes
entre registres

Opration sur 2 registres


OPE r_dest, r_s1

Exemples
MOV r0,r1 pour (r0 = r1 )
MOV pc,lr pour (pc = lr)
MVN r0,r1 pour (r0 = r1 )

20/67 SE 202 Tarik Graba P1-2015/2016


Oprations de dplacement de donnes
entre registres

Les instructions
MOV r0,r1 r0=r1 Dplacement
MVN r0,r1 r0=~r1 Dplacement et ngation

21/67 SE 202 Tarik Graba P1-2015/2016


Oprations de dcalage

Opration sur 3 registres


OPE r_dest, r_s, r_m

Exemples
LSL r0,r1,r2 pour (r0 = r1  r2 [7:0])
ASR r3,r4,r5 pour (r3 = r4  r5 [7:0])

Seul loctet de poids faible de r_m est utilis.

22/67 SE 202 Tarik Graba P1-2015/2016


Oprations de dcalage

Les instructions
LSL Dcalage logique vers la gauche
LSR Dcalage logique vers la droite
ASL Dcalage arithmtique vers la gauche
ASR Dcalage arithmtique vers la droite
ROR Dcalage circulaire vers la droite

23/67 SE 202 Tarik Graba P1-2015/2016


Remarque !

Modication des indicateur du PSR


Par dfaut, les oprations arithmtiques et logiques ne
modient pas les indicateurs (N,Z,C,V) du PSR.
Il faut ajouter le suxe S au mnmonique de linstruction.

Exemples
ADDS r0,r1,r2
ANDS r0,r1,r2
MOVS r0,r1

24/67 SE 202 Tarik Graba P1-2015/2016


Oprations de comparaison

Opration sur 2 registres


OPE r_s1, r_s2

Exemples
CMP r0,r1 pour (psr r0 r1 )
TEQ r0,r1 pour (psr r0 r1 )

25/67 SE 202 Tarik Graba P1-2015/2016


Oprations de comparaison

Les instructions

CMP r0,r1 psr r0-r1 Comparer


CMN r0,r1 psr r0+r1 Comparer linverse
TST r0,r1 psr r0&r1 Tester les bits indiqus par r1
TEQ r0,r1 psr r0^r1 Tester lgalit bit bit

Ces instructions ne modient que les bits (N,Z,C,V) du PSR, le


rsultat nest pas gard.

26/67 SE 202 Tarik Graba P1-2015/2016


Oprandes immdiats

Un des oprandes source peut tre un immdiat.


Un immdiat est une valeur constante qui est encode
dans une partie de linstruction.
On doit les prcder du symbole #.
Il peut tre dcimal, hexadcimal (0x) ou octal (0).

Exemples
MOV r0,#0x20
CMP r0,#32
ADD r0,r1,#1

27/67 SE 202 Tarik Graba P1-2015/2016


Oprandes immdiats

En mode ARM les instructions sont codes sur 32 bits et


seulement 12 bits peuvent tre utiliss pour coder limmdiat.
31 28 27 21 20 19 16 15 12 11 0

cond code op S Rn Rs Imm

Ces 12 bits sont utiliss de la faon suivante :

8 bits (0 0xFF)
4 bits pour un dcalage circulaire (valeurs paires de 0 30)

28/67 SE 202 Tarik Graba P1-2015/2016


Oprandes immdiats

Exemples
ADD r0,r1,#100 (0x64  0)
ADD r0,r1,#0xFF00 (0xFF  8)
ADD r0,r1,#0x3FC (0xFF  2)
ADD r0,r1,#0xF000000F (0xFF  28)
ADD r0,r1,#0x102 Interdit !!

29/67 SE 202 Tarik Graba P1-2015/2016


Oprandes immdiats
En mode thumb-16bits

a dpend de linstruction. Par exemple :

ADDS Rd,Rn,#imm3 (source et destination direntes)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 1 1 1 0 imm3 Rn Rd

ADDS Rdn,#imm8 (mme source et destination)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 1 1 0 Rdn imm8

30/67 SE 202 Tarik Graba P1-2015/2016


Combiner une opration avec un dcalage
ALU + Barrel shifter

Registres dcalage

ALU
31/67 SE 202 Tarik Graba P1-2015/2016
Combiner une opration avec un dcalage

Le barrel shifter peut tre utilis en mme temps que lALU


Toute opration peut tre accompagne du dcalage du
second oprande.

Exemples
ADD r0,r1,r2,LSL #4 (r0 = r1 + r2 16)
ADD r0,r1,r2,LSL r3 (r0 = r1 + r2 2r3 )

32/67 SE 202 Tarik Graba P1-2015/2016


Combiner une opration avec un dcalage
Remarques

Certaines instructions sont quivalentes :


LSL rd,rs,#i MOV rd,rs,LSL #i

Rotate Right with Extend


RRX rd,rs MOV rd,rs,RRX
Rotation droite dune position en prenant le bit de retenue C.

33/67 SE 202 Tarik Graba P1-2015/2016


Les multiplications

Les oprandes ne peuvent tre que des registres.


En fonction des versions de larchitecture :
Toutes les instructions ne sont pas disponibles sur toutes
les architectures.
La retenue C et le dpassement V nont pas toujours le
mme comportement.

34/67 SE 202 Tarik Graba P1-2015/2016


La multiplication

Les instructions

MUL r0,r1,r2 r0=r*r2 multiplication


MLA r0,r1,r2,r3 r0=r1+r2*r3 mult. et accumulation
MLS r0,r1,r2,r3 r0=r1-r2*r3 mult. soustraction
UMULL r0,r1,r2,r3 {r1,r0}=r2*r3 mult. 64bits non signe
SMULL r0,r1,r2,r3 {r1,r0}=r2*r3 mult. 64bits signe
UMLAL r0,r1,r2,r3 {r1,r0}+=r2*r3 MAC 64bits non signe
SMLAL r0,r1,r2,r3 {r1,r0}+=r2*r3 MAC 64bits signe

35/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

36/67 SE 202 Tarik Graba P1-2015/2016


Instructions pour transfrer les donnes

Deux instructions de transfert de donnes entre la mmoire et


les registres.
LDR : charger un registre avec une donne en mmoire
STR : enregistrer la valeur du registre en mmoire

Exemples
LDR r0,[r1] (r0 = RAM[r1 ])
STR r0,[r1] (RAM[r1 ] = r0 )

37/67 SE 202 Tarik Graba P1-2015/2016


Instructions pour transfrer les donnes
Taille des donnes

LDR/STR : mots de 32 bits (words)


LDRH/STRH : mots de 16 bits (half words)
LDRB/STRB : mots de 16 bits (byte)

Gnralement, les adresses doivent tre alignes :


LDR/STR : 4
LDRH/STRH : 2
LDRB/STRB : quelconque

38/67 SE 202 Tarik Graba P1-2015/2016


Modes dadressage
Adressage indirect
LDR r0,[r1] (r0 = RAM[r1 ])

Adressage indirect avec dplacement (oset)


LDR r0,[r1,#8] (r0 = RAM[r1 + 8])
LDR r0,[r1,r2] (r0 = RAM[r1 + r2 ])

Adressage indirect avec dplacement et


pr-incrmentation
LDR r0,[r1,#8]! (r1 = r1 + 8 puis r0 = RAM[r1 ])

Adressage indirect avec dplacement et


post-incrmentation
LDR r0,[r1],#8 (r0 = RAM[r1 ] puis r1 = r1 + 8)

39/67 SE 202 Tarik Graba P1-2015/2016


Transferts multiples

En plus des instructions LDR et STR le jeu dinstruction ARM


propose les instructions LDM et STM pour les transferts multiples.

Exemples
LDMIA r0,{r1,r2,r3} (r1 = RAM[r0 ])
(r2 = RAM[r0 + 4])
(r3 = RAM[r0 + 8])
STMIA r0,{r1-r3} (RAM[r0 ] = r1 )
(RAM[r0 + 4] = r2 )
(RAM[r0 + 8] = r3 )

40/67 SE 202 Tarik Graba P1-2015/2016


Transferts multiples
Variantes
Il existe 4 suxes possibles pour les instructions de transferts
multiples :
IA pour la post-incrmentation (Increment After)
IB pour la pr-incrmentation (Increment Before)
DA pour la post-dcrmentation (Decrement After)
DB pour la pr-dcrmentation (Decrement Before)

Pour que la valeur du registre dadresse soit modie il faut


ajouter (!)

LDMIA r0!,{r1-r3}

41/67 SE 202 Tarik Graba P1-2015/2016


Transferts multiples
la pile (stack)

Conventions mmoire

Le registre r13 (sp) est le

dpiler
pointeur de pile (stack pointer) STACK
Le pointeur de pile contient sp
ladresse de la dernire donne next in stack

empiler
empile
Avant chaque empilement le
pointeur de pile doit tre
dcrment
0x4
0x0

La convention ARM standard est Full Descending

42/67 SE 202 Tarik Graba P1-2015/2016


Transferts multiples
la pile (stack)

Pour grer la pile et viter les confusions, il existe des


quivalents des instructions LDM et STM avec des suxes
spciques en fonction des stratgies utilises pour la pile.
FD : Full Descending
FA : Full Ascending
ED : Empty Descending
EA : Empty Ascending

43/67 SE 202 Tarik Graba P1-2015/2016


Transferts multiples
la pile (stack)

Ou plus simplement :

Empiler
PUSH {r1-r5} ou STMFD sp!,{r1-r5}
ou STMDB sp!,{r1-r5}
Dpiler
POP {r1-r5} ou LDMFD sp!,{r1-r5}
ou LDMIA sp!,{r1-r5}

44/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

45/67 SE 202 Tarik Graba P1-2015/2016


Branchements

Il existe deux instructions de branchement :


B adresse Aller ladresse
BX registre Aller ladresse pointe par le registre
et ventuellement changer de mode
(ARM/THUMB interworking)

Ces instructions modient le compteur programme "pc" (r15)


BL(X) Pour sauvegarder ladresse de retour dans "lr" (r14)
Ladresse de retour est celle de linstruction suivant le BL.

46/67 SE 202 Tarik Graba P1-2015/2016


Branchements

Pour revenir dun branchement BL il sut de remettre lr


dans pc
BX lr
MOV pc,lr (deprecated)

47/67 SE 202 Tarik Graba P1-2015/2016


Branchements

pour les instructions B et BL ladresse est stocke comme


un immdiat qui reprsente un oset par rapport la
position actuelle :
loset est forcement limit
pour linstruction BX le mode (ARM/Thumb) est dtermin
en fonction du bit de poids faible de ladresse normalement
non utilis (voir interworking)

48/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

49/67 SE 202 Tarik Graba P1-2015/2016


Excution conditionnelle des instructions
Lexcution des instructions peut tre rendue conditionnelle en
rajoutant les suxes suivant :

EQ Equal Z == 1
NE Not equal Z == 0
CS/HS Carry set/unsigned higher or same C == 1
CC/LO Carry clear/unsigned lower C == 0
MI Minus/negative N == 1
PL Plus/positive or zero N == 0
VS Overow V == 1
VC No overow V == 0
HI Unsigned higher C == 1 and Z == 0
LS Unsigned lower or same C == 0 or Z == 1
GE Signed greater than or equal N == V
LT Signed less than N != V
GT Signed greater than Z == 0 and N == V
LE Signed less than or equal Z == 1 or N != V

50/67 SE 202 Tarik Graba P1-2015/2016


Excution conditionnelle des instructions

Exemples
CMP r0,r1 comparer r0 r1
SUBGE r0,r0,r1 si r0 r1 alors r0 = r0 r1
SUBLT r0,r1,r0 si r0 < r1 alors r0 = r1 r0
SUBS r0,r1,r2 r0 = r1 r2
BEQ address aller adresse si le rsultat est nul

51/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

52/67 SE 202 Tarik Graba P1-2015/2016


Encodage des instructions
En mode ARM
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Data processing and
FSR transfer Cond 0 0 1 Opcode S Rn Rd Operand 2

Multiply Cond 0 0 0 0 0 0 A S Rd Rn Rs 1 0 0 1 Rm

Multiply long Cond 0 0 0 0 1 U A S RdHi RdLo Rn 1 0 0 1 Rm

Single data swap Cond 0 0 0 1 0 B 0 0 Rn Rd 0 0 0 0 1 0 0 1 Rm

Branch and exchange Cond 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 Rn

Halfword data transfer,


register offset Cond 0 0 0 P U 0 W L Rn Rd 0 0 0 0 1 S H 1 Rm

Halfword data transfer,


immediate offset Cond 0 0 0 P U 1 W L Rn Rd Offset 1 S H 1 Offset

Single data transfer Cond 0 1 1 P U B W L Rn Rd Offset

Undefined Cond 0 1 1 1

Block data transfer Cond 1 0 0 P U S W L Rn Register list

Branch Cond 1 0 1 L Offset

Coprocessor data
transfer Cond 1 1 0 P U N W L Rn CRd CP# Offset

Coprocessor data
operation Cond 1 1 1 0 CP Opc CRn CRd CP# CP 0 CRm

Coprocessor register
transfer Cond 1 1 1 0 CP Opc L CRn Rd CP# CP 1 CRm

Software interrupt Cond 1 1 1 1 Ignored by processor

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

53/67 SE 202 Tarik Graba P1-2015/2016


Encodage des instructions
En mode thumb
Format 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Move shifted register 01 0 0 0 Op Offset5 Rs Rd

Rn/
Add and subtract 02 0 0 0 1 1 1 Op Rs Rd
offset3
Move, compare, add, and subtract
03 0 0 1 Op Rd Offset8
immediate

ALU operation 04 0 1 0 0 0 0 Op Rs Rd

High register operations and branch


05 0 1 0 0 0 1 Op H1 H2 Rs/Hs RdHd
exchange

PC-relative load 06 0 1 0 0 1 Rd Word8

Load and store with relative offset 07 0 1 0 1 L B 0 Ro Rb Rd

Load and store sign-extended byte and


08 0 1 0 1 H S 1 Ro Rb Rd
halfword

Load and store with immediate offset 09 0 1 1 B L Offset5 Rb Rd

Load and store halfword 10 1 0 0 0 L Offset5 Rb Rd

SP-relative load and store 11 1 0 0 1 L Rd Word8

Load address 12 1 0 1 0 SP Rd Word8

Add offset to stack pointer 13 1 0 1 1 0 0 0 0 S SWord7

Push and pop registers 14 1 0 1 1 L 1 0 R Rlist

Multiple load and store 15 1 1 0 0 L Rb Rlist

Conditional branch 16 1 1 0 1 Cond Softset8

Software interrupt 17 1 1 0 1 1 1 1 1 Value8

Unconditional branch 18 1 1 1 0 0 Offset11

Long branch with link 19 1 1 1 1 H Offset

Format 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

54/67 SE 202 Tarik Graba P1-2015/2016


Plan

Gnralits

Spcicits de larchitecture ARM

Jeu dinstructions
Manipulation des donnes
Transfert des donnes
Branchements
Excution conditionnelle
Encodage

Directives dassemblage

55/67 SE 202 Tarik Graba P1-2015/2016


Syntaxe de lassembleur GNU pour ARM

Nous utiliserons Gnu Arm As


arm-none-eabi-as est install dans les salles de TP

En plus des instructions, nous pouvons utiliser des


directives pour que le code soit plus facile crire et plus
lisible.

La documentation ocielle :
http://sourceware.org/binutils/docs/as

56/67 SE 202 Tarik Graba P1-2015/2016


Syntaxe de lassembleur GNU pour ARM

La forme gnrale des instructions est alors :

[<tiquette>:] [<instruction ou directive>] [@ <commentaire>]

57/67 SE 202 Tarik Graba P1-2015/2016


Syntaxe de lassembleur GNU pour ARM

Les lignes ne contenant que des commentaires ou


tiquettes ne sont pas comptes.
Les tiquettes (labels) seront remplaces par ladresse de
linstruction qui suit.
Un symbole local ayant le nom de ltiquette est dnit.

58/67 SE 202 Tarik Graba P1-2015/2016


Syntaxe de lassembleur GNU pour ARM

Exemple

Start:
MOV r0,#0 @ mise zero de r0
MOV r2,#10 @ charger la valeur 10 dans r2
Loop:
ADD r0,r0,r2,LSL #1 @ r0=r0+2*r2
SUBS r2,r2,#1 @ r2--
BNE Loop
B Start

59/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

.cpu cpu_model
Pour prciser le modle du processeur (arm7tdmi, cortex-m3,
cortex-m0 )
.arch cpu_arch
Pour prciser larchitecture du processeur (armv5t, armv7-m,
armv6-m )
.syntax unified
Pour prciser quon utilise la syntaxe unie
.thumb/.arm
Pour prciser quon veut gnrer du code 16 ou 32 bits

60/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

LDR r0,=VALEUR
Cette directive permet de mettre une valeur quelconque
dans un registre. Cette directive est replace en fonction
de la valeur par :
MOV r0,#VALEUR
LDR r0, [pc,#offset]
...
.word VALEUR
O oset est le dcalage entre ladresse de linstruction et
ladresse o est positionne la valeur ( la n du code).

61/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles
Rcuprer ladresse dune tiquette :
ADR r0,ETIQUETTE
Cette directive est remplace par :
ADD r0,pc,#offset
O oset est le dcalage entre la position de linstruction et
la position de ltiquette.

Exemple :

ADR r0, str


str:
.asciz "hello world"

62/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

.EQU SYMBOLE, VALEUR ou


.SET SYMBOLE, VALEUR
La macro est remplace par la valeur.

Exemple :
.EQU COMPTER,10

MOV r0, #COMPTEUR

des macros plus complexes sont aussi possibles.

63/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

Directives de remplissage :
mettre une valeur arbitraire sur 32 bits/16 bits/8 bits la
position actuelle :
.word/.half/.byte VALEUR
mettre une chane de caractres :
.ascii "La chaine de caracteres"
.asciz "Une autre chaine" se finit par '\0'
remplir une zone :
.fill nombre, taille_en_octets, valeur
Exemple : .fill 100,4,0xdeadbeaf

64/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

Directives dalignement :
Si les donnes insres ne sont pas multiple de la taille
dune instruction il faut raligner en remplissant
ventuellement les vides par un motif.

.align log2(nbr_octets), motif


.balign nbr_octets, motif

65/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

Dnition de symboles globaux


Pour dclarer un symbole qui sera utilis ailleurs :
.global NOM_DU_SYMBOLE

Le symbole est export et sera visible au moment de ldition


de liens.

66/67 SE 202 Tarik Graba P1-2015/2016


Quelques directives dassemblage utiles

.section nom, "flags",%type


Permet de prciser la section dans lobjet nal

Exemples de types :
Exemples de ags :
%progbits : contient des
"a" : allouer de lespace,
donnes
"x" : contient du code
%nobits : ne contient rien, il
excutable,
faut juste allouer
"w" : est modiable. lespace ncessaire

Par dfaut, si la directive nest pas utilise, le code assembl se


retrouve dans la section .text
quivalent de .section .text, "ax",%progbits

67/67 SE 202 Tarik Graba P1-2015/2016