Cours 8 Architectures & Systèmes- introduction à l ARM

Documents pareils
DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Rappels d architecture

CM2 L architecture MIPS32

Jeu d instructions NIOS II

Microprocesseur + Logiciel

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

ASR1 TD7 : Un microprocesseur RISC 16 bits

Présentation du cours

Fonctionnement et performance des processeurs

Architecture des ordinateurs

Exécution des instructions machine

Compilation (INF 564)

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Programmation assembleur : aperçu

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Cours Informatique 1. Monsieur SADOUNI Salheddine

Programmation C. Apprendre à développer des programmes simples dans le langage C

Systèmes et traitement parallèles

Architecture des ordinateurs

Licence Sciences et Technologies Examen janvier 2010

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Architecture des ordinateurs Introduction à l informatique

Codage d information. Codage d information : -Définition-

TD Architecture des ordinateurs. Jean-Luc Dekeyser

Conception de circuits numériques et architecture des ordinateurs

Structure d un programme

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Informatique Générale

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

UE Programmation Impérative Licence 2ème Année

ANALYSE DE TEMPS D EXÉCUTION POUR DES APPLICATIONS TEMPS-RÉEL CHRISTINE ROCHANGE. Plan. Niveau de criticité. Système temps-réel

IV- Comment fonctionne un ordinateur?

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Partie 1. Professeur : Haouati Abdelali. CPGE Lycée Omar Ibn Lkhattab - Meknès haouaticpge@gmail.com

Structure fonctionnelle d un SGBD

Organigramme / Algorigramme Dossier élève 1 SI

La mémoire. Un ordinateur. L'octet. Le bit

Architecture Matérielle et Logicielle (LIF6) Cahier d'exercices, automne 2014

Architecture matérielle des systèmes informatiques

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Cours 1 : La compilation

Cours d Algorithmique et de Langage C v 3.0


4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Représentation des Nombres

TIC. Tout d abord. Objectifs. L information et l ordinateur. TC IUT Montpellier

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

en version SAN ou NAS

Administration des ressources informatiques

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

vbladecenter S! tout-en-un en version SAN ou NAS

Initiation à LabView : Les exemples d applications :

Informatique Industrielle Année Architecture des ordinateurs Note de cours T.Dumartin

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Architecture des ordinateurs

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Introduction à l algorithmique et à la programmation M1102 CM n 3

Limitations of the Playstation 3 for High Performance Cluster Computing

Logiciel REFERENCE pré-requis informatiques et techniques :

Architecture des Ordinateurs Première partie. Licence d Informatique - IUP Miage - FIIFO

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Introduction à l architecture des ordinateurs. Adrien Lebre Décembre 2007

Définitions. Numéro à préciser. (Durée : )

Prise en main. Prise en main - 0

Partie 7 : Gestion de la mémoire

Structure de base d un ordinateur

Documentation d information technique spécifique Education. PGI Open Line PRO

Windows 2000: W2K: Architecture. Introduction. W2K: amélioration du noyau. Gamme windows W2K pro: configuration.

V- Manipulations de nombres en binaire

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

PIC : COURS ASSEMBLEUR

Comme chaque ligne de cache a 1024 bits. Le nombre de lignes de cache contenu dans chaque ensemble est:

Introduction à l Informatique licence 1 ère année Notes de Cours

Bases de programmation. Cours 5. Structurer les données

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

SIP. Plan. Introduction Architecture SIP Messages SIP Exemples d établissement de session Enregistrement

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Leçon 1 : Les principaux composants d un ordinateur

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

Matériel & Logiciels (Hardware & Software)

Date Titre de la présentation COMMENT VÉRIFIER LES PERFORMANCES RESSENTIES PAR L UTILISATEUR D UNE APPLICATION MOBILE JANV 2015

//////////////////////////////////////////////////////////////////// Administration bases de données

Parallélisme et Répartition

Implémentation Matérielle des Services d un RTOS sur Circuit Reconfigurable

Electron S.R.L. SERIE B46 - SYSTEMES DIDACTIQUES DE TELEPHONIE

Cours 3 : L'ordinateur

Avira System Speedup Informations de parution

Architecture des Ordinateurs. Partie II:

Ladibug TM 2.0 Logiciel de présentation visuel d'image Manuel de l utilisateur - Français

Génération de code binaire pour application multimedia : une approche au vol

