Cours Architectures Avancées 2ème Partie.pptx

Embed Size (px)

DESCRIPTION

[email protected]

Citation preview

2me partie Architecture des Systmes Embarqus

Introduction aux Processeurs embarqusEvolution des architectures des curs ARMProcesseur ARM7TDMI : Architecture et langage assembleurArchitecture Cortex-M3

1Chapitre 4 : Architecture des Processeurs ARM et Cortex Un microcontrleur ou MCU (Microcontroller Circuit Unit) est un systme informatique entier : (CPU ou Central Processing Unit, mmoire, bus contrleur dinterruption, interfaces parallles et sries, Timers, Convertisseurs A/N et N/A) contenu intgralement dans un circuit intgr uniqueLe CPU dun microcontrleur est gnralement moins complexe que celui dun systme informatique ordinaire (microordinateur), consommation lectrique plus faible (qq miliwatt en fonctionnement et de lordre du microwatt en veille) et galement moins performant : il supporte galement une centaine dinstruction et fonctionne des frquences relativement basse variant de quelques dizaines de MHz quelques centaines. Ceci permet de limiter la consommation en nergie du circuitCes circuits prix rduits grandes quantits (moins de 1$ pour 10000 pices) sont dune grande utilits pour les applications embarques 2Introduction aux Processeurs Embarqus

Mme si les c 8 bits se sont imposs longtemps ; ltendue des domaines dapplication des c, le besoin croissant en capacit de traitement et en comportement temps rel ont incit les concepteurs propos des processeurs 16 bits et particulirement 32 bits beaucoup plus performantsLes ventes des c 32 bits ont normment progress lors de la dernire dcennie et sont pass de moins de 1% en 2000 30% en 2006 pour atteindre les 38% en 2009 et on prvoit que cette croissance continuera durant les prochaines annes3Figure 1 : Evolution des ventes des c 8, 16 et 32 bits Introduction aux Processeurs Embarqus

La majorit des fabricants de c optent pour lintgration de CPU prconu, sous forme dIP Intellectual Property , dans leurs circuits et lui ajoutent les mmoires et les entres/sorties ncessaires pour les applications ciblesParmi les CPU (IP) les plus utiliss dans les c 32 bits, on trouve les curs de la socit ARM (Advanced Risc Machine), qui grce son cur Cortex sest impos comme le leaders des fournisseurs de curs 32 bits pour les applications embarqus (75% du march 32 bits)4Introduction aux Processeurs EmbarqusIntroduction aux Processeurs embarqusEvolution des architectures des curs ARMExtensions technologiques des curs ARM : Jazelle, Thumb, Thumb2, ThumbEE, VFP, NEON, TrustZoneVersions et implmentation des Curs ARMPerformances des curs ARMFamille CortexProcesseur ARM7TDMI : Architecture et langage assembleurArchitecture Cortex-M3

5Chapitre 3 : Architecture des Processeurs ARM et Cortex La socit ARM a t cre en 1990 par association de Apple Computer, Acorn Computer Group et VLSI Technology. Contrairement aux autres socits travaillant dans le domaine des semi-conducteurs, ARM ne fabrique pas de processeurs et les vend directement, mais elle les conoit et vend directement leur licence sous forme dIP des partenaires qui les intgrent dans leur microcontrleurs et processeursAujourdhui, les partenaires dARM vendent annuellement plus que 2 billions de circuits base de curs ARM dont larchitecture et le jeu dinstructions ont volu depuis la premire version ARM-v1 jusqu la version ARM-v7, appele galement Cortex6Evolution des architectures ARM7Evolution des architectures ARM

8

Evolution des architectures ARM9

Evolution des architectures ARMExtensions Technologiques des coeurs ARMJazelleThumbThumb-2Thumb Execution Environnement (ThumbEE)Floating-point (VFP)Advanced SIMD (NEON)TrustZone10Evolution des architectures ARMJazelle Jazelle DBX (Direct Bytecode eXecution) est une technique permettant dexcuter directement du Bytecode Java dans les architectures ARM comme un troisime tat dexcution (et jeu dexcution), en parallle lARM existant et au mode Thumb. Le support de cet tat est signal par le J de larchitecture ARMv5TEJ

11Evolution des architectures ARMExtensions technologiques des curs ARMThumbThumb est un jeu dinstruction 16 bits qui fournit un sous-ensemble des instructions ARM 32 bits classique et permet un gain de mmoire important.Dans le mode Thumb, les instructions 16 bits offrent moins de possibilits. Seuls les branchements peuvent, par exemple, tre conditionnels et plusieurs instructions sont limites laccs dune partie rduite des registre gnraux. Ces possibilits rduites amliorent la densit globale dun programme bien que certaines opration ncessitent plus dinstructions rduction du temps de chargement du code en mmoire et augmente la probabilit de rester dans le cache dinstruction augmentation des performances12Evolution des architectures ARM Extensions technologiques des curs ARMThumb-2La technologie Thumb-2 tend le jeu dinstructions limit 16 bits de Thumb par des instructions 32 bits additionnelles afin de donner plus de largesse au jeu dinstruction. Il en rsulte un jeu dinstructions de largeur variable.

Thumb-2 a pour vision datteindre une densit de code proche de Thumb tout en conservant des performance similaires au jeu dinstructions ARM en mmoire 32 bits.

