Langage assembleur - Exemple de l'assembleur ARM · Assembleur Langage...

of 67/67
Langage assembleur Exemple de l’assembleur ARM Tarik Graba Année scolaire 2015/2016
  • date post

    13-Sep-2018
  • Category

    Documents

  • view

    224
  • download

    2

Embed Size (px)

Transcript of Langage assembleur - Exemple de l'assembleur ARM · Assembleur Langage...

  • Langage assembleurExemple de lassembleur ARM

    Tarik GrabaAnne scolaire 2015/2016

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives dassemblage

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

  • AssembleurLangage

    Un processeur interprte des instructions numriques(gnralement codes en binaire),

    Cest ce qui est appel langage machine.Lassembleur est un langage de programmation basniveau,

    lisible par lHomme (reprsentation textuelle), quivalent au langage machine (1 1).

    Il est spcifique chaque processeur et li sonarchitecture.

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

  • AssembleurOutils

    Pour faciliter la programmation, en plus des instructions,les outils permettent de :

    Dfinir des symboles, des tiquettes, tables Des macrosfonctions

    On appelle cela des directives dassemblage.Ces directives varient en fonction des outils utiliss (chainede compilation).Nous utiliserons dans ce cours celles de Gnu AS.

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives dassemblage

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

  • Modle du programmeur

    Processeur

    RegistresMmoire

    Adresses

    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 lARMTaille 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 lARMDiffrentes tailles pour les instructions

    Historiquement les instructions faisaient toutes 32 bits.

    Pour rendre le code plus compact et permettre des rductionsde cots, des jeux dinstructions simplifis 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 programmeurLes registres

    16 registres gnraux3 registres avec des rles particuliers :

    r15 (pc) : Compteur programme r14 (lr) : Link register (adresse de retour) r13 (sp) : Stack pointer (pointeur de pile)

    r0r1r2r3r4r5r6r7r8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)

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

  • Modle du programmeurEn fonction de ltat du processeur

    Les shadow registers de lARM7TDMI (ARMv4T) :User/Syst.

    r0r1r2r3r4r5r6r7r8r9r10r11r12

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

    Superv.

    r0r1r2r3r4r5r6r7r8r9r10r11r12

    r13svcr14svc

    r15 (pc)

    FIQ

    r0r1r2r3r4r5r6r7

    r8fiqr9fiqr10fiqr11fiqr12fiqr13fiqr14fiq

    r15 (pc)

    IRQ

    r0r1r2r3r4r5r6r7r8r9r10r11r12

    r13irqr14irq

    r15 (pc)

    Abort

    r0r1r2r3r4r5r6r7r8r9r10r11r12

    r13abtr14abt

    r15 (pc)

    Undef

    r0r1r2r3r4r5r6r7r8r9r10r11r12

    r13undr14und

    r15 (pc)

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

  • Modle du programmeurEn fonction de ltat du processeur

    Les deux pointeurs de pile desCortex-M (ARMv6-M) :

    Main Stack Pointer (MSP)

    Process Stack Pointer (PSP)

    core

    r0r1r2r3r4r5r6r7r8r9r10r11r12

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

    MSP PSP

    main process

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

  • Modle du programmeurLe registre dtat xPSR

    CPSR : Current Program Status Register de lARM7TDMI

    N Z C V I F T mode

    31 30 29 28 7 6 5 4 0

    Flags : N : ngatif Z : zro C : retenue V : dpassement

    Interruptions : F : dsactiver les FIQ I : dsactiver les IRQ

    T : ThumbMode de fonctionnement

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

  • Modle du programmeurLe registre dtat xPSR

    PSR : Program Status Registers du Cortex-M0

    APSR

    IPSR

    EPSR

    N Z C V Reserved

    Reserved Except.

    Reserved T Reserved

    31 30 29 28 24 5 0

    APSR : Application Program Status RegisterIPSR : Interrupt Program Status RegisterEPSR : Execution Program Status Register

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives dassemblage

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

  • Spcificits de lARM

    Instructions ARM/Thumb

    lorigine les syntaxes des instructions thumb et arm taientdiffrentes.

    Une syntaxe unifie (unified) est supporte par les versionsrcentes des outils de dveloppement.

    Du fait de la taille des instructions thumb (16-bits) certainesrestrictions dusage existent.

    Dans ce cours nous prsentons la syntaxe unifie. Pour lesrestrictions du mode thumb se rfrer la documentationofficielle.

    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 mmoire3. Contrle de flot

    Branchements

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    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

    ExemplesAND 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 logiquesLes instructions

    ADD r0,r1,r2 r0=r1+r2 AdditionADC r0,r1,r2 r0=r1+r2+C Addition avec retenueSUB r0,r1,r2 r0=r1-r2 SoustractionSBC r0,r1,r2 r0=r1-r2-C+1 Soustraction avec retenueRSB r0,r1,r2 r0=r2-r1 Soustraction inverseRSC r0,r1,r2 r0=r2-r1-C+1 Soustraction inverse avec retenueAND r0,r1,r2 r0=r1&r2 Et binaireORR r0,r1,r2 r0=r1|r2 Ou binaireEOR r0,r1,r2 r0=r1^r2 Ou exclusif binaireBIC 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 donnesentre registres

    Opration sur 2 registresOPE r_dest, r_s1

    ExemplesMOV 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 donnesentre registres

    Les instructionsMOV r0,r1 r0=r1 DplacementMVN r0,r1 r0=~r1 Dplacement et ngation

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

  • Oprations de dcalage

    Opration sur 3 registresOPE r_dest, r_s, r_m

    ExemplesLSL 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 instructionsLSL Dcalage logique vers la gaucheLSR Dcalage logique vers la droiteASL Dcalage arithmtique vers la gaucheASR Dcalage arithmtique vers la droiteROR Dcalage circulaire vers la droite

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

  • Remarque !

    Modification des indicateur du PSRPar dfaut, les oprations arithmtiques et logiques nemodifient pas les indicateurs (N,Z,C,V) du PSR.Il faut ajouter le suffixe S au mnmonique de linstruction.

    ExemplesADDS 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 registresOPE r_s1, r_s2

    ExemplesCMP 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 ComparerCMN r0,r1 psr r0+r1 Comparer linverseTST r0,r1 psr r0&r1 Tester les bits indiqus par r1TEQ r0,r1 psr r0^r1 Tester lgalit bit bit

    Ces instructions ne modifient que les bits (N,Z,C,V) du PSR, lersultat 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).

    ExemplesMOV 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 etseulement 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

    ExemplesADD 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 immdiatsEn mode thumb-16bits

    a dpend de linstruction. Par exemple :

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

    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 dcalageALU + Barrel shifter

    dcalageRegistres

    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 lALUToute opration peut tre accompagne du dcalage dusecond oprande.

    ExemplesADD 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 dcalageRemarques

    Certaines instructions sont quivalentes :LSL rd,rs,#i MOV rd,rs,LSL #i

    Rotate Right with ExtendRRX 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 toutesles architectures.

    La retenue C et le dpassement V nont pas toujours lemme comportement.

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

  • La multiplication

    Les instructions

    MUL r0,r1,r2 r0=r*r2 multiplicationMLA r0,r1,r2,r3 r0=r1+r2*r3 mult. et accumulationMLS r0,r1,r2,r3 r0=r1-r2*r3 mult. soustractionUMULL r0,r1,r2,r3 {r1,r0}=r2*r3 mult. 64bits non signeSMULL r0,r1,r2,r3 {r1,r0}=r2*r3 mult. 64bits signeUMLAL r0,r1,r2,r3 {r1,r0}+=r2*r3 MAC 64bits non signeSMLAL r0,r1,r2,r3 {r1,r0}+=r2*r3 MAC 64bits signe

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    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 etles registres.

    LDR : charger un registre avec une donne en mmoireSTR : enregistrer la valeur du registre en mmoire

    ExemplesLDR r0,[r1] (r0 = RAM[r1])STR r0,[r1] (RAM[r1] = r0)

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

  • Instructions pour transfrer les donnesTaille 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 : 4LDRH/STRH : 2LDRB/STRB : quelconque

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

  • Modes dadressageAdressage indirectLDR r0,[r1] (r0 = RAM[r1])

    Adressage indirect avec dplacement (offset)LDR r0,[r1,#8] (r0 = RAM[r1 + 8])LDR r0,[r1,r2] (r0 = RAM[r1 + r2])

    Adressage indirect avec dplacement etpr-incrmentationLDR r0,[r1,#8]! (r1 = r1 + 8 puis r0 = RAM[r1])

    Adressage indirect avec dplacement etpost-incrmentationLDR 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 ARMpropose les instructions LDM et STM pour les transferts multiples.

    ExemplesLDMIA 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 multiplesVariantesIl existe 4 suffixes possibles pour les instructions de transfertsmultiples :

    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 modifie il fautajouter (!)

    LDMIA r0!,{r1-r3}

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

  • Transferts multiplesla pile (stack)

    Conventions

    Le registre r13 (sp) est lepointeur de pile (stack pointer)Le pointeur de pile contientladresse de la dernire donneempileAvant chaque empilement lepointeur de pile doit tredcrment

    mmoire

    next in stack

    0x4

    0x0

    STACKsp

    empiler

    dpi

    ler

    La convention ARM standard est Full Descending

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

  • Transferts multiplesla pile (stack)

    Pour grer la pile et viter les confusions, il existe desquivalents des instructions LDM et STM avec des suffixesspcifiques en fonction des stratgies utilises pour la pile.

    FD : Full DescendingFA : Full AscendingED : Empty DescendingEA : Empty Ascending

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

  • Transferts multiplesla pile (stack)

    Ou plus simplement :

    EmpilerPUSH {r1-r5} ou STMFD sp!,{r1-r5}

    ou STMDB sp!,{r1-r5}DpilerPOP {r1-r5} ou LDMFD sp!,{r1-r5}

    ou LDMIA sp!,{r1-r5}

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives dassemblage

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

  • Branchements

    Il existe deux instructions de branchement :B adresse Aller ladresseBX registre Aller ladresse pointe par le registre

    et ventuellement changer de mode(ARM/THUMB interworking)

    Ces instructions modifient 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 suffit de remettre lrdans 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 commeun immdiat qui reprsente un offset par rapport laposition actuelle :

    loffset est forcement limitpour linstruction BX le mode (ARM/Thumb) est dterminen fonction du bit de poids faible de ladresse normalementnon utilis (voir interworking)

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives dassemblage

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

  • Excution conditionnelle des instructionsLexcution des instructions peut tre rendue conditionnelle enrajoutant les suffixes suivant :

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

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

  • Excution conditionnelle des instructions

    ExemplesCMP r0,r1 comparer r0 r1SUBGE r0,r0,r1 si r0 r1 alors r0 = r0 r1SUBLT r0,r1,r0 si r0 < r1 alors r0 = r1 r0SUBS r0,r1,r2 r0 = r1 r2BEQ address aller adresse si le rsultat est nul

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives dassemblage

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

  • Encodage des instructionsEn mode ARM

    Data processing andFSR transfer

    Multiply long

    Single data swap

    Branch and exchange

    Halfword data transfer,register offset

    Halfword data transfer,immediate offset

    Single data transfer

    Undefined

    Block data transfer

    Branch

    Coprocessor datatransfer

    Coprocessor dataoperation

    Coprocessor registertransfer

    Software interrupt

    Multiply

    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

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    Cond

    0

    0

    0

    0

    0

    0

    0

    0

    1

    1

    1

    1

    1

    1

    0

    0

    0

    0

    0

    0

    1

    1

    0

    0

    1

    1

    1

    1

    1

    0

    0

    0

    0

    0

    1

    1

    0

    1

    0

    1

    1

    1

    Opcode

    0

    1

    1

    P

    P

    P

    P

    0

    0

    1

    1

    1

    0

    0

    U

    U

    U

    U

    B

    0

    0

    1

    B

    A

    0

    1

    W

    W

    W

    S

    0

    0

    L

    L

    L

    S

    P U S W L

    Cond 0 0 0 0 0 0 A S

    L Offset

    Rn

    Rd

    RdHi

    Rn

    1 1 1 1

    Rn

    Rn

    Rn

    Rn

    U N W L Rn

    CP Opc

    CP Opc

    Ignored by processor

    L

    Rd

    Rn

    RdLo

    Rd

    1 1 1 1

    Rd

    Rd

    Rd

    Operand 2

    Offset

    Register list

    Rs

    CRn

    CRn

    CRd

    CRd

    Rd

    CP#

    CP#

    CP#

    Rn

    1 0 0 1

    1 0 0 1

    0 0 0 0 1 0 0 1

    1 1 1 1 0 0 0 1

    0 0 0 0 1 S H 1

    Offset 1 S H 1

    Rm

    Rm

    Rm

    Rn

    Rm

    Offset

    Offset

    CP

    CP

    0

    1

    CRm

    CRm

    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 instructionsEn mode thumb

    Format

    Format

    Move shifted register

    Move, compare, add, and subtractimmediate

    ALU operation

    High register operations and branchexchange

    PC-relative load

    Load and store with relative offset

    Load and store sign-extended byte andhalfword

    Load and store with immediate offset

    Load and store halfword

    SP-relative load and store

    Load address

    Add offset to stack pointer

    Push and pop registers

    Multiple load and store

    Add and subtract

    Conditional branch

    Software interrupt

    Unconditional branch

    Long branch with link

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

    Rd

    RdRb

    Rb

    Op

    0 0 1

    H1H2

    0 1 0 0 0 0

    0 1 0 0 1

    Ro1 L B 0

    Offset8

    Op

    Word8

    Rd

    Rn/offset3 RdRsOp000 111

    RdOp

    RdRs

    RdHdRs/Hs0 1 0 0 0 1

    0 1 0

    RdRbRo1 H S 10 1 0

    Offset5B L0 1 1

    Rb RdOffset50 L1 0 0

    Rd Word81 L1 0 0

    Rd Word80 SP1 0 1

    SWord70 0 0 S1 1 01 0

    Rlist1 0 R1 1 L1 0

    RlistRb0 0 L1 1

    Softset8Cond0 11 1

    Value81 1 1 11 0 11

    Offset1101 1 01

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

    03

    04

    06

    02

    05

    07

    08

    09

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19 OffsetH1 1 11

    Offset5 RdRsOp00001

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

  • Plan

    Gnralits

    Spcificits de larchitecture ARM

    Jeu dinstructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    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 desdirectives pour que le code soit plus facile crire et pluslisible.

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

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

    http://sourceware.org/binutils/docs/as

  • Syntaxe de lassembleur GNU pour ARM

    La forme gnrale des instructions est alors :

    [:] [] [@ ]

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

  • Syntaxe de lassembleur GNU pour ARM

    Les lignes ne contenant que des commentaires outiquettes ne sont pas comptes.Les tiquettes (labels) seront remplaces par ladresse delinstruction qui suit.Un symbole local ayant le nom de ltiquette est dfinit.

    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 unifie

    .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 quelconquedans un registre. Cette directive est replace en fonctionde la valeur par :

    MOV r0,#VALEUR LDR r0, [pc,#offset]...

    .word VALEUR

    O offset est le dcalage entre ladresse de linstruction etladresse o est positionne la valeur ( la fin du code).

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

  • Quelques directives dassemblage utilesRcuprer ladresse dune tiquette :ADR r0,ETIQUETTE

    Cette directive est remplace par :ADD r0,pc,#offset

    O offset est le dcalage entre la position de linstruction etla 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 laposition 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 tailledune instruction il faut raligner en remplissantventuellement 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

    Dfinition 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 lditionde 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 final

    Exemples de flags :"a" : allouer de lespace,"x" : contient du code

    excutable,"w" : est modifiable.

    Exemples de types :%progbits : contient des

    donnes%nobits : ne contient rien, il

    faut juste allouerlespace ncessaire

    Par dfaut, si la directive nest pas utilise, le code assembl seretrouve dans la section .textquivalent de .section .text, "ax",%progbits

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

    GnralitsSpcificits de l'architecture ARMJeu d'instructionsManipulation des donnesTransfert des donnesBranchementsExcution conditionnelleEncodage

    Directives d'assemblage