Saisie et indexation de données intelligentes

Conventions d écriture et outils de mise au point

Transcription:

Cours 8 Architectures & Systèmes- introduction à l ARM Jalil Boukhobza LC 206 boukhobza@univ-brest.fr 02 98 01 69 73 09/03/2015 Jalil Boukhobza 1

Plan du cours 1. Introduction 2. Versions et implémentations 3. Caractéristiques 4. Jeu d instruction 5. Cycles d exécution 6. Techniques de programmation 09/03/2015 Jalil Boukhobza 2

Ventes de l ARM http://chipdesignmag.com/sld/schirrmeister/2012/04/24/processor-architecture-enablement-betting-on-the-right-processor/ 09/03/2015 Jalil Boukhobza

Introduction ARM (Advanced Risc Machines): à l origine Acorn Computer, société anglaise Concepteur d ordinateur, 1 er succès: ordinateur familial BBC en 1982 (6502 proc 8 bits équipant le Apple II, 32KO de RAM et cassettes ) 1983: début de travail sur la première version de l ARM: l ARM1 (S. Furber, R. Wilson, et R. Heaton. Objectif: proc 32bits RISC Instruction de longueur fixe Modèle Load/Store: opérations d accès à la mémoire, sinon instructions de calcul sur registres Vu le jour en 1985 dans les VLSI Tech (25000 transistors). 09/03/2015 Jalil Boukhobza 4

Introduction, historique ARM2: Multiplication et multiplication/addition (traitement de signal) Interface co processeur pour le calcul flottant Archimède, ARM2 à 8MHz ARM: fondée en 1990: Apple, VLSI Technology, Acorn Computer: Définir un nouveau standard de processeur à faible consommation et à faible coût Premier développement: l ARM6 (cœur version 3) Adressage 32 bits, co processeur flottant, contrôleur vidéo. Archimède, 1987 09/03/2015 Jalil Boukhobza 5

Introduction -3- Quelques caractéristiques: Taille d instructions fixe (32 bits) Un banc de registres à usage général (32 bits) Décodage des instructions câblé Une exécution pipelinée (nombre d étages dépend des versions) Objectif d exécution de 1 (CPI=1) ARM fourni les cœurs de processeur, les industriels peuvent y adjoindre des modules supplémentaires pour: Support d instructions de multiplication longues (64 bits de résultat) Instructions spécifique au traitement de signal Modules de débogage pour tracer l exécution pas à pas 09/03/2015 Jalil Boukhobza 6

ARM Cortex A8 (ARM7) 09/03/2015 Jalil Boukhobza 7

Versions et implémentation Version 1: ARM1 pas vraiment commercialisée (quelques centaines d exemplaires) Version 2: ARM2 27 registres (16 accessibles simultanément) 4 modes de fonctionnement (mode utilisateur avec certaines ressources non disponibles, mode interruption pour gérer les interruptions externes, mode interruption rapide avec plus de ressources dédiées, mode superviseur pour l exécution du système d exploitation) Pipeline d exécution à trois étage (lecture, décodage exécution) 8MHz, 4 à 5 MIPS Version 2aS: ARM250 et ARM3 Ajout d un cache unifié (données et instructions) de 4KO Ajout d une instruction d échange de données monolithique et atomique entre un registre et la mémoire (environnement multiproc) Version mise en œuvre dans l ARM3 (26 à 33MHz) et ARM250 (12MHz) 09/03/2015 Jalil Boukhobza 8

Versions et implémentation -2- Version 3: ARM6, et ARM7 Véritable adressage 32bits Ensemble de registres pour le maintient de l état du processeur ARM6: plusieurs variantes (co processeur, gestionnaire de la mémoire, cache modifié, etc.), 26-33 MHz, ARM7 fonctionnellement identique à l ARM6 mais avec des fréquences plus élevées, cache énergétiquement plus performant, meilleure gestion de la mémoire (TLB), 40MHz et plus Version 4: ARM8, ARM9 et StrongARM Certaines version optionnelles dans la v3 sont intégrées dans la v4: multiplication étendue, etc. Pipeline 5 étages: Lecture instruction décodage, exécution, mémoire et écriture registre. ARM8: ARM7 + unité d exécution spéculative, politique d écriture retardée pour le cache, mult 64 bits, 80MIPS à 80MHz StrongARM: cache Harvard: données et instructions séparé, 100-200MHz ARM9: ARM8 + cache Harvard 09/03/2015 Jalil Boukhobza 9

Versions et implémentation -3- Version 5: ARM10, XScale V4 + instructions supplémentaires, unités d exécution multiples, pipeline à 6 étages ARM10: 2*32KO de cache, gestionnaire de mémoire compatible avec les OS embarqués, 4000MIPS, 350 MHz Intel Xscale: gestion de plusieurs périphériques, jusqu à 624MHz Version 6: ARM11 Amélioration multimédia, extension SIMD (Single Instruction Multiple Data stream), support multiprocesseurs, pipeline 8 étages, unité de prédiction de branchement.. http://en.wikipedia.org/wiki/list_of_arm_microprocessor_cores 09/03/2015 Jalil Boukhobza 10

ARM7TDMI (ARM v3) 09/03/2015 Jalil Boukhobza 11

Architecture du processeur ARM7 Source: J. Jorda, «Processeurs ARM, Architecture et Langage d assemblage», Dunod, 2010 09/03/2015 Jalil Boukhobza 12

Quelques caractéristiques Données manipulées: Word: (long du 68K) 32bits Halfword (Word du 68K) 16bits Byte: octet Pas de contrainte sur le fait d être Big ou little endian (les 2 sont possibles, ex. ARM7TDMI) Communication avec les périphériques via un mécanisme de mapping mémoire 09/03/2015 Jalil Boukhobza 13

Le banc de registres 31 registres généraux 32 bits (bancs de registres) 6 registres d état Seul 16 registres généraux et 2 d état sont visibles à un instant donné: masquage en fonction du mode de fonctionnement 2 catégories de registres généraux: R0 à R7: jamais masqués, utilisé par n importe quelle instruction, visible par n importe quel mode. R8 à R14: versions particulières possibles en fonction du mode de fonctionnement R14: contient l @ de l instruction exécutée à la suite de l appel à une fonction (A7 dans le 68k) avec BL (Branch & link) R15: compteur de programme 09/03/2015 Jalil Boukhobza 14

09/03/2015 Jalil Boukhobza 15

Registres d états Current Program Status Register (CPSR): registre d état accessible dans tous les modes, à l inverse du Saved Program Status Register (SPSR) accessible seulement dans le mode d exception (mode privilégié). N Z C V Q I F T M4 M3 M2 M1 M0 Bits de contrôle: Code de condition Réservé Bits de contrôle Modifié lorsqu une exception se produit ou explicitement via un prog. (mode privilégié) I & F: désactiver les interruptions, T: passer au jeu d instruction Thumb (plutôt qu ARM), M: détermine le mode de fonctionnement 09/03/2015 Jalil Boukhobza 16

Jeu d instructions standard ARM7 Instructions de contrôle: branchements Instructions de traitement de données (arithmétiques et logiques) Instructions de manipulation de registres Autres instructions (divers) 09/03/2015 Jalil Boukhobza 17

Exécution conditionnelle (presque) Toutes les instructions peuvent s exécuter en fonction d une condition particulière. Chaque instruction possède 4 bits (28-31) pour décrire cette condition 16 valeurs possibles Ex: ADDEQ r5,r5,r6 ; r5=r5+r6 si Z Positionner le registre de code de condition avec l instruction CMP (pas la seule à le positionner) (presque) Toutes les instructions permettent de modifier le CPSR, à condition de les faire suivre d un «S»: MOVS R0, #4 Source: J. Jorda, «Processeurs ARM, Architecture et Langage d assemblage», Dunod, 2010 09/03/2015 Jalil Boukhobza 18

Instructions de branchement Branchement court: @ actuelle +/- 32MO modif du PC (regitre R15) Branchement long: n importe quelle @ (4GO) Chargement de la mémoire dans PC (R15) Possibilité de sauvegarde de la valeur de PC (avant saut) dans le LR (Link register - R14) pour implémenter un appel de fonction (pile) Branchement simple: B(branch) B<cond> <@ cible> (BEQ ATTENTE) Appel de fonction/sous programme BL<cond> <@ cible> Retour possible avec MOV PC, R14 (notez le sens inverse par rapport au 68K: destination, source) 09/03/2015 Jalil Boukhobza 19

Instructions de traitement de données 2 opérandes dont une en registre (au moins) 11 Modes d adressage (3 catégories) Immédiat: #<valeur immédiate> Par registre: <Rm> registre à utiliser Par registre avec décalage: utilisation de la valeur d un registre décalée Les assignations: MOV MVN (move not) MOV{<cond>}{S} <Rd>, <shifter_operand>: cond: condition du move, S: modif du CPSR, Rd: registre destination, <shifter_operand>: 2 nd opérande 09/03/2015 Jalil Boukhobza 20

Instruction de traitement -2- Instructions d addition(add)/soustraction(sub): ADD, ADC (avec retenue), SUB, RSB (inverser l ordre des opérandes), SBC (avec retenue), RSC (SBC et RSB) ADD{<cond>}{S} <Rd>, <Rn>, <shifter_operand> SUB{<cond>}{S} <Rd>, <Rn>, <shifter_operand> Instruction logiques: AND, OR, EOR, BIC (Bit Clear) AND{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ORR{<cond>}{S} <Rd>, <Rn>, <shifter_operand> EOR{<cond>}{S} <Rd>, <Rn>, <shifter_operand> BIC{<cond>}{S} <Rd>, <Rn>, <shifter_operand> Et logique avec négation préalable du 2 ème opérande 09/03/2015 Jalil Boukhobza 21

Instruction de traitement -3- Instruction de comparaison: CMP, CMN (compare negative), TST (Test), TEQ (Test Equivalence) CMP (CMN) mise à jour du CPSR par soustraction (addition) TST (TEQ) mise à jour du CPSR par un ET(XOR) logique CMN{<cond>} <Rn>, <shifter_operand> CMP{<cond>} <Rn>, <shifter_operand> TEQ{<cond>} <Rn>, <shifter_operand> TST{<cond>} <Rn>, <shifter_operand> Instructions de multiplication: multiplications normales (32bits) et longues (64 bits) MUL: multiplication classique, MUL{<cond>}{S} <Rd>, <Rm>, <Rs> MLA (Multiply & accumulate): MLA{<cond>}{S} <Rd>, <Rm>, <Rs>, <Rn> (Rn valeur à additionner au résultat) UMULL (Unsigned MUL Long) UMULL{<cond>}{S} <RdLo>, <RdHi>, <Rm>, <Rs> (2 registres résultats: poids fort et poids faible) UMLAL, SMULL, SMLAL 09/03/2015 Jalil Boukhobza 22

Instructions de chargement/rangement Modes d adressage des instruction à accès mémoire Adressage avec déplacement simple Contenu d un registre comme @ Déplacement sur 12 bits [<Rn>, #+/-<offset_12>], [<Rn>, #+/-<Rm>], [<Rn>, #+/-<Rm>, {LSL LSR ASR ROR RRX} #<shift_imm>] Adressage avec déplacement pré-indexé @ avec déplacement simple + sauvegarde de l @ visée dans le registre: R0=0x2100, [R0, #0x24]! Accéder à @ 0x2124 et stockage dans R0. Adressage avec déplacement post-indexé Crochet fermant juste après le registre: [R0], #0x24 accès à l @ 0x2100 et puis stockage de 0x2124 dans R0 Instruction de chargement/rangement simples: LDR et STR STR{<cond>}{B} <Rd>, <adressing_mode> (ATTENTION ordre opérandes, destination est la mémoire, dernier opérande) LDR{<cond>}{B} <Rd>, <adressing_mode> ({B} transfert à lieu sur un octet) 09/03/2015 Jalil Boukhobza 23

Instructions de chargement/rangement -2- Instructions de chargement/rangement de demi-mot et de chargement signées Manipuler des demi-mots et des octets LDRH (Load half word): LDR{<cond>}H <Rd>, <addresssing_mode_special> (pas d accès par registre décalé, remplissage du reste du registre par des 0) STRH (même syntaxe) LDRSB (Load register Signed Byte): LDR{<cond>}SB <Rd>, <addressing_mode_special> (complétion par le bit de signe) LDRSH (Load register Signed Halfword) Les instructions de chargement/rangement par bloc: LDM (Load Multiple) et STM (Store Multiple) Modif de l @ de base: 4 modes IA (Increment After), IB (Increment Before), DA (Decrement After), DB (Decrement Before) LDM{<cond>}<addressing_mode> <Rn>{!}, <registers> (registres dans des accolades séparés par des virgules) STM {<cond>}<addressing_mode> <Rn>{!}, <registers> (ATTENTION ordre des opérandes) 09/03/2015 Jalil Boukhobza 24

Instructions diverses Pseudo instructions ADR (load address) et LDR (Load register) Traduites par l assembleur en instructions ARM7 (LEA du 68k) ADR{<cond>} <Rd>, <etiquette> LDR{<cond>} <Rd>, =[<valeur> <etiquette>] Les directives de compilation.int: allocation d un ou plusieurs mots de 32bits et initialisation (.byte et.word) {<label>}.int <expression>{,<expression>} TAB.int 1, 2, 3, 4.fill: effectuer une reservation mémoire avec initialisation eventuelle {<label>}.fill <repeat>{, <size>{, <value>}} Test.fill 10, 1, 0 (remplir 1 éléments d 1 octet de zéros).equ: associer une expression à un symbole {<label}.equ <expression> 09/03/2015 Jalil Boukhobza 25

Codage des instructions Instructions sur 32 bits, le format général est le suivant: http://aelmahmoudy.users.sourceforge.net/electronix/arm/chapter2.htm 09/03/2015 Jalil Boukhobza 26

Exemple de programme LDR R1, [R0] @récupération du premier mot LDR R3, [R2] @ récupération du second mot ADD R5, R3, R1 @addition des valeurs STR R5, [R4] @ rangement du résultat Le code hexa: E5901000 E5923000 E0835001 E5845000 Pour l instruction de chargement: I=0 (donc @age immédiat, P=1 donc pas de post index, W=0 pas de mise à jour du reg. de base. U=1: offset ajouté à la base (peu importe dep.=0), B=0accès par mot et non par octet, L=1 donc un load. 09/03/2015 Jalil Boukhobza 27 http://aelmahmoudy.users.sourceforge.net/electronix/arm/chapter2.htm

Cycles d exécution LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] États initiaux des registres: R0=0x3000 R2=0x3004 R4=0x300C Programme mis en mémoire à l @ 0x2000 1- chargement de la première instruction incrémentation du PC 09/03/2015 Jalil Boukhobza 28

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 2- Le premier LDR passe en décodage et chargement de la 2 ème instruction incrémentation du PC 09/03/2015 Jalil Boukhobza 29

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 3- Le premier LDR passe en contrôle (1 er cycle d exécution: calcul de l @) Le deuxième LDR passe en décodage chargement de la 3 ème instruction incrémentation du PC 09/03/2015 Jalil Boukhobza 30

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 4- Le premier LDR reste en contrôle (2 ème cycle d exécution: accès à la mémoire) L étage de contrôle n étant pas libéré, pas d évolution pour les 2 autres instructions 09/03/2015 Jalil Boukhobza 31

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 5- Le premier LDR reste en contrôle (3 ème cycle d exécution: écriture de la données dans le registre destination) L étage de contrôle n étant pas libéré, pas d évolution pour les 2 autres instructions 09/03/2015 Jalil Boukhobza 32

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 6- Le deuxième LDR passe en contrôle (1 er cycle d exécution: calcul @ mémoire) l instruction ADD passe à l étage décodage l instruction STR est chargée en mémoire 09/03/2015 Jalil Boukhobza 33

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 7- Le deuxième LDR reste en contrôle (2 ème cycle d exécution: accès à la mémoire) L étage de contrôle n étant pas libéré, pas d évolution pour les 2 autres instructions 09/03/2015 Jalil Boukhobza 34

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 8- Le deuxième LDR reste en contrôle (3 ème cycle d exécution: écriture de la données dans le registre destination) L étage de contrôle n étant pas libéré, pas d évolution pour les 2 autres instructions 09/03/2015 Jalil Boukhobza 35

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 9- L instruction ADD accède à l étage de contrôle, R3 et R1 vers UAL, résultat dans R5 STR passe dans l étage décodage Nouvelles instruction chargée dans la mémoire 09/03/2015 Jalil Boukhobza 36

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 10- STR passe à l étage contrôle (1 er cycle d exécution: calcul de l @ d écriture du résultat, R4+0) suite du pipeline 09/03/2015 Jalil Boukhobza 37

LDR LDR ADD STR R1, [R0] R3, [R2] R5, R3, R1 R5, [R4] 11- STR reste à l étage contrôle (2 ème cycle d exécution: écriture en mémoire à l @ calculée) suite du pipeline 09/03/2015 Jalil Boukhobza 38

Techniques et programmation assembleur La condition: Si R0>R1 Donne: ALORS: FINSI: Sinon: FINSI: Instruction 1 Instruction 2... FinSi CMP R0, R1 @R0-R1 BGT ALORS BFINSI CMP BLE R0, R1 FINSI Les boucles: TantQue R0>R1 Instruction 1 Instruction 2... FinTantQue Exemple: TANTQUE: CMP R0, R1 @R0-R1 BGT BOUCLE B FINTQ BOUCLE: B TANTQUE FINTQ: Sinon: TANTQUE: CMP R0, R1 @R0-R1 BLE FINTQ B TANTQUE FINTQ: 09/03/2015 Jalil Boukhobza 39

Mémoire et tableaux i=0; s=0; Tantque i<n s=s+tab[i] i++; FinTanque Si on a des mots ou demi mots N.equ @val de N TAB.byte @N valeurs Programme: ADR R0, TAB @ @ de tab dans R0 MOV R1, #0 @ i=0 MOV R2, #0 @ s=0 TQ: CMP R1, #N @ i-n BCS FinTQ @i>=n LDRB R3, [R0, R1] @ R3=*(tab+i) ADD R2, R2, R3 @ R2=R3+R2 ADD R1, R1, #1 @i++ B TQ @ boucle au début FinTQ: N.equ @val de N TAB.int @N valeurs Programme: ADR R0, TAB @ @ de tab dans R0 MOV R1, #0 @ i=0 MOV R2, #0 @ s=0 TQ: CMP R1, #N*4 @ i-n BCS FinTQ @i>=n LDR R3, [R0, R1] @ R3=*(tab+i) ADD R2, R2, R3 @ R2=R3+R2 ADD R1, R1, #4 @i++ B TQ @ boucle au début FinTQ: 09/03/2015 Jalil Boukhobza 40

Mémoire et tableaux -2- i=0; s=0; Tantque i<n s=s+tab[i] i++; FinTanque N.equ @val de N TAB.int @N valeurs Programme: ADR R0, TAB @ @ de tab dans R0 MOV R1, #0 @ i=0 MOV R2, #0 @ s=0 MOV R4, #0 @ index du tableau TQ: CMP R1, #N @ i-n BCS FinTQ @i>=n LDR R3, [R0, R4] @ R3=*(tab+i) ADD R2, R2, R3 @ R2=R3+R2 ADD R1, R1, #1 @i++ ADD R4, R4, #4 @ index=index+4 B TQ @ boucle au début FinTQ: N.equ @val de N TAB.int @N valeurs Programme: ADR R0, TAB @ @ de tab dans R0 MOV R1, #0 @ i=0 MOV R2, #0 @ s=0 TQ: CMP R1, #N @ i-n BCS FinTQ @i>=n LDR R3, [R0, R1, LSL #2] @ R3=*(tab+(i<<2)) ADD R2, R2, R3 @ R2=R3+R2 ADD R1, R1, #1 @i++ B TQ @ boucle au début FinTQ: 09/03/2015 Jalil Boukhobza 41

Pointeurs i=0; s=0; a=tab; Tantque i<n s=s+(a) i++; a++ FinTanque Utilisation de pointeur sans indice i N.equ @val de N TAB.int @N valeurs Programme: ADR R0, TAB @ @ de tab dans R0 MOV R1, #0 @ i=0 MOV R2, #0 @ s=0 TQ: CMP R1, #N @ i-n BCS FinTQ @i>=n LDR R3, [R0] @ R3=*(tab+i), sinon @ LDR R3, [R0], #4 dép. imm. Post inc. ADD R2, R2, R3 @ R2=R3+R2 ADD R1, R1, #1 @i++ @ ligne suivante inutile si @ dep. Imm. Post inc ADD R0, R0, #4 @ index=index+4 B TQ @ boucle au début FinTQ: TAB.int elt1, elt2 @N valeurs FTAB Programme: ADR R0, TAB @ @ de tab dans R0 MOV R2, #0 @ s=0 TQ: CMP R0, #FTAB @ TAB-FTAB BCS FinTQ @i>=n LDR R3, [R0], #4 @ dép. imm. Post index ADD R2, R2, R3 @ R2=R3+R2 B TQ @ boucle au début FinTQ: 09/03/2015 Jalil Boukhobza 42

Gestion de la pile Taille de la pile Sommet Pile utilisée Nelle valeur Taille de la pile Pile utilisée Base Sommet Pile utilisée Base Nelle valeur Pile utilisée Num @ Base Base Pile «full ascending» Pile «full descending» Taille de la pile Sommet Pile utilisée Sommet Nelle valeur Taille de la pile Pile utilisée Base Sommet Pile utilisée Base Nelle valeur Sommet Pile utilisée Base Base 09/03/2015 Jalil Boukhobza 43 Pile «empty ascending» Pile «empty descending»

Gestion de la pile -2- Pile «full ascending» Empilement: incrémentation préalable du pointeur de pile Dépilement: décrémentation du pointeur de pile après récup de la valeur Pile «full descending» (68K) Empilement: décrémentation préalable Dépilement: incrémentation après récup. Pile «empty ascending» Empilement: Incrémentation après rangement Dépilement: décrémentation préalable Pile «empty descending» Empilement: décrémentation après rangement Dépilement: incrémentation préalable 09/03/2015 Jalil Boukhobza 44

Gestion de la pile -3- Pas de registre spécifique pour l @ du sommet de la pile ou sa taille R13: registre de sommet de la pile (convention) Pas d instruction spécifique à la gestion de la pile de type PUSH et POP, utilisation des instructions de chargement et de rangement par blocs: LDM{<cond>}<addressing_mode> <Rn>{!}, <registers> (registres dans des accolades séparés par des viorgules) STM {<cond>}<addressing_mode> <Rn>{!}, <registers> 09/03/2015 Jalil Boukhobza 45

Gestion de la pile -4- Opération PUSH POP Pile «full asending» Empilement: incrémentation préalable du pointeur de pile Dépilement: décrémentation du pointeur de pile après récup de la valeur Pile «full descending» Empilement: décrémentation préalable Dépilement: incrémentation après récup. Pile «empty ascending» Empilement: Incrémentation après rangement Dépilement: décrémentation préalable Pile «empty descending» Empilement: décrémentation après rangement Dépilement: incrémentation préalable Full Ascending Full Descending Empty Ascending Empty Descending STMIB (Inc. Before) STMDB (Dec. Before) STMIA (Inc. After) STMDA (Dec. After) LDMDA (Dec. After) LDMIA (Inc. After) LDMDB (Dec. Before) LDMIB (Inc. Before) Afin de simplifier l usage des piles, 4 modes d @age ont été ajouté: FA (Full Asc.), FD (Full Des.), EA (Empty Asc.) et ED (Empty Des.) 09/03/2015 Jalil Boukhobza 46

Exemple d utilisation de la pile Permutation de contenu de registres R0 à R9: Ri <->R(9-i) i entre 0 et 4 Pile en «Full Descending» qui commence à l @ 0x20000, donc empilement avec STMFD et LDMFD @ initialisation du pointeur de pile R13 DEBUT: MOV R13, #0x20000 @ Empilement des 10 registres STMFD R13!, {R0, R1, R2, R3, R4, R5, R6, R7, R8, R9} @ récupération des valeurs LDMFD R13!, {R9} @charge R9 avec le contenue de la mémoire ) l @ donnée par R13 et mise à jour de R13 FIN: LDMFD LDMFD LDMFD LDMFD LDMFD LDMFD LDMFD LDMFD LDMFD R13!, {R8} R13!, {R7} R13!, {R6} R13!, {R5} R13!, {R4} R13!, {R3} R13!, {R2} R13!, {R1} R13!, {R0} 09/03/2015 Jalil Boukhobza 47

@ initialisation du pointeur de pile R13 DEBUT: MOV R13, #0x20000 FIN: @ Empilement des 10 registres STMFD R13!, {R0, R1, R2, R3, R4, R5, R6, R7, R8, R9} @ récupération des valeurs LDR R9, [R13], #4 @R13 =R13+4 LDR R8, [R13], #4 LDR R7, [R13], #4 LDR R6, [R13], #4 LDR R5, [R13], #4 LDR R4, [R13], #4 LDR R3, [R13], #4 LDR R2, [R13], #4 LDR R1, [R13], #4 LDR R0, [R13], #4 09/03/2015 Jalil Boukhobza 48 FIN: @ récupération des valeurs LDR R9, [R13, #0] LDR R8, [R13, #4] LDR R7, [R13, #8]