Thumb-2 est :25% plus performant que le Thumb-126% plus dense que le code ARM standard13Evolution des architectures ARM Extensions technologiques des curs ARMThumb Execution Environnement (ThumbEE)ThumbEE, galement appel Thumb-2EE ou Jazelle RCT pour (Runtime Compilation Target : cible de compilation la vole) apparait pour la premire fois dans le processeur Cortex-A8. ThumbEE est le quatrime tat du processeur, ajoutant de petit changement au jeu dinstruction tendue thumb et thumb-2. Ces changements rendent le jeu dinstruction particulirement adapt la gnration de code au moment de lexcution, par la compilation la vole, dans des environnements dexcution contrls.ThumbEE est oriente vers les langages de programmation Limbo, Java, C#, Perl, Python ou Ruby et permet aux compilateurs la vol de gnrer moins de code de sortie sans affecter les performances.14Evolution des architectures ARM Extensions technologiques des curs ARMFloating-point (VFP)La technologie VFP (Vector Floatting Point : virgule flottante vectoriel) est une extension de coprocesseur de type FPU dans les architectures ARM. Il fournit le calcul des formats de virgule flottante simple et double prcision bas prix et de virgule flottante en double prcision remplissant la norme ANSI/IEEE std 754-1985.VFP fournit des calculs en virgule flottante permettant daccomplir un vaste spectre dapplications et de besoins tels que les PDAs, les smartphones, la compression et dcompression de voix, des graphiques en trois dimensions ou encore de laudio numrique, des boitiers multimdias et des applications automobiles.15Evolution des architectures ARM Extensions technologiques des curs ARMAdvanced SIMD (NEON)Lextension advanced SIMD (galement appel NEON ou MPE pour Media Processing Engine : moteur de calcul de mdias) est un SIMD (Single Instruction Multiple Data), combinant des jeux dinstruction 64 et 128 bits, qui fournissent de lacclration de calcul standardis pour les applications de mdias, 2D/3D et de traitement de signal.NEON peut faire du dcodage MP3 sur un processeur fonctionnant 10 MHz et peut encoder/dcoder le codec GSM AMR 13 MHz et permet dacclrer le dcodage de formats vidos tels que h264 ou Real.16Evolution des architectures ARM Extensions technologiques des curs ARMSecurity extensions (TrustZone)Grce une combinaison de composants logiciels et de matriel intgr, la technologie TrustZone fournit la base pour une architecture de systme hautement protg, avec un minimum dimpact sur la consommation d'nergie ou la performance du processeur 17Evolution des architectures ARM Extensions technologiques des curs ARMLes processeurs de la famille ARM sont tous conus autour dun cur de processeur standard de type RISC. Ce cur de processeur a t conu de manire obtenir des implmentation matrielles simples et efficaces, autorisant ainsi des performances importantes avec de faibles consommations lectriques.Les processeurs ARM tant des processeurs RISC, ils sont donc caractriss par :Une taille fixe des instructions (32 bits)Une banque de registres (32 bits) usages gnraux,Un dcodage des instructions cblUne excution pipeline (trois tages pour les ARM7, cinq pour les ARM9, six pour les ARM10 et huit pour les ARM11)Un objectif dexcution dun cycle par instruction (CPI = 1)Le standard ne dfinissant que la structure et le jeu dinstructions du cur de processeur, chaque industriel est susceptible de complter son processeur avec des modules matriels spcifiques, fonctions de la destination finale du processeur.18Evolution des architectures ARM Caractristiques fondamentales des curs ARMA chaque version du cur de processeur correspond une ou plusieurs implmentations physiques. On dnombre aujourdhui sept versions diffrentes du cur.Version 1 : cette version du cur correspond au processeur ARM1Version 2 : la version 2 du cur a t implmente par le processeur ARM2. lARM2 possde 27 registres (dont 16 accessibles simultanment) et quatre modes de fonctionnement diffrents :USR (USeR mode) : mode utilisateur. Certaines ressources sont inaccessibles (il sagit du seul mode de fonctionnement non privilgi)IRQ (Interrupt ReQuest mode) : mode interruption. Il devient actif lactivation de lentre IRQ du processeurFIQ (Fast Interrupt reQuest mode) : mode interruption rapide. Ce mode est actif lors de la rception dun signal FIQ du processeur. SVC (Supervisor mode) : mode superviseur. Cest un mode protg, utilis pour lexcution du systme dexploitation.Dans cette version, les 6 bits de fort poids du PC sont utiliss pour stocker ltat du processeur; en consquence, ladressage est limit 26 bits.19Evolution des architectures ARM Versions et implmentation des curs ARMVersion 3 : Dans cette version, la limitation de lespace dadressage 64 Mo est supprime avec un vritable adressage sur 32 bits et un nouvel ensemble de registres est ajout pour maintenir les informations concernant ltat du processeur :CSPR Current Processor Status RegisterSPSR : Stacked Processor Statut RegisterPar ailleurs, deux nouveau modes de fonctionnement sont ajouts :Abort : signal par le gestionnaire de mmoire, utilis pour implmenter des mcanismes de mmoire virtuelle et/ou de protection mmoire.Undefined : utilis pour lmulation logicielle de coprocesseur. Cette version du cur a t mise en uvre dans les processeurs ARM6, ARM7 et Amulet1.lARM7 est fonctionnellement identique lARM6, mais fonctionne des frquences plus leves (>40 MHz), et dispose de quelques amliorations : cache de 8Ko modifi pour diminuer la consommation, gestion mmoire plus performant;20Evolution des architectures ARM Versions et implmentation des curs ARMVersion 4 : Cette version reprend les caractristiques de la version 3 en y incluant des instructions de lecture/criture sur 16 bits. Par ailleurs, certaines instructions optionnelles sur le curs de la version 3 (oprations de multiplication tendues, spcialises pour le traitement de signal) sont intgrs larchitecture. Le pipeline dexcution comprend cinq tages. Enfin, un nouveau mode de fonctionnement fait son apparition : le mode system, identique au mode supervision sans utilisation de copies prives des registres.Ce cur a t implment dans les processeurs ARM8, ARM9 et Strong ARM.LARM8 reprend les caractristiques de lARM7, hormis la longueur du pipeline dexcution, la prsence dune unit dexcution spculative, la mise en place dune politique dcriture retarde pour le cache et limplmentation dune instruction de multiplication sur 64bits. Ce processeur peut dlivrer une performance de 80 MIPS 80 MHz.Le StrongARM est une version cache Havard (caches instructions et donnes spars aliments par des bus spars). Performance : frquence comprise entre 100 et 200 MHz pouvant atteindre 230MIPSLARM9 est une version volu de lARM8 architecture Havard.

21Evolution des architectures ARM Versions et implmentation des curs ARMVersion 5 : Cette version reprend les caractristiques de la version 4 en ajoutant plusieurs instructions (comptage de zro, point darrt logiciel, ). Il intgre de surcroit des units dexcutions multiples, et lunit de lecture/ criture devient parallle. Le pipeline comprend six tages (sept dans la version intelXScale).Elle est implmente par la gnration ARM10 et intel Xscale. Les processeurs ARM10 intgrent jusqu 2x32 Ko de cache, et le gestionnaire de mmoire est totalement compatible avec les systmes dexploitations embarqus les plus rpandus (Windows CE, Linux). Il peut atteindre la performance de 400 MIPS la frquence 325MHzLes processeurs Intel Xscale intgrent des extensions telles que la gestion des communications sans fils, des priphriques divers. Performances : 624 MHz

Version 6 : cette version amne des amlioration notamment dans le domaine multimdia par le biais des extensions SIMD. La multiplication des units dexcution.Cette version est implmente par la famille ARM11. Ses performances dpassent les 600MIPS, les frquences de fonctionnement peuvent atteindre le 1GHz.22Evolution des architectures ARM Versions et implmentation des curs ARMVersion v7 : La famille CortexContrairement aux architectures prcdentes, Cortex intgre entre autre la gestion des interruptions et des exceptions ce qui permet une plus grande transparence et souplesse au niveau de la programmation ainsi quun portage de code plus simple.Les curs de Cortex portent la dsignation Cortex-XN ou X dsigne le profil auquel appartient le cur et N son degr de performance qui varie entre 0 (le moins performant) et 9 (le plus performant). On distingue 3 profils propres larchitecture ARM-v7 ou Cortex :Cortex-ACortex RCortex-M23Evolution des architectures ARM ARM v7 : La famille CortexCortex-ADestin pour faire tourner des applications complexes telles que les systmes dexploitation embarqus (symbian, Linux, Windows CE) ncessitant une puissance de traitement leve et un systme de gestion de mmoire virtuelle (MMU). Les processeurs appartenant ce profil peuvent fonctionner avec des frquences de 2GHz et avec une performance de 2,5DMIPS/MHz1 et contiennent des architectures SIMD ainsi que des technologie Jazelle. On les trouve dans des produits tels que les tlvisions numriques haute dfinition, les terminaux mobiles,

1Dhrystone MIPS : Performance de traitement du processeur en millions dInstructions par seconde obtenue par excution du bechmark Dhrystone24Evolution des architectures ARM ARM v7 : La famille CortexCortex-RDestin principalement aux applications temps rel contraintes trs svres et exigeant une haute fiabilit et un temps de rponse faible.Les processeurs de ce profil contiennent galement une unit additionnelle pour le calcul en virgule flottante et sont utiliss titre dexemple dans les disques durs, les appareils photo numriques, le domaine de lautomobile (systme de freinage)25Evolution des architectures ARM ARM v7 : La famille CortexCortex-MOptimis pour les applications ncessitant une basse consommation dnergie, un cot rduit et un comportement dterministe pour le traitement des interruptions.Cest le profil qui est destin tre intgr dans les microcontrleurs.Principalement le cur Cortex-M3, lanc en 2004, et qui grce son cot et sa performance a connu un grand succs et a fait converger la majorit des constructeurs de microcontrleurs, pour la premire fois, vers une architecture commune.Dj 28 socits (dont 6 font partie du top 10) ont opt pour ce cur (Texas Instruments, ST-Microelectronics, NXP, Atmel, Zilog, samsung, etc)26Evolution des architectures ARM ARM v7 : La famille Cortex27

Performance et domaines dapplications des profils de larchitecture CortexEvolution des architectures ARM ARM v7 : La famille Cortex28Evolution des architectures ARM Performances des architectures ARM

29

Evolution des architectures ARM Performances des architectures ARMEvolution des Processeurs embarqusEvolution des architectures des curs ARMProcesseur ARM7TDMI : Architecture et langage assembleurArchitecture interne du processeur ARM7TDMICodage et excution dinstructionsLes modes opratoires de lARM7TDMIOrganisation de la mmoire et des entres/sortiesLes registresLes exceptions et les interruptionsLe jeu dinstructions standards de lARM7TDMIArchitecture Cortex-M3

30Chapitre 3 : Architecture des Processeurs ARM et Cortex Vue dune puce utilisant unARM731

Architecture interne : cur processeur ARM732Registre dcritureRegistre de lectureRegistre instructionRegistre dadresseIncrmenteurdadresseBanque de RegistresR0R1R2R3R4R5SPLRPC Multiplieur 32x8BarrelshifterUnit Arithmtiqueet logique 32 bitsN Z C V Q I F T M4M3M2M1M0Logique de contrleDcodage dinstructionCPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS B BUS dincrmentation DatapathBIGENDMCLKnWAITnRWMAS[1:0]ISYNCnIRQnFIQnRESETABORTnTRANSnMREQSEQLOCKnM[4:0]nOPCnCPICPACPBVue simplifie du curARM7TDMIL'architecture de l'ARM7TDMI est de type Von Neumann donc il n'y a qu'un bus pour vhiculer les instructions et les donnes.

L'ARM dispose de 16 registres visibles sur lesquels les oprations sont effectues.

Les instructions LOAD/STORE servent respectivement charger/enregistrer les donnes de/vers la mmoire.33La partie oprative (datapath) est constitue de 2 bus A et B sur lesquels se font les oprations.

Le flot de calcul est le suivant : Banc de registres sur A et B => Barrel shifter sur B => UAL => Banc de registres

Les oprations sur ce datapath durent 1 cycle.

34Vue simplifie du curARM7TDMIExempleL'excution de l'instruction ADD r0,r1,r2 consiste mettre r1 et r2 sur A et B, effectuer l'addition dans l'UAL et crire le rsultat dans r0.(r0) := (r1) + (r2)

Une opration de dcalage aurait pu avoir lieu sur r2 dans le mme cycle ADD r0,r1,r2,LSL#2. Ici r2 est dcal de 2 bits sur la gauche avant d'tre additionn.(r0) := (r1) + 4 * (r2)35Vue simplifie du curARM7TDMILe registre d'adresse fournit les adresses la mmoire.

Les blocs dcompression et dcodage des instructions servent aux 2 premiers cycles du pipeline alors que le datapath sert au 3me cycle.

Les registres de Lecture et d'criture des donnes sont des tampons de donnes avec la mmoire externe pour les instructions LOAD/STORE.

Le bloc de contrle droite est l'interface avec tous les signaux de commande externes : contrleur mmoire, coprocesseurs, interruptions...36Vue simplifie du curARM7TDMILe Pipeline dinstructionsLa famille ARM7 utilise un pipeline 3 tages pour augmenter la vitesse du flot dinstructions dans le microprocesseur.

Le PC pointe sur linstruction en cours de lecture (FETCHed) et non sur linstruction en cours dexcution.Les instructions sont "pipelines" en 3 cycles d'horloge : FETCH, DECODE et EXECUTE.Ainsi le concept RISC (1 instruction par cycle) est respect.37

Il faut 6 cycles pour excuter 6 instructions (CPI Cycles Per Instruction=1).Toutes les instructions n'oprent que sur des registres (1 cycle).38

Exemple 1 : Pipeline optimalLe pipeline est rompu cause de linstruction LDR qui lit une donne en mmoire et la charge dans un registre.Il faut 6 cycles pour excuter 4 instructions. CPI = 1,5.Remarque : Les instructions LOAD et STORE prennent donc 3 cycles la place de 1.39Exemple 2 : Pipeline avec LDR

Les instructions ARM sont toutes codes sur 32 bits.40Codage des instructions313029282726252423222120191817161514131211109876543210Code conditionCode oprationSRnRdDeuxime oprandeFormat gnral dune instruction313029282726252423222120191817161514131211109876543210Code conditionCode opration

Dcalage par rapport ladresse courante, cod sur 24 bitsFormat des instructions de branchementExemple de programme simpleConsidrons le programme suivant qui ralise une addition de deux valeurs situes en mmoire. Le mot mmoire situ ladresse contenue dans R0 est additionn au mot mmoire situ ladresse contenue dans R2, et le rsultat est rang en mmoire ladresse contenue dans R4.LDRR1, [R0]@ rcupration du premier motLDRR3, [R2]@ et du second motADDR5, R3, R1@ addition des valeursSTRR5, [R4]@ et rangement du rsultat41Excution dinstructionsCodage du programmeLe code hexadcimal correspondant ces instructions est le suivant :LDRR1, [R0] E5901000LDRR3, [R2] E5923000ADDR5, R3, R1 E0835001STRR5, [R4] E5845000

Excution du programmeConsidrons que le programme est implant en mmoire ladresse 0x2000, et que le PC est charg avec cette adresse. Supposons aussi que :R0 contient 0x3000, R2 contient 0x3004 et R4 contient 0x300CLe mot mmoire ladresse 0x3000 est 10, et le mot mmoire ladresse 0x3004 est 2

42Exemple dexcution dun programme43Registre dcritureRegistre de lectureRI : LDR R1, [R0] RA. : 0x2000 IncrmenteurdadresseBanque de RegistresR0R1R2R3R4R5SPLR0x2004 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleDcodage dinstructionCPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS B BUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0xE59010001er Cycle dexcution0x2000Mmoire4444Registre dcritureRegistre de lectureRI : LDR R3, [R2] RA : 0x2004 IncrmenteurdadresseBanque de RegistresR0R1R2R3R4R5SPLR0x2008 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleDcodage dinstructionLDR R1,[R0]CPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS B BUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0xE59230002me Cycle dexcution0x2004Mmoire454545Registre dcritureRegistre de lectureRI : ADD R5, R3, R1 RA : 0x2008 IncrmenteurdadresseBanque de Registres0x3000R1R2R3R4R5SPLRx200C Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleLDR R1, [R0]Dcodage dinstructionLDR R3,[R2]CPSRBus dadresses A[31..0]Bus de donnes D[31..0]0x30000x3000BUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0xE59230003me Cycle dexcution0x2008#0R0Mmoire046464646Registre dcritureRegistre de lecture : 0xARI : ADD R5, R3, R1 RA : 0x3000 IncrmenteurdadresseBanque de Registres0x3000R1R2R3R4R5SPLRx200C Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleLDR R1, [R0]Dcodage dinstructionLDR R3,[R2]CPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0xA4me Cycle dexcution0x3000BUS B #0R0Mmoire4747474747Registre dcritureRegistre de lecture : 0xARI : ADD R5, R3, R1 RA : 0x3000 IncrmenteurdadresseBanque de Registres0x30000xAR2R3R4R5SPLRx200C Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleLDR R1, [R0]Dcodage dinstructionLDR R3,[R2]CPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC5me Cycle dexcution0x30000xA#0R0MmoireR1484848484848Registre dcritureRegistre de lectureRI : STR R5, [R4] RA : 0x200C IncrmenteurdadresseBanque de Registres0x30040xAR3R4R5SPLRx2010 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleLDR R3, [R2]Dcodage dinstructionADD R5, R3, R1CPSRBus dadresses A[31..0]Bus de donnes D[31..0]0x30040x3004BUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC6me Cycle dexcution0x200C#0R0MmoireR10xE5845000#00x3004R249494949494949Registre dcritureRegistre de lecture : 0x2RI : STR R5, [R4] RA : 0x3004 IncrmenteurdadresseBanque de Registres0x30040xAR3R4R5SPLRx2010 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleLDR R3, [R2]Dcodage dinstructionADD R5, R3, R1CPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0x3004#0R0MmoireR10x2BUS B0x3004R27me Cycle dexcution5050505050505050Registre dcritureRegistre de lecture : 0x2RI : STR R5, [R4]Registre dAdresseIncrmenteurdadresseBanque de Registres0x30040xA0x2R4R5SPLRx2010 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleLDR R3, [R2]Dcodage dinstructionADD R5, R3, R1CPSRBus dadresses A[31..0]Bus de donnes D[31..0]0x02BUS ABUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC#0R0MmoireR1BUS B0x3004R28me Cycle dexcutionR35151515151515151Registre dcritureRegistre de lecture : 0x2 RI : Inst. X RA : 0x2010 IncrmenteurdadresseBanque de Registres0x30040xA0x02R4r5: 0xCSPLRx2014 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleADD R5, R3, R1Dcodage dinstructionSTR R5, [R4]CPSRBus dadresses A[31..0]Bus de donnes D[31..0]0x0C0x02BUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0x2010#0R0MmoireR10x.0xA0x3004R29me Cycle dexcutionR3525252525252525252Registre dcritureRegistre de lecture : 0x2 RI : Inst. Y RA : 0x2014 IncrmenteurdadresseBanque de Registres0x30040xA0x020x300Cr5: 0xCSPLRx2018 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleSTR R5, [R4]Dcodage dinstructionInst. XCPSRBus dadresses A[31..0]Bus de donnes D[31..0]0x300C0x300CBUS dincrmentation 0x300C 0x (??)0x3008 0x(??)0x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst.x)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0x2014#0R0MmoireR10x.#00x3004R210me Cycle dexcutionR3R453535353535353535353Registre dcriture : 0x0CRegistre de lecture : 0x2 RI : Inst. Y RA : 0x300C IncrmenteurdadresseBanque de Registres0x30040xA0x020x300Cr5: 0xCSPLRx2018 Multiplieur 32x8 Registre dcalageUnit Arithmtiqueet logique 32 bitsLogique de contrleSTR R5, [R4]Dcodage dinstructionInst. XCPSRBus dadresses A[31..0]Bus de donnes D[31..0]BUS UALBUS ABUS dincrmentation 0x300C 0xC0x3008 0x(??)0x3004 0x20x3000 0xA (10)

0x2018 0x(inst. Z)0x2014 0x(Inst. Y)0x2010 0x(Inst. X)0x200C 0xE58450000x2008 0xE08350010x2004 0xE59230000x2000 0xE5901000PC0x300C#0R0MmoireR10x0C0x0C0x3004R211me Cycle dexcutionR3R4Les modes de lARM7TDMILe processeur ARM a plusieurs modes de fonctionnement diffrencis par des ressources et des privilges spcifiques : certaines oprations ne sont autorises que dans certains modes.

Ces modes simplifient le portage d'un systme d'exploitation multi-utilisateurs.

Ils participent la protection du code et des donnes ainsi qu' la gestion d'erreurs.54Les modes de lARM7TDMIUn ARM7TDMI a 7 modes opratoires de base :

User : sans privilge, la plupart des tches sexcutent FIQ : entre par une interruption de priorit haute (Fast) IRQ : entre par une interruption de priorit basse (normale) Supervisor : entre la rinitialisation et lors dune interruption logicielle (SWI SoftWare Interrupt) Abort : utilis pour grer les violations daccs mmoire Undef : utilis pour grer les instructions non dfinies (undefined) System : mode avec privilge utilisant les mmes registres que le mode User.55Organisation de la mmoire et des entres/sortiesOrganisation de la mmoireLespace mmoire dun processeur ARM est constitu de 232 octets. Le bus dadresse est utilis par le processeur pour dialoguer avec la mmoire. Cela concerne aussi bien laccs aux instructions que laccs aux donnes en lecture et criture.Le bus de donnes donne, lui, accs trois registres : deux pour lchange de donnes, un pour les instructions. Les entres/sortiesLe mode de gestion des entres/sorties sur les processeurs ARM consiste utiliser des portions de lespace dadressage pour dialoguer avec les priphriques. On parle de mappage mmoire (memory mapping) la mise en uvre de ce systme est relativement complexe. Par exemple, les zones mappes sur les entres/sorties ne doivent pas tre places en cache

56Les types de donnes manipulables par les processeurs ARM sont :Word : donne code sur 32 bits, soit 4 octets. Il doit imprativement tre aligns sur une adresse divisible par 4. un mot mmoire est donc rang dans les octets dadresses A, A+1, A+2 et A+3 avec A divisible par 4.Halfword : est une donne code sur 16 bits, soit 2 octets. Il doit tre align sur une adresse paireByte : est une donne code sur 8 bits. Il peut tre rang nimporte o en mmoire.

Little-endian ou big-endianBig-endian : les bits de plus fort poids du mot sont stocks ladresse la plus basse Little-endian : les bits de plus faible poids sont stocks ladresse la plus basseCest par le biais dun signal externe BIGEND que la slection se fait :1 big-endian, 0 little-endian.

Les accs non aligns : les accs aux mots doivent tre aligns sur des adresses divisibles par 4, et les accs des demi-mots doivent tre aligns sur des adresses paires. Lorsque ce nest pas le cas, on dit que laccs est non align. En rgle gnrale, le rsultat dun accs mmoire non align est non prvisible.57Types de donnes37 registres organiss en bancs associs aux modes.17 registres sont visibles :13 registres de donnes gnriques (r0 - r12).Le registre spcifique r13 est rserv comme pointeur de pile et il est propre chaque mode. Il s'appelle aussi SP.Le registre spcifique r14 est aussi le registre de retour de sous programme LR (Link Register). Il vite l'empilage du PC et est propre chaque mode.Le registre spcifique r15 est aussi le compteur ordinal PC.Le registre de statut CPSR (Current Program Status Register) contient des informations sur l'tat du processeur.Le registre SPSR est une copie du CPSR avant de changer de mode. Ce registre vite l'empilage du CPSR et est propre chaque mode.58Organisation du banc de registres59UserSystemSupervisorAbortUndefinedinterruptFast interruptR0R0R0R0R0R0R0R1R1R1R1R1R1R1R2R2R2R2R2R2R2R3R3R3R3R3R3R3R4R4R4R4R4R4R4R5R5R5R5R5R5R5R6R6R6R6R6R6R6R7R7R7R7R7R7R7R8R8R8R8R8R8R8_fiqR9R9R9R9R9R9R9_fiqR10R10R10R10R10R10R10_fiqR11R11R11R11R11R11R11_fiqR12R12R12R12R12R12R12_fiqR13R13R13_svcR13_abtR13_undR13_irqR13_fiqR14R14R14_svcR14_abtR14_undR14_irqR14_fiqR15R15R15R15R15R15R15CPSRCPSRCPSRCPSRCPSRCPSRCPSRSPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqLes registres accessibles selon les diffrents modes de fonctionnement dun processeur ARM Modes dexceptionModes privilgis60313029282726259876543210NZCVQIFTM4M3M2M1M0Bits de code conditionLa signification des diffrents bits de code condition :N (Negative) : reflte ltat du bit 31 du rsultat de linstructionZ (Zero) : bit 1 lorsque le rsultat de linstruction est 0C (Carry) : reprsente la retenue propagerV (oVerflow) : dpassement de capacit. V est positionn 1 si un dpassement se produit la suite dune opration daddition ou de soustraction, les oprandes tant considrs comme signs en complment deuxQ: dpassement de capacit ou saturation dans les oprations de traitement du signalCode conditionBits de contrleRservRegistre dtatBits de contrleCes bits peuvent tre modifis de deux manires :Lorsquune exception se produitPar une modification explicite par programme . Ceci nest possible que lorsque le processeur est en mode privilgiLa significations de ces diffrents bits est la suivante :I et F : permettent de dsactiver les interruptions IRQ et FIQ respectivement . Il faut, pour cela mettre le bit correspondant 1T : indique le jeu dinstructions utilis par le processeur. Lorsquil est gal 0, le jeu dinstruction utilis est le thumbM(Mode) : M[4..0] permettent de dterminer le mode de fonctionnement du processeur.61Registre dtatLe Barrel ShifterLARM7 ne dispose pas, dinstruction de dcalages et de rotations de bits.

A la place, il dispose dun Barrel Shifter permettant deffectuer des dcalages et des rotations au sein dautres instructions.62

Dcalage logique gauche (LSL) multiplication par une puissance de 2 :

Dcalage logique droite (LSR) division par une puissance de 2 :

Dcalage arithmtique droite (ASR) division par puissance de 2 + prservation du signe pour le complment :630C0CC

Oprations possibles avec leBarrel Shifter

La rotation droite (ROR) :

La rotation droite tendue (RRX) :64

Oprations possibles avec leBarrel Shifter

CCLes exceptionsUne exception est un vnement provoqu par une condition exceptionnelle lors de l'excution de l'instruction courante : Adresse mmoire invalide Instruction non autorise ou invalide Division par zro (faite par un coprocesseur)

Les exceptions sont dtectes par le CPU puis traites dans le contexte du programme courant.65Les interruptionsUne demande d'interruption peut tredclenche par un vnement associ un composant matriel :dbut/fin d'entre/sortie d'un priphriquechance de temps termine

un signal envoy au processeur de l'extrieur par lintermdiaire dun PIC (Programmable Interrupt Controler).66Traitement des exceptions et desinterruptionsLorsquune exception ou une interruption survient :le processeur suspend tout dabord l'excution en courssauvegarde ensuite ltat courant (PC, SP, registre d'tat) dans des registres ddis ou dans une pileenfin charge le PC une adresse mmoire spcifique qui dpend de lexception ou de linterruption

Ces adresses sont localises dans une partie de la mmoire appele le vecteur dexceptions /interruptions.67Vecteur dexceptions /interruptionsLe vecteur dexceptions / interruptions contient gnralement les adresses des fonctions permettant de traiter de manire approprie les diffrents vnements.

Ces fonctions sont appeles gestionnaires dexceptions ou dinterruptions.68Jeu dinstructions standard de lARM7Quatre types dinstructions :Les instructions de contrle de flux (branchement)Les instructions de traitement de donnes (arithmtiques et logiques)Les instructions de manipulation de registres Les instructions diverses : smaphore, gnration dexception et les instructions coprocesseurs

Excution conditionnelleToutes les instructions (ou presque) possde des formes dexcution conditionnelle. Cela signifie que leur excution aura lieu si les bits de code excution sont positionns de faon satisfaisante ; dans le cas contraire excution dun NOP

Positionnement des indicateurs de code conditionToutes les instructions peuvent modifier les bits de condition du CPSR ; il suffit pour cela de faire suivre le mnmonique de linstruction par la lettre S :MOV R0, #0 laisse inchang les bits indicateurs de conditionMOVS R0, #0 met N,C et V 0 et Z 1

6970Jeu dinstructions standard de lARM7CodeextensionSignificationBits de condition0000EQEQual : galZ0001NENot Equal : diffrentZ0010CS/HSCarry Set/unsigned Higher or Same : suprieur ou gal non signC0011CC/LOCarry Clear/ unsigned Lower : infrieur non signC0100MIMinus/negative : ngatifN0101PLPlus/positive or zero : positif ou nulN0110VSoVerflow Set : dbordementV0111VCoVerflow Clear : pas de dbordementV1000HIUnsigned Higher : suprieur non signC.Z1001LSUnsigned Lower or Same : infrieur ou gal non signC.Z1010GESigned Greater than or Equal : suprieur ou gal signN.V+N.V1011LTSigned LessThan : infrieur signNV1100GTSigned Greater Than : suprieur signZ.N.V + N.V1101LESigned Less than or Equal : infrieur ou gal signZ+NV1110ALAlways : excution inconditionnelle1111Branchement classique simple : B (Branch)B {} Appel de sous-programme : BL (Branch with link)BL {} ; met jour le registre R14 link registerVersions basculant en mode Thumb : BX (Branch AND eXchange) et BLX (Branch with Link AND eXchange)Exemple : BL subroutineCMPr1, #5MOVEQr1, #0; si r1=5 alors r1=0subroutine.MOVpc,lr ; retour aprs appel de procdure

71Instructions de branchementPas moins de 11 modes dadressage sont utilisables lorsque loprande sera prcis. Ces 11 modes se scindent en trois catgories:Adressage immdiat : ce mode dadressage permet de prciser une constante utiliser comme oprande. Syntaxe : #Adressage par registre : Ce mode exploite le contenu dun registreSyntaxe : ; o Rm prcise le registre utiliserAdressage par registre avec dcalage : ce mode dadressage permet dutiliser la valeur contenue dans un registre dcale logiquement, arithmtiquement ou circulairement, gauche ou droite, de 0 31 positions. Le dcalage se fait par insertion de zro., LSL # / , LSR #, LSL / , LSR , ASR # ; dcalage arithmtique, ASR , ROR # ; rotation, ROR 72Instructions de traitement des donnesLes assignations : MOV (MOVe) et MVN (MoVe Not)Syntaxe : MOV {} {S} ,

Les instructions daddition/soustraction : ADD (ADDition), SUB (SUBstract)On distingue six oprations diffrentes : ADD pour laddition, ADC pour laddition avec retenue, SUB pour la soustraction, RSB pour la soustraction oprandes inverss (on soustrait le second oprande source au premier), SBC pour la soustraction avec retenue et RSC pour la soustraction avec retenue et oprandes inverss.Syntaxe : ADD {} {S} , , SUB {} {S} , , Avec : : registre rsultat, : registre contenant le premier oprande : spcifie le second oprande selon le mode dadressage.

73Instructions de traitement des donnesLes instructions logiques : AND, ORR, EOR (Exclusive OR) et BIC (Bit Clear)Ces instructions regroupent les quatre instructions suivantes : ET, OU, OU Exclusif et la remise zro.Syntaxe : AND {} {S} , , ORR {} {S} , , EOR {} {S} , , BIC {} {S} , , BIC ralise le ET logique bit bit des oprandes avec ngation pralable du second oprande.74Instructions de traitement des donnesLes instructions de comparaison : CMP (CoMPare), CMN (CoMpare Negative), TST (TeST) et TEQ (Test Equivalence)

Les instructions de comparaison ralisent une mise jour des bits de code condition du CPSR par le biais doprations arithmtiques (soustraction pour le CMP et addition pour le CMN). Les instructions de test mettent jour ces mmes bits par le biais dune opration logique (ET logique pour le TST et OU exclusif pour le TEQ).

Syntaxe : CMP{} , CMN{} , TST{} , TEQ{} {S} , 75Instructions de traitement des donnesLes instructions de multiplicationIl existe deux catgories de multiplication : les multiplications normales (sur 32 bits) et les multiplications longues (sur 64bits). Les instructions de la premire catgorie tronquent le rsultat pour le contenir dans un registre. Les instructions de la seconde catgorie utilisent deux registres.MUL {} {S} , , *MLA{} {S} , , , ; * +UMULL {} {S} , , , *; multiplication non signeMultiplication signe : SMULL (Signed MULtiply Long) 76Instructions de traitement des donnesDans le cas dun chargement, le contenu de la mmoire situ ladresse dtermine grce loprande source est rang dans un registre de destination.Dans le cas dun rangement, le contenu du premier registre est rang en mmoire ladresse dtermine grce loprande spcifi en deuxime position.

Modes dadressages des instructions de traitement daccs la mmoireLaccs la mmoire se fait toujours par le biais dun registre contenant ladresse mmoire utiliser. Pas moins de neuf mode dadressage sont utilisables pour ces oprations. Ces neufs modes peuvent tre classs en trois catgories :Les accs par dplacement simpleLes accs par dplacement pr-index Les dplacement post-indexPour chaque catgorie, on dispose dun accs immdiat, dun accs par registre ou dun accs par registre dcal

77

Les instructions de chargement/rangement

Adressage par dplacement simpleCe mode permet de prciser un registre utiliser comme adresse. La valeur du registre peut tre modifie par un dplacement immdiat sur 12bits (dplacement simple) ou par une valeur dans un second registre (cette dernire pouvant ventuellement faire lobjet dune rotation).Syntaxe : [, #+/- ] [, +/- ] [, +/- , {LSL / LSR / ASR / ROR / RRX} #] Adressages avec dplacement pr-indexLes modes dadressages avec dplacement simple peuvent ventuellement tre suivis dun point dexclamation (!). Dans ce cas la valeur rsultant du calcul et permettant dadresser la mmoire sera sauvegarde dans le registre dadresse Rn.Exemple : R0 0x1000, [R0, #0x12]! permet daccder ladresse 0x1012 et R0 0x1012Adressage avec dplacement post-indexDans ce cas, le crochet fermant des adressages avec dplacement simple se positionne juste aprs le registre dadresse Rn. Cela indique que cest la valeur de se registre est utilise pour accder la mmoire. La valeur rsultant du calcul est utilise pour mettre jour Rn.Exemple : R0 0x1000 ; [R0], #0x12 permet daccder ladresse 0x1000 et R0 0x101278

Les instructions de chargement/rangement

79

Modes dadressages des instructionsLDR, STR, LDRB et STRBLes instructions de chargement/rangement simples : LDR (LoaD Register) et STR (STore Register)Les instruction LDR et STR manipulent les 32 bits de registre Rd.Syntaxe : LDR {} {B} , B indique que le transfert concerne un octet. Loctet est transfr dans loctet de plus faible poids du registre Rd et les 24 bits de plus fort poids sont 0 STR {} {B} , B indique que le transfert concerne un octet. Loctet transfr en mmoire est loctet du plus faible poids du registre Rd80

Les instructions de chargement/rangement

81

Les instructions de chargement/rangement

Exemple 182

Les instructions de chargement/rangement

Exemple 2Remarque 1 :Lors du chargement dun byte non sign dans un registre, les 24 bits de forts poids sont mis 083

Les instructions de chargement/rangement

Remarque 2Lorsquun mot est non align (adresse non divisible par quatre), cest le mot qui contient cette adresse qui est charg dans le registre.Cependant, le mot subit une rotation pour que le byte correspondant ladresse utilise devienne le byte le moins significatif.84

Les instructions de chargement/rangement

Remarque 3 : Lorsquun mot est stock en mmoire une adresse non divisible par quatre, les deux derniers bits de ladresse sont mis 0 et le mot est stock avec cette adresse.85

Les instructions de chargement/rangement

Les instructions de chargement /rangement de demi-mot et de chargement signes

Le chargement doit prciser sil seffectue sur la taille demande ou si une extension de signe doit tre ralise (chargement sign).LDRH (LoaD Register Halfword)STRH (STore Register Halfword)LDRSB (LoaD Register Signed Byte)LDRSH (LoaD Register Signed Halfword)Sur les neuf mode dadressage, seuls six sont accessibles. Les accs par registre dcal ne sont pas admis. Par ailleurs, les accs par dplacement immdiat utilisent des valeurs codes sur 8bits signs.

Elles peuvent tre excutes de manire conditionnelle.Exemple : LDREQHSyntaxe : LDR {cond} H SH SB , STR {cond} H B ,

86

Les instructions de chargement/rangement

Modes dadressages des instructions LDRH, LDRSH, STRH, LDRSB87

Les instructions de chargement/rangement

Transferts de halfwords (16bits) et de bytres signsRemarque 1 : lors dun chargement dun halfword ou dun byte sign de la mmoire, le signe est tendu pour donner un mot de 32bits de mme valeur

88

Les instructions de chargement/rangement

Remarque 2 : ces instructions ne permettent pas lutilisation de dcalage

Remarque 3 : les transferts de bytes ou de halfwords vers les registres dpendent de la reprsentation signe ou non de la valeur.lextension du signe aux 32 bits du registre marque la diffrence89

Les instructions de chargement/rangement

LDRSB R1, [R2,#6]Les instructions de chargement/rangement par bloc : LDM (LoaD Multiple) , STM (STore Multiple)Ces instructions permettent de manipuler plusieurs registres simultanment. Elle sappuient sur un modes dadressages spcifiques :IA (Increment After) : on procde lincrmentation de ladresse de base aprs lopration de lecture/critureIB (Increment Before) : on procde lincrmentation de ladresse de base avant lopration de lecture/critureDA (Decrement After) : on procde la dcrmentation de ladresse de base aprs lopration de lecture/critureDB (Decrement Before) : on procde la dcrmentation de ladresse de base avant lopration de lecture/critureSyntaxe : LDM {} !, {^} STM {} !, {^}{^} utilis unique en mode privilgi, les registres concerns sont ceux de la banque utilisateur et non courante

90

Les instructions de chargement/rangement

Exemple simple : enregistrement du contenu des registres R0, R3, R4 ladresse mmoire pointe par R1. Les registres sont stocks dans lordre croissant des adresses.91

Les instructions de chargement/rangement

Les registres sont dposs en mmoire dans lordre croissant des adresses, de R0 R15, quel que soit leur ordre dans la liste de linstruction.Ils sont repris de la mmoire (LDM) dans lordre inverse, de R15 R0Par habitude, les registres sont crits dans lordre croissant dans la liste de linstruction.Ladresse pointe par Rn doit tre une adresse de mot, divisible par quatre. Ce pointeur peut tre fixe ou mis jour aprs les transferts grce au symbole ! .STMIA R1, { RO, R3, R4 } ; R1 nest pas modifiSTMIA R1 ! , { RO, R3, R4 } ; R1 := R1 + 12 (3 registres de 4 bytes)92

Les instructions de chargement/rangement

Quatre manires de disposer les registres en mmoire : Dpt en mmoire avec une adresse montante ou avec une adresse descendante. Pointeur sur le dernier lment dpos ou la premire place libre.

Pour chaque disposition, il existe un LDM et un STM.93

Les instructions de chargement/rangement

Exemples94

Les instructions de chargement/rangement

95

Les instructions de chargement/rangement

Les instructions de manipulations des registres dtatsMRS {} , ; transfert du registre dtat (CPSR ou SPSR) dans un registre gnralMSR {} _, ; transfert du contenu dun registre gnral dans un registre dtatMSR {} _, # spcifie quel partie du registre doit tre modifie : all, c (altre les 8bits poids faible) ,x (altre les bits de 8 15), s (altre les bits de 16 23) et f (les bits de 24 31)

96Instructions de smaphores : SWP(SwaP) , SWPB (SwaP Byte)Deux instructions permettent de grer les accs concurrents en environnement multiprocesseurs. Ces instructions permettent de raliser des oprations de lecture/criture mmoire atomique.SWP : ralise un change entre un mot contenu en mmoire et le contenu dun registre SWP{} , , [] ; Rd: registre de destination, Rm : registre source, Rn : registre contenant ladresse mmoireSWPB : ralise un change entre un octet contenu en mmoire et le contenu dun registre (avec extension par zro pour les bits de poids forts) Instruction dinterruption : SWI (SoftWare Interrupt)linstruction SWI permet de gnrer une interruption logicielle. Le seul moyen pour un programme sexcutant en mode utilisateur dinvoquer lexcution de code en mode privilgie.SWI{} ; : utilis par la routine dinterruption pour dterminer le service demand au systme dexploitation.

Instructions dutilisation des coprocesseursInstruction dinvocation dune opration (CDP)Instructions de transfert de blocs de registres entre un coprocesseur et la mmoire (LDC, STC)Instructions de transfert dinformations entre registres du coprocesseur et du processeur (MRC, MCR)

97

Instructions diverses

Les pseudo instructions ADR (load ADdRess) et LDR (LoaD Register)

Il sagit d instructions comprises par lassembleur, et remplaces par celui-ci au moment de la compilation par de vraies instructions ARM7.

Elles permettent dautomatiser des traitements fastidieux concernant le calcul dadresses, la rservation de valeurs en mmoire , etc.

Les deux pseudo instructions les plus rpandues sont ADR et LDR :ADR charge dans le registre Rd ladresse correspondant ltiquette etiquetteSyntaxe : ADR {} , Exemple : ADR R2, myData.myData .int 53 (.int ou DCD)

98

Instructions diverses

LDR (LoaD Register)Il ne faut pas confondre cette pseudo-instruction avec linstruction ARM ponyme. Elle sera remplace la compilation par une instruction ARM. Elle a pour objectif de charger dans un registre une valeur impossible charger par un MOV ou un MVN, ou pour charger dans un registre une adresse dune tiquette.Syntaxe : LDR {}, [ / ]Remarque : si le LDR est utilis pour charger une valeur acceptable pour un MOV ou un MVN, cest linstruction correspondante qui est utilise en remplacement du LDR. Dans le cas contraire, la valeur est range en mmoire et la pseudo instruction LDR est remplace par une instruction LDR qui chargera cette valeur depuis la mmoire. De la mme manire, si LDR est utilise pour charger ladresse dune tiquette, cette adresse sera range en mmoire et la pseudo instruction LDR sera remplace par une instruction LDR chargeant cette valeur dans le registre destinataire.Les valeurs ranges en mmoire sont considres comme des constantes, et elles sont places dans une zone mmoire appele le pool des constantes. Ce pool ne doit pas tre loign de plus de 4 Ko de tout appel LDR. Dans le cas contraire, une erreur de compilation sera signale.99

Instructions diverses

Directives de compilationLes directives de compilation indiquent au compilateur comment traiter efficacement le code assembleurALIGN : cette directive impose au compilateur daligner ce qui suit sur une frontire de motDCB (.byte) : permet dallouer un ou plusieurs octets en mmoire et de dfinir leur valeur initialDCW(.hword) : permet dallouer un ou plusieurs demi-mots de 16 bits en mmoire et de dfinir leur valeur initialDCD (.int) : permet dallouer un ou plusieurs mots de 32 bits en mmoire et de dfinir leur valeur initialEQU (.equ) : la directive EQU (.equ) permet dassocier une expression un symboleSyntaxe ARM : EQU _ .fill : permet deffectuer une rservation mmoire avec initialisation ventuelleSyntaxe : {} .fill {, {,