Microprocesseur + Logiciel Robot EVALBOT MOHAMED AKIL BUREAU 5253 UNITE IGI 1001 PROGRAMMATION DES MICROPROCESSEURS
Présentation [IGI1001] CONTEXTE SCIENTIFIQUE... 4 1. OBJECTIFS DE L UNITE... 6 2. OBJECTIFS PEDAGOGIQUES... 7 3. ORGANISATION DE L UNITE... 8 C/TD-1 : OPERATIONS ARITHMETIQUES BINAIRES... 10 1. INTRODUCTION... 10 2. ADDITION BINAIRE... 12 3. OPERATIONS DE BASE SUR ENTIERS NATURELS... 12 3.1. Addition de deux entiers naturels... 12 4. OPERATIONS SUR LES ENTIERS... 15 4.1. Addition en code complément à 2 (CC2)... 15 4.2. Soustraction par addition en CC2... 16 5. MULTIPLICATION OU DIVISION PAR UNE PUISSANCE DE 2... 16 5.1. Multiplication par... 16 5.2. Division par... 17 COMPLEMENTS... 18 1. OPERATIONS LOGIQUES... 18 1.1. Tables de vérité... 18 2. SOUSTRACTION BINAIRE... 18 3. OPERATION DE DECALAGE... 19 4. MULTIPLICATION BINAIRE... 19 EXERCICES SEANCE C/TD1 : OPERATIONS ARITHMETIQUES BINAIRES... 20 1. OPERATIONS SUR LES ENTIERS NATURELS... 20 2. OPERATIONS SUR LES ENTIERS... 20 RAPPELS : SYSTEME DE NUMERATION - CONVERSION... 21 1. SYSTEME DE NUMERATION DE BASE... 21 2. PRINCIPE DE CODAGE EN BASE... 22 3. PRINCIPE DE L ALGORITHME DE CODAGE D UN ENTIER POSITIF EN BASE... 23 4. CONVERSION... 23 4.1. Conversion de la base en décimal :... 23 4.2. Conversion Hexadécimal décimal et décimal Hexadécimal :... 24 4.3. Conversion Hexadécimal binaire et binaire Hexadécimal :... 24 5. LE CODE DCB (DECIMAL CODE BINAIRE OU 8421 OU BCD) :... 24 6. TABLEAU RECAPITULATIF DES DIFFERENTS CODES BINAIRES... 25 7. CODE ASCII (AMERICAN STANDARD CODE FOR INTERCHANGE OF INFORMATION) EN HEXADECIMAL... 25 COMPLEMENTS... 26 C/TD-2 : ORDINATEUR : MEMOIRE PRINCIPALE ORGANISATION ET ACCES AUX DONNEES... 28 1. ARCHITECTURE D UN ORDINATEUR... 28 1.1. Architecture interne simplifiée d un microprocesseur... 31 2. STRUCTURES DE DONNEES DE TYPE TABLEAU ET IMPLANTATION EN MEMOIRE... 32 2.1. Tableau à une dimension (1D)... 32 2.2 Tableau à deux dimensions (2D)... 33 3. MICROPROCESSEUR ARM CORTEX M3 : REGISTRES INTERNES ET ORGANISATION DE LA MEMOIRE... 35 3.1. Les registres internes... 35 3.2. Organisation mémoire Arm Cortex-M3... 37 2
Présentation [IGI1001] 3.3. ARM Cortex M3 : exemples de quelques instructions arithmétiques et logiques... 39 3.4. Exemples d instructions d accès à la mémoire : instruction load et instruction store... 43 EXERCICES SEANCE C/TD2 : ORDINATEUR : MEMOIRE PRINCIPAL ORGANISATION ET ACCES AUX DONNEES... 45 C/TD -3 : BOUCLES : ALGORITHMES ET ORGANIGRAMMES... 47 1. LES STRUCTURES ALGORITHMIQUES FONDAMENTALES... 48 1.1. Structure linéaire... 48 1.2. Structure alternative ou conditionnelle :... 49 1.3. Structure répétitive, structure itérative ou boucle... 51 2. REPRESENTATION SOUS FORMES D ORGANIGRAMMES DES STRUCTURES ALGORITHMIQUES FONDAMENTALES... 53 EXERCICES SEANCE C/TD3 : STRUCTURES DE CONTROLE BOUCLES : ALGORITHMES ET ORGANIGRAMMES... 55 C/TD -4 : STRUCTURES DE CONTROLE BOUCLES ET PROGRAMMATION... 57 EXERCICES SEANCE C/TD4 : STRUCTURES DE CONTROLE BOUCLES ET PROGRAMMATION... 60 TD 1 : MICROPROCESSEUR : REGISTRES INTERNES TRANSFERTS DE DONNEES OPERATIONS ARITHMETIQUES ET INDICATEURS... 62 PARTIE I : PRISE EN MAIN DU SIMULATEUR VISION 4... 62 PARTIE II : EXERCICES A FAIRE A L AIDE DU SIMULATEUR VISION 4... 63 TD 2 : MICROPROCESSEUR : MODES D ADRESSAGE DE LA MEMOIRE PRINCIPALE ET ACCES AUX DONNEES.. 66 TD 3 : STRUCTURES DE CONTROLES BOUCLES ET PROGRAMMATION ARM CORTEX M3... 68 SOUS ENSEMBLE DU JEU D INSTRUCTION ARM CORTEX M3... 70 1. OPERATIONS ARITHMETIQUES... 70 2. INSTRUCTIONS ARITHMÉTIQUES... 71 3. OPERATIONS LOGIQUES : ET, OU, OU EXCLUSIF, OPERATIONS DE DECALAGE... 72 4. INSTRUCTION DE COMPARAISON INSTRUCTION DE BRANCHEMENT CONDITIONNELLE... 74 5. INSTRUCTIONS LECTURE (LOAD)/ECRITURE (STORE) - MEMOIRE... 75 3
Présentation [IGI1001] Unité IGI 1001 2013/2014 : Programmation des microprocesseurs Mohamed AKIL Bureau 5253, mail : mohamed.akil@esiee.fr Département Informatique et Télécommunications Contexte scientifique L unité IGI 1001 est votre première unité d Informatique. L informatique est la science du traitement automatique de l information. L informatique traite de deux aspects complémentaires : le logiciel, qui décrit le traitement à réaliser le matériel (machine informatique), qui réalise ce traitement Cette unité porte sur la programmation des microprocesseurs, composants utilisés pour traiter les données selon une séquence d instructions appelée programme (logiciel). Nous couvrirons dans cette unité aussi bien l aspect logiciel de base que l aspect matériel de l informatique, c'est-à-dire l architecture de base d un ordinateur (ou d un système à base de microprocesseurs). Cette architecture de base comprend : le microprocesseur, la mémoire principale, et les Entrées/Sorties. Les données à traiter et le programme sont contenus dans la mémoire principale. Les Entrées/Sorties sont des dispositifs permettant de communiquer avec le monde extérieur (écran, clavier, etc.) 4
Présentation [IGI1001] Un programme, dans le cadre de cette unité, est une suite d instructions écrite à l aide d un langage de programmation (langage informatique). Le langage utilisé dans cette unité est le langage assembleur, il permet d atteindre cet objectif qu est de couvrir l aspect logiciel de base, l aspect matériel, et d expliquer/décrire le fonctionnement des éléments physiques importants d un ordinateur : le microprocesseur, la mémoire principale et les entrées/sorties. Le langage assembleur s écrit différemment selon le microprocesseur utilisé. Le microprocesseur utilisé dans cette unité est le microprocesseur ARM (Advanced RISC Machines) Cortex M3. Dans l unité IGI 1001, le programme source (qui n est rien de plus que du texte) est écrit en langage assembleur à partir du jeu d instructions du microprocesseur utilisé, ce programme doit être traduit par un logiciel appelé assembleur pour obtenir le code en langage machine (codé en binaire) de ce programme. C est ce code en langage machine qu exécute le microprocesseur. Algorithme : un algorithme est une suite ordonnée d instructions qui indique la démarche à suivre pour résoudre un problème. La programmation a pour rôle de traduire l algorithme dans un langage informatique afin que l ordinateur puisse exécuter automatiquement la séquence d instruction. Important : le point de départ en programmation est l algorithmique. C est ainsi, que dans cette unité, les solutions des problèmes à résoudre (exercices des séances C/TD, TD et TP) seront d abord décrites sous la forme d algorithmes et d organigrammes (un organigramme est une représentation graphique d un algorithme). L algorithme est par la suite écrit à l aide du langage assembleur pour obtenir le programme source, dit «code source». Ce code source est traduit en code machine à exécuter par le microprocesseur. 5
Présentation [IGI1001] 1. Objectifs de l unité L objectif principal de cette unité est d assimiler et utiliser les notions fondamentales nécessaires à la programmation des microprocesseurs. Ces notions portent successivement sur : Comment un microprocesseur effectue les opérations arithmétiques dans les ensembles (entiers naturels) et (entiers). Comment interprète-t-on les résultats obtenus en fonction des indicateurs positionnés par le microprocesseur : Z (éro), C (arry = Retenue), N (égatif = nombres avec un signe), V (overflow). Comment est organisée la mémoire principale, c'est-à-dire comment les données sont rangées dans la mémoire principale (RAM : Random Access Memory) et comment le microprocesseur y accède (pour lire et/ou modifier ces données). Différents modes d adressage sont utilisés par le microprocesseur pour accéder aux données en mémoire principale. Les structures algorithmiques fondamentales : structure linéaire, structure de contrôle et boucles, ainsi que les instructions pour les écrire sous la forme d algorithmes et sous la forme de programmes. La programmation des échanges de données entre le microprocesseur et les dispositifs d entrée/sortie. Comme dispositifs d E/S disponibles sur le kit EVALBOT, on peut citer : Bouton Poussoir, LED (diode électroluminescente : DEL, Light-Emitting Diode : LED), des moteurs. 6
Présentation [IGI1001] 2. Objectifs pédagogiques Les séances Apprentissage Par Exercices APE (notés C/TD), ces séances remplacent les cours en amphithéâtre, elles sont axées sur un apprentissage par exercices. Ces séances se font en petit groupe (environ 24 élèves par classe). Les objectifs pédagogiques de cette nouvelle organisation visent : à vous rendre actif et à favoriser les interactions o avec l enseignant o entre les étudiants à favoriser : o votre travail personnel et notamment en préparant la séance en se basant entre sur les supports distribués o et votre participation à l aide des exercices à faire par groupe lors de la séance à vous aider à développer des méthodes de travail «efficaces» : autonomie, apprendre à apprendre, travail collaboratif, Les supports (polycopiés) distribués, les sujets abordés, la planification et l organisation de l unité contribueront à atteindre ces objectifs. Ainsi, les supports traitant des sujets abordés seront distribués avant les séances concernées afin de vous permettre de préparer la séance. Un travail personnel et/ou par groupe, vous est demandé, il vous permettra de décrire les notions traitées dans les supports, de les expliquer et les utiliser. Cette préparation sert aussi à identifier les questions à poser en séance, pour que les réponses y soient apportées. En se basant sur les supports distribués, ces séances seront consacrées à la résolution de problèmes en interaction avec l enseignant et le groupe. IGI 1001 2013-2014 Semaine 38 39 40 41 42 43 45 46 47 48 49 50 51 2 3 Heure S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16 C/TD 8 2 2 2 2 TD 10 2 2 2 2 2 TP 12 3 3 3 3 contrôles continus 1 1 contrôle Final en salle de TP : programme à mettre en œuvre avec le simulateur VISION 4 sur PC : durée 2 heures 2 7
Présentation [IGI1001] 3. Organisation de l unité Séances méthodologiques Apprentissage par exercices (APE) - travail personnel et en groupe C/TD1 C/TD2 C/TD3 C/TD4 Opérations arithmétiques dans les ensembles N et Z et indicateurs Z, C, V, N Organisation de la mémoire principale et accès aux données Structures de contrôles et boucles : algorithmes et organigrammes Structures de contrôles/ boucles et programmation ARM TD en salle machine - utilisation du simulateur VISION 4 sur PC TD1 TD2 TD3 TD4 ARM Cortex M3 : registres de données internes, calculs arithmétiques et indicateurs Z, C, V, N ARM Cortex M3 : organisation mémoire - modes d'adressage et accès aux données ARM Cortex M3 : structures de contrôles/ boucles et programmation ARM CORTEX M3 : Programmation des entrées -sorties TD en salle TD5 PROJET Travaux pratiques sur les Kits StellarisRobotic Evaluation Board TP1 TP2 TP3 TP4 E/S E/S Projet Projet 8
Opérations arithmétiques binaires [C/TD1] C/TD 1 Unité IGI 1001 Programmation des microprocesseurs Opérations Arithmétiques binaires 9
Opérations arithmétiques binaires [C/TD1] C/TD-1 : Opérations arithmétiques binaires Préparation de la séance : lire le support page 10 à page 19. Les notions/définitions sont accompagnées par des exemples et des exercices à faire. 1. Identifier les notions/définitions importantes, être capable de les expliquer. 2. Refaire les exemples illustrant ces notions. 3. les appliquer en faisant les exercices notés exercice à faire. Un bref rappel sur le système de numération binaire et la conversion (changement de base est donnée : page 21 à page 26. Pré-requis de la séance : cette séance s appuie sur les notions de base et fondamentales portant sur la représentation des nombres dans les ordinateurs, dont le codage des entiers naturels et des entiers. Le codage est traité dans l unité IGE-1001 (Noury Ludovic). 1. Introduction Les opérations considérées sont les opérations binaires : addition, soustraction, division, multiplication, comparaison. Les valeurs des opérandes, c'est-à-dire les données calculées par ces opérations et le résultat produit appartiennent à l ensemble des valeurs représentables ci-dessous en fonction de la représentation adoptée. Entiers naturels : les valeurs représentables des nombres entiers naturels codés en binaire sur n bits (Binary digit) sont : Nombres positifs Représentation sur n bits en base 2 0 0 0.. 0 0 1 0 0.. 0 1 2 0 0.. 1 0 1 0.. 0 0 1 1 1 1 Exemple : soit un nombre entier naturel codé sur 8 bits ou un octet (n = 8 bits) : Nombres positifs Représentation sur 8 bits en base 2 0 = valeur min 0000 0000 1 0000 0001 2 0000 0010 soit 2 8-1 =2 7 = 128 1000 0000 soit 2 8-1=255= valeur max 1111 1111 10
Opérations arithmétiques binaires [C/TD1] Entiers : par convention pour un nombre codé sur n bits, le bit de rang n-1 est appelé bit de signe, c est le bit de poids fort. Les valeurs représentables des entiers sur n bits sont : Valeur Représentation binaire sur bits Valeur minimale 1 0 0 0 0-1 1 1 1 1 1 0 0 0 0 0 0 Valeur maximale 0 1 1. 1 1 Ainsi sur n bits, on peut représenter des entiers à Exemple : pour n = 8 bits, ces valeurs sont : 2,...,2 n 1 n 1 1. Valeur Représentation binaire sur bits Valeur minimale soit (2 8-1 )=-2 7 = -128 1000 0000-1 1111 1111 0 0000 0000 Valeur maximale soit 2 8-1 -1 =2 7-1= 127 0111 1111 Le complément à 2 (noté C2) : n, Si = 1 permet de trouver la valeur absolue du nombre entier codé sur n bits. C1 est le complément à 1. Exemple : soit un nombre entier A codé sur 4 bits = 1001 ce nombre est négatif, le bit de poids fort = 1, c est le bit de signe. Le C2 permet de trouver sa valeur absolue : C2(1001) = C1 (1001) +1 = 0110 +1 = 0111, ce qui signifie que, donc A = -7. Remarque : dans les microprocesseurs, la taille n est fixe et peut être égale à : 8, 16, 32, 64, 128 bits. 11
2. Addition Binaire Opérations arithmétiques binaires [C/TD1] Les règles de l addition binaire sont données ci-dessous : x y s r 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 est la somme et représente la retenue. La somme est égale à : Avec : AND : ET logique, OR : OU logique XOR : OU exclusif La retenue que l on note simplement (2). On réalise ainsi un demi-additionneur avec 2 entrées et 2 sorties. L addition binaire est commutative et associative. En étendant cette opération à trois bits x, y et z, on obtient un additionneur complet, avec 3 entrées : et 2 sorties :. (1) 3. Opérations de base sur entiers naturels 3.1. Addition de deux entiers naturels Soit à additionner 2 nombres et codés sur bits et représentés respectivement par les suites : ; avec : bit de poids faible et : bit de poids fort et ; avec : bit de poids faible et : bit de poids fort La somme de peut être supérieure à la valeur maximale représentable sur bits, c'est-à-dire à et n est donc pas nécessairement représentable sur n bits. 12
Opérations arithmétiques binaires [C/TD1] La partie représentable de la somme est, est représentée en convention standard par la suite Rappelons que dans le cas d un nombre entier, le bit est le bit de poids fort, il représente le bit de signe par convention. Dans la représentation en complément à 2, un nombre négatif est codé par le complément à 2 de sa valeur absolue. Les sont obtenus à partir des, en appliquant l opération d addition binaire bit à bit de droite à gauche en reportant (on dit aussi en propageant) les retenues éventuelles. La retenue prise en compte au rang, est engendrée au rang pour, la retenue initiale. Un rang est aussi appelé un étage. La dernière retenue codée sur un bit, elle est engendrée au rang : Cette retenue est appelé report, en anglais Carry et noté C. sur D après la définition de la retenue, on a : Si la dernière retenue, la somme est représentable sur. Si la dernière retenue, la somme n est représentable sur bits on dit qu il y a débordement, en anglais overflow. Le nombre représenté par la suite est égale à : et non. (2) Remarque importante : Dans les microprocesseurs la valeur du report est donnée par le bit C appelé indicateur de Carry (ou Flag en anglais), il est en général mémorisée dans un registre interne du microprocesseur, appelé registre d état. Rappel : Un registre est formé par un ensemble de bascules. Pour mémoriser une information numérique codé en binaire sur n bits, il faut un registre comprenant n bascules. Le débordement dans l addition des entiers naturels est indiqué par l indicateur C = 1. On a un dépassement de capacité sur les entiers naturels. 13
Opérations arithmétiques binaires [C/TD1] Exemple : Addition binaire sur 8 bits r = report 1 0 0 0 1 1 1 0 a 1 1 0 0 0 1 0 1 b 1 1 1 0 0 0 1 1 a+b 1 0 1 0 1 0 0 0 Principe de l addition en base 2 : on additionne les bits colonne par colonne en commençant par le bit de poids faible (bit de rang 0). Le résultat de l addition précédente est capacité sur les entiers naturels. et C=1 dépassement de Exercice à faire : faire l opération 0000 0001 + 1111 1111, donner le résultat en binaire et sur 8 bits et l état de l indicateur C. Exemple : l opération 1100 0101 + 1110 0011, effectuée en Hexadécimale sur 8 bits (cette représentation permet de condenser l écriture en binaire) donne le résultat ci-dessous : Ainsi : r 0 a 0xC5 b 0xE3 a+b 0xA8 5 + 3 = 8 C + E = 12 + 14 = 26 = 16 + 10 ce que donne A en hexadécimal et la retenue C = 1. Le résultat et C=1 dépassement de capacité sur les entiers naturels. Vérification : En base 10, le nombre entier naturel a = 197, (c est à dire a = et b = 227, la somme. Cette valeur n est pas représentable sur 8 bits, car la valeur maximum représentable sur 8 bits est 255. Le résultat de l addition binaire que nous avons obtenu est 10101000 soit. Comme C, pour obtenir le résultat correct on procède comme suit : soit. La somme obtenue en hexadécimale est 0xA8, soit le résultat. Exercice à faire : Si on effectue la somme l état de C? Justifiez votre réponse. comme C=1, avec a et b codés sur 16 bits. Quel est 14
Opérations arithmétiques binaires [C/TD1] 4. Opérations sur les entiers 4.1. Addition en code complément à 2 (CC2) Soit 2 nombres représentés en code complément à 2, on a la relation suivante : (3) La relation (3) montre que si alors l addition de et est correctement représentée par l addition standard. L indicateur V (overflow) indique si le résultat de la somme de 2 entiers sur n bits est représentable sur n bits. Le tableau ci-dessous donne les différents cas possibles de l addition de 2 nombres entiers en CC2 sur n bits et l état de l indicateur V (dépassement de capacité, overflow). V = 1 si le résultat de la somme de a et b ne peut pas être représenté en sur n bits : : est le report de l addition des bits de rang : est le dernier report, il représente le report de l addition des bits de rang : est le bit de poids de poids fort de la somme, c est le bit de signe de la somme. de Si le résultat de l addition est : s est représentable sur n bits s est non représentable sur n bits s est toujours représentable sur n bits s est non représentable sur n bits s est présentable sur n bits Remarque importante : le débordement dans le cas de l addition standard est signalé par positionnement de l indicateur C(arry) à 1., ce qui engendre le Le débordement dans le cas de l addition en CC2 est indiqué par l indicateur V=1 (overflow). 15
Exemple : r = report 0 0 0 0 1 1 1 0 1 0 0 0 1 1 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 a 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 0 0 0 0 0 1 0 1 b 1 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 a+b 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 V=C=1 V=1 et C=0 V=0 et C=1 V=C=0 débordement débordement correct correct r n =1 ; r n-1 =0 r n =0 ; r n-1 =1 r n =1 ; r n-1 =1 r n =0 ; r n-1 =0 Cet exemple vérifie que si représentable en CC2 sur 8 bits. alors il n y a pas de débordement et la somme est Remarque : C=1 n implique pas que V soit égal à 1. Exercice à faire : illustrer les cas précédents par des exemples d opérations en binaire sur 16 bits. 4.2. Soustraction par addition en CC2 On peut calculer la soustraction de en effectuant l opération. Les résultats de sont obtenus modulo en effectuant l addition. 5. Multiplication ou division par une puissance de 2 5.1. Multiplication par La multiplication d un entier codé sur par la suite de bits par ( est obtenue par un décalage de cette suite de bits de positions vers la gauche. Les bits de plus faible poids sont remplacés par des Si le résultat n est représentable, un débordement est généré. Exemple : soit l opération 10*4 = 40. Cette opération réalisée sur 8 bits donne : 10 = 0000 1010 0000 1010 décalé à gauche de 2 postions donne : 0010 1000 soit 2 3 + 2 5 = 8 + 32 = 40. Exercice à faire : à quoi correspond l opération 16*3.
5.2. Division par Opérations arithmétiques binaires [C/TD1] La division d un entier codé sur par la suite de bits par ( est obtenu par un décalage de cette suite de bits de positions vers la droite. Le bit de signe est recopié dans les bits de poids le fort. Ce type de décalage est dit arithmétique, dans le décalage dit logique, les poids fort sont remplies de 0. de Exemple : soit à réaliser l opération 20 = 16 +4 = 0001 0100 et 0001 0100 décalé à droite d une position donne 0000 1010 soit 10. Exercice à faire : à quoi correspond l opération 17
Compléments [C/TD1] Compléments 1. Opérations logiques 1.1. Tables de vérité a b ET OU OU Exclusif 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 a b NON ET NON OU NON Exclusif 0 0 1 1 1 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 Le complément appelé NON ou NOT : si alors et si alors Le ET appelé AND : Le OU inclusif appelé OU ou OR : et le NON ET appelé NAND. et le NON OU appelé NOR. Le OU Exclusif appelé XOR et le NON OU Exclusif appelé XNOR. 2. Soustraction binaire Les règles de la soustraction sur les bits sont données ci-dessous : x y s_ = x - y r_ 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 On a : et, est appelé «emprunt» (borrow) Exemple : 30 18 = 12 soit en binaire : 0001 1110 0001 0010 = 0000 1100 = 18
Compléments [C/TD1] 3. opération de décalage Décalage logique à gauche de k positions : Exemple : décalage logique à gauche avec k = 1 : 00000110 00001100 Cette opération revient à faire une multiplication par 2 (cas où k=1) Décalage logique à droite de k positions : Exemple : décalage logique à droite avec k = 1 : 00011110 00001111 Cette opération revient à faire une division par 2 (cas où k=1) 4. Multiplication binaire Les règles de la multiplication sur les bits sont données ci-dessous : x y 0 0 0 0 1 0 1 0 0 1 1 1 Soit le nombre défini par la suite binaire : 00011100 (ce nombre est égal à 28), le décalage à gauche d une position de cette représentation binaire donne : 00111000 soit 56. Ce qui correspond à une multiplication par 2. Soit le nombre défini par la suite binaire : 00011100, le décalage à droite d une position donne : 00001110 soit 14. Ce qui correspond à une division par 2. Exemple : soit l opération 39 x 6 = 234, multiplication de 2 entiers naturels : 1 0 0 1 1 1 39 x 1 1 0 6 + 1 0 0 1 1 1. + 1 0 0 1 1 1.. = 1 1 1 0 1 0 1 0 234 19
Exercices [C/TD1] Exercices séance C/TD1 : Opérations arithmétiques binaires 1. Opérations sur les entiers naturels 1.1 Coder en binaire sur 8 bits les entiers naturels des opérations d addition ci-dessous et faire leurs additions sur 8 bits : 28 +30 ; 255 +1 1.2 Coder en hexadécimal sur 8 bits les opérations d addition ci-dessous et faire leurs additions sur 8 bits : 254 + 1 ; 128 + 128, 133 + 163 1. 3 Pour chacune de ces opérations, on donnera : Le résultat sur 8 bits L état de l indicateur C positionné à 1, sa signification et l interprétation du résultat de l opération. 2. Opérations sur les entiers 2.1 Donner en CC2 8 bits les nombres 61 et -61 et faire leur somme sur 8 bits. 2.2 Effectuer en CC2 sur 8 bits les opérations suivantes : 1+(-2) ; 51 +127 ; (-3) + (-127) ; (-127) + 127 ; (-63) + ( 63). Pour chaque opération on donnera le résultat sur 8 bits et l état des indicateurs C et V, la signification de chacun d eux et on expliquera comment on les utilise pour interpréter le résultat de l opération. 2.3. Coder sur 16 bits en CC2 l opération (-127) + 127. Donner son résultat sur 16 bits et les états des différents indicateurs C et V. Que peut-on conclure? 3. Opérations sur les entiers codés sur 32 bits Effectuer en hexadécimal en CC2 sur 32 bits les opérations suivantes : (-1) + (-2) ; (-3) + (-127) ; (-127) + (127) ; (-63) + (-63), ainsi que l addition du plus grand nombre entier non signé plus 1. Pour chaque opération on donnera le résultat sur 32 bits et l état des indicateurs C et V, la signification de chacun d eux et on expliquera comment on les utilise pour interpréter le résultat de l opération 4. Opérations de multiplication/décalage 3.1 Effectuer l opération : 3.2 Effectuer pour les nombres 0x01F1 et 0xFF85 les opérations suivantes : Un décalage à gauche de 2 positions Un décalage arithmétique à droite de 2 positions Un décalage logique à droite de 2 positions Donner pour chacune de ces opérations la valeur du résultat. 20
Système de numération - conversion [Rappels] Rappels : système de numération - conversion Introduction : Pour être traitées, les informations sont temporairement mémorisées dans un emplacement de la mémoire principale. Cet emplacement est aussi appelé case mémoire. Elles peuvent être rangées temporairement dans les registres internes du microprocesseur. Si l information est représentée sur bits, par convention du rang de droite à gauche, on peut avoir valeurs distinctes de l information. On peut donc représenter une donnée de différents types par exemples : un nombre entier, un nombre fractionnaire, une chaîne de caractères. 1. Système de numération de base Tout entier naturel peut être représenté par une suite de chiffres de la base :... b où les sont les chiffres de la base. Ce nombre en notation étendue (ou positionnelle) a pour valeur : avec et. est la valeur attachée à la position du chiffre. Généralement, tout nombre est représenté dans le système de numération par une suite de chiffres qui peut comprendre une virgule relative au système de base, les valeurs de position des chiffres situés à droite de la virgule sont des puissances négatives de la base. Exemples : - système de numération décimal : les chiffres à Le nombre décimal 245 est ainsi égal à. - système de numération hexadécimal : les chiffres à (1) Le nombre est ainsi égal à. Ce nombre est aussi noté 0xF5 ou, pour indiquer qu il est exprimé en hexadécimal. - système de numération binaire : les chiffres binaires (bit = binary digit), Le nombre est égal à. On le note : 0 1 0 1. 21
Système de numération - conversion [Rappels] Le tableau ci-dessous représente le code binaire pur ou naturel sur 4 bits et sa correspondance en hexadécimal et décimal : Chiffres HEX. Valeurs décimales Équivalence en binaire 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 A 10 1010 B 11 1011 C 12 1100 D 13 1101 E 14 1110 F 15 1111 Le nombre décimal 11,25 s écrit :. Ce nombre comporte deux parties : la partie entière = 11 et la partie fractionnaire = 25. Le nombre binaire Remarque : plus la base nombre. est faible plus il faut de chiffres pour représenter un même 2. Principe de codage en base Il repose sur le principe de la division entière : pour convertir le nombre en base : (2) (3) Le code de a dans la base b est donc b 22
Système de numération - conversion [Rappels] Exemple : soit à convertir le nombre a = 15 10 dans la base b = 2. 3. Principe de l algorithme de codage d un entier positif en base Données en entrées : l entier à coder et la base de numération Tant que le quotient n est pas nul faire Diviser successivement le nombre par la base Fin Tant que Résultat : la représentation du nombre dans la base est donnée par l ordre inverse des restes des différentes divisions : du premier au dernier restes écrits de gauche à droite. 4. Conversion 4.1. Conversion de la base en décimal : Exemple : binaire décimal :. Le nombre binaire est représenté comme la somme de produits entre chaque chiffre binaire et sa valeur de position. 23
Système de numération - conversion [Rappels] 4.2. Conversion Hexadécimal décimal et décimal Hexadécimal : Exemples : Hexadécimal décimale : ( ) 16 ou ( ) H = Décimal Hexadécimal : Donc 175 = ( ) 16 ou ( ) H soit 0xAF 4.3. Conversion Hexadécimal binaire et binaire Hexadécimal : Exemples : Hexadécimal binaire : ( ) 16 ou ( ) H donc 0xAF = 1010 1111 Binaire Hexadécimale : 1000 1001 = (89) 16 ou (89) H soit 0x89 5. Le code DCB (Décimal Codé Binaire ou 8421 ou BCD) : Chiffre décimaux Code DCB 8 4 2 1 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 Le tableau ci-dessus représente le code DCB à 4 bits (c est une restriction du code binaire pur aux chiffres décimaux de 0 à 9), les bits sont affectés de la gauche vers la droite des poids 8 ( ), 4 ( ), 2 ( ) et 1 ( ). La représentation BCD du nombre décimal 145 est 0001 0100 0101, chaque chiffre nécessite au moins 4 bits. Ce codage est appelé code DCB 8-4-2-1 pondéré (dit code pondéré) : il consiste à affecter des poids aux bits. Il est utilisé dans les systèmes d affichage des chiffres décimaux (calculatrice). Remarque : un nombre décimal peut être codé directement (représentation binaire directe, appelé aussi code binaire pur ou naturel) en utilisant l algorithme de codage en base b. Ce codage est utilisé pour effectuer des opérations mathématiques ( ). Le code binaire pur présente l inconvénient que plusieurs bits changent lors du passage d une combinaison à une autre ; il existe une autre représentation appelée code Gray ou binaire réfléchi. Dans le code Gray, seul un bit change d état lors du passage d une combinaison à une autre. Ce code n est pas pondéré et donc pas adapté pour le calcul numérique. Ce code est utilisé pour la visualisation d informations ou pour la conversion de grandeurs analogiques. 24
Système de numération - conversion [Rappels] 6. Tableau récapitulatif des différents codes binaires Binaire naturel Hexadécimal Décimal Gray ou binaire réfléchi BCD 0000 0 0 0000 0000 0001 1 1 0001 0001 0010 2 2 0011 0010 0011 3 3 0010 0011 0100 4 4 0110 0100 0101 5 5 0111 0101 0110 6 6 0101 0110 0111 7 7 0100 0111 1000 8 8 1100 1000 1001 9 9 1101 1001 1010 A 10 1111 0001 0000 1011 B 11 1110 0001 0001 1100 C 12 1010 0001 0010 1101 D 13 1011 0001 0011 1110 E 14 1001 0001 0100 1111 F 15 1000 0001 0101 7. Code ASCII (American Standard Code for Interchange of Information) en hexadécimal Ce code permet de représenter sur 7 bits l'ensemble des caractères alphanumériques, des symboles et des commandes de transmission, le code du caractère est 41 H soit 0x41, le code de CR (Carriage Return retour à la ligne) est 0D H soit 0x0D et le code de LF (Line Feed - saut de ligne) est 0A H soit 0x0A. Code 0 1 2 3 4 5 6 7 8 9 A B C D E F 0x00 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT NP CR SO SI 0x10 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 0x20 SP! " # $ % & ' ( ) * +, -. / 0x30 0 1 2 3 4 5 6 7 8 9 : ; < = >? 0x40 @ A B C D E F G H I J K L M N O 0x50 P Q R S T U V W X Y Z [ \ ] ^ _ 0x60 ` a b C D E F G h I J K L m n O 0x70 p q R S T U V W x Y Z { } ~ DEL L «UNIversal CODE» UNICODE code les caractères sur 16 bits, il est destiné à remplacer les tables ASCII ou ANSI. 25
Compléments [Rappels] Compléments 1. Ordinateur : machine informatique capable d exécuter un programme. La structure d un ordinateur modèle de Von Neumann comprend le processeur (microprocesseur), la mémoire principale et les organes d entrées/sorties (écran, clavier, disque dur). 2. Mémoire : dans un ordinateur, il existe plusieurs types de mémoires : par exemple la mémoire principale, qui est externe au processeur. Cette mémoire stocke (mémorise) entre autres les informations utilisées par le processeur lors de l exécution d un programme. On peut écrire une valeur dans une case mémoire et on peut lire le contenu d une case mémoire. Chaque case mémoire contenant une information codée sur 8 bit (un octet) est identifiée par un numéro appelé adresse (adresse de la case mémoire). 3. Registre : les registres se trouvent à l intérieur du processeur, leur nombre est limité. D accès rapide, ils permettent la mémorisation temporaire d informations. On peut lire et écrire dans des registres. Les ordinateurs PC sont équipés de différents types de processeurs, par exemple le processeur AMD Athlon II X2 équipant les PC (2 cores, fréquence de fonctionnement 2,9 Ghz, mémoires caches internes, des registres internes de 64 bits). II existe aussi d autres types de microprocesseurs, par exemples : 8 bits, 16 bits, 32 bits 4. Représentation de données : Type de donnée Architecture 32 bits 64 bits Char 8 bits 8 bits Short 16 bits 16 bits Int 32 bits 32 bits Long 32 bits 64 bits long long 64 bits 64 bits pointeur (adresse) 32 bits 64 bits 5. Algorithme : ensemble de règles opératoires dont l application permet de résoudre un problème (par exemple : trier un ensemble de nombres entiers naturels du plus petit au plus grand) en un nombre fini d opérations (par exemples : addition, multiplication, comparaison). Une fois l algorithme défini, on écrit son programme. L ordinateur exécute le code correspondant à ce programme (code exécutable). 6. Programme : c est la réalisation ou l implémentation d un algorithme au moyen d un langage informatique donné sur un ordinateur (machine informatique) donné. 26
Architecture d un ordinateur [C/TD2] C/TD 2 Unité IGI 1001 Programmation des microprocesseurs Ordinateur : Mémoire principale organisation et accès aux données 27
Architecture d un ordinateur [C/TD2] C/TD-2 : Ordinateur : Mémoire principale organisation et accès aux données Préparation de la séance : lire le support (page 28 à page 44). Les notions/définitions sont accompagnées par des exemples et des exercices à faire. 1. Identifier les notions/définitions importantes, être capable de les expliquer. 2. Refaire les exemples illustrant ces notions. 3. et les appliquer en faisant les exercices. 1. Architecture d un ordinateur On peut décrire l architecture d un ordinateur, c'est-à-dire son organisation, en se basant sur le modèle de von Neumann. John Von NEUMANN (1903 1957), mathématicien américain d origine hongroise, a donné son nom à l architecture utilisée dans la plupart les ordinateurs. Ce modèle est composé de 3 composants : le processeur, la mémoire principale et les entrées/sorties. 28
Architecture d un ordinateur [C/TD2] L architecture d un ordinateur basée sur ce modèle comprend : le microprocesseur : c est l unité de traitement de l information : exécution des instructions et des traitements (opérations de calculs) des données. Il comprend 2 parties : 1. l Unité Arithmétique et Logique (U.A.L) ou unité de traitement. Cette unité effectue les opérations de base : opérations arithmétiques (addition, soustraction, multiplication, division) et opérations logiques (ET, OU). 2. L unité de contrôle qui séquence les opérations. la mémoire principale : c est l unité de stockage temporaire des informations nécessaires à l exécution d un programme : instructions (code du programme) et données. les entrées/sorties : unités d E/S, elles permettent la communication entre {l ensemble processeur mémoire} et les unités périphériques (disque dur, caméra, clavier). Ces communications se font à travers des bus : ce sont des supports physiques de transfert d informations. 29
Architecture d un ordinateur [C/TD2] Le bus microprocesseur - mémoire est composé de 3 bus : le bus de données : bus bidirectionnel pour l échange d informations entre le microprocesseur ( et la mémoire le bus d adresse : bus unidirectionnel pour adresser la mémoire, il indique la case mémoire à laquelle le microprocesseur veut accéder (accès soit en lecture soit en écriture) le bus de contrôle : il comprend différents signaux de contrôle dont le signal de lecture/écriture appelé R/ pour Read/Write. Si R/ = 0 le microprocesseur demande une écriture, sinon une lecture. La taille en bits de ces bus est de : pour le bus d adresse, pour le bus de données et pour le bus de contrôle. dépendent du type de microprocesseur utilisé. L espace mémoire adressable est fixé par et il est égal à, les adresses sont comprises dans l intervalle. 30
Architecture d un ordinateur [C/TD2] Exemple : si, le bus d adresse comprend 16 lignes (16 fils) notées :, est le bit de poids faible. La taille en octets de l espace adressable est (1 kilo = 1024 = ). octets soit 64 kilo octets, c'est-à-dire Adresse sur 16 bits en Hexadécimal 0000H Cases mémoire 1 er élément...... 1000H.. FFFFH.. Dernier élément Remarque important : une adresse identifie l emplacement en mémoire d un élément codé sur 8 bits (soit un octet). 1.1. Architecture interne simplifiée d un microprocesseur L architecture interne simplifiée d un microprocesseur comprend une unité de contrôle (appelée UC), une unité de calcul (appelée unité arithmétique et logique notée U.A.L) et des registres internes. 31
Architecture d un ordinateur [C/TD2] L unité de contrôle analyse le code de l instruction à exécuter et séquence dans le temps les actions internes élémentaires permettant la réalisation de l instruction, c'est-à-dire la production du résultat. Sous le nom de partie opérative on trouve les registres internes et l UAL. Cette partie réalise les actions élémentaires nécessaires à l exécution de l opération. L UAL réalise les opérations arithmétiques et les opérations logiques. Les registres internes stockent temporairement les opérandes, c'est-à-dire les données en entrée des opérations et les résultats intermédiaires des calculs. 2. Structures de données de type tableau et implantation en mémoire Les données traitées par le microprocesseur sont stockées temporairement en mémoire principale. Ces données sont organisées aussi bien au niveau algorithme que programme sous la forme de structures : elles sont déclarées avec leurs types. Un type constitue une description de la représentation interne des données en machine. Une structure de données est l implémentation explicite d un ensemble organisé de données avec les opérations d accès, de construction et de modification associées. Dans ce qui suit, on s intéresse uniquement au type élémentaire tableau. 2.1. Tableau à une dimension (1D) Un tableau à une dimension est une liste contiguë d éléments de même type. Chaque élément est localisé par son indice ou son adresse. Exemple : on peut illustrer un tableau de taille de la façon suivante : 0 1 i n-1 Ce tableau est implémenté sous la forme de principale. emplacements consécutifs en mémoire La zone mémoire attribuée à un tableau est définie par : L adresse de début d implantation du tableau La taille des éléments stockés : un élément peut être de taille 8/16/32/64 bits Le nombre d éléments stockés Exemple : Une chaîne de caractères «bonjour» peut être implantée sous la forme d un tableau de caractères. Si ce tableau commence à l adresse 0x1000 (adresse en hexadécimal de début d implantation en mémoire de ce tableau), la taille de ce tableau est, la chaîne contient 7 caractères. 32
Architecture d un ordinateur [C/TD2] Chaque élément du tableau représente un caractère codé en ASCII et prend un emplacement en mémoire. Chaque élément du tableau, c'est-à-dire chaque code ASCII d un caractère de la chaîne est stocké sous la forme d un octet. Adresse sur 16 bits codée en Hexadécimal 0000H..... 1000H Cases mémoire 1er élément de T = Code ASCII de b = 0x62........ 1006H Dernier élément de T = code ASCII de r = 0x72. 2.2 Tableau à deux dimensions (2D) Un tableau 2D est implanté de façon contiguë en mémoire, ligne par ligne ou colonne par colonne. L exemple ci-dessus illustre un tableau de taille, étant le nombre de lignes et le nombre de colonnes. E 11 -- -- -- -- E 1n E m1 E mn L implantation ligne/ligne de ce tableau est représentée ci-dessous : E 11 -- -- E 1n E 21 -- E 2n -- -- -- -- -- E m1 -- -- E mn Ligne 1 ligne 2 ligne m Un exemple de tableau 2D est l implantation en mémoire d une image en niveau de gris de taille pixels. Un pixel définit un point de l image et est représenté par la valeur de son intensité lumineuse appelé niveau de gris. 33
Architecture d un ordinateur [C/TD2] Dans ce cas, un pixel, est un nombre, est codé sur 8 bits, il est compris entre 0 et 255, soit 256 valeurs possibles. Ainsi, on peut considérer une image comme une matrice appelée aussi un tableau 2D. Chaque point de l image est représentation par sa valeur codée sur 8 bits. Cette valeur représente le niveau de gris du pixel considéré. Un niveau de gris correspond à la luminosité du pixel. 0 correspond au noir et la valeur 255 (soit 0xFF) correspond au blanc. 34
Architecture d un ordinateur [C/TD2] 3. microprocesseur ARM Cortex M3 : registres internes et organisation de la mémoire Le Cortex M3 est construit autour d une architecture de type «load store» (chargement/rangement). Il utilise des données de 32 bits et dispose d un bus d adresse de 32 bits. Au cours du fonctionnement, les données en mémoire principale sont d abord chargées dans les registres internes du microprocesseur, lequel effectue les opérations sur ces registres et, par la suite, range le résultat en mémoire. 3.1. Les registres internes Le microprocesseur cortex M3 dispose de 17 registres (R0 à R15, et PSR), la taille de chaque registre est de 32 bits : 13 registres à usage général : R0 à R12. R0 à R7 sont dits «low registers» et R8 à R12 «high registers», ces derniers possèdent des restrictions d emploi par rapport à certaines instructions. Ces registres ne sont accessibles que par paquet de 32 bits. Un compteur ordinal ou Program counter : R15 qui contient l adresse en mémoire de la prochaine instruction à exécuter. Le bit 0 de ce registre est toujours à 0 (adresse paire). Comme les instructions sont codées sur 16 bits (cas : Thumb) ou 32 bits (Thumb2), elles occupent au moins 2 adresses consécutives. Un registre d état (Program Status register) : xpsr avec x pouvant être A=Application, I=Interrupt ou E=Execution. 35
Architecture d un ordinateur [C/TD2] Important : Les bits 28 à 31 de ce registre contiennent les indicateurs/drapeaux (Condition Code Flags) : N bit 31 bit de poids fort de APSR Recopie le bit de poids fort du résultat, si N = 1 alors le résultat <0 Z bit 30 de APSR Z = 1 si le résultat = 0 C bit 29 de APSR Si C = 1 il y a un débordement de la représentation non signée : entiers naturels V bit 28 de APSR Si V = 1 il y a un débordement de la représentation signée : entiers Exemples : Opération d addition et positionnement des différents indicateurs. FFFF FFFFh 8000 0000h 7FFF FFFFh + 1 + 8000 0000h + 1 = 0000 0000 = 0000 0000 = 8000 0000h C = 1 et Z = 1 C = Z = V = 1 N = V = 1 A ces registres, on ajoute 2 registres spéciaux : R13 (registre pointeur de pile), R14 (Link register). Le registre R15 est aussi considéré comme un registre spécial. 36
Architecture d un ordinateur [C/TD2] 3.2. Organisation mémoire Arm Cortex-M3 L espace mémoire du Cortex-M3 est de 4Go, soit 2 32 adresses consécutives (bus d adresse de 32 bits). Une adresse mémoire correspond à un octet. Tous les accès à la mémoire se font via des instructions Load ou Store. 37
Architecture d un ordinateur [C/TD2] Le rangement des données en mémoire se fait selon la norme little endian. L exemple cidessous (mémoire vue comme une suite d octets) illustre cette norme : rangement du mot 0xDDCCBBAA à l adresse 0x00001000 et du demi-mot 0x5566 est rangé à l adresse 0x00000000 : Adresse sur 32 bits codée en Hexadécimal Cases mémoire 0xFFFFFFFF.... 0x00001003 0x00001002 0x00001001 0x00001000 0XDD 0xCC 0xBB 0xAA.. 0x00000001 0x0000 0000 0x55 0x66 Exemple : mot de 32 bits (4 octets) rangé à l adresse 0x0001000 : 0xDD 0xCC 0xBB 0xAA 0x00001000 Exemple : organisation par mots de 16 bits (2 octets) à l adresse 0x00001000 0xBB 0xAA 0x00001000 38
Architecture d un ordinateur [C/TD2] 3.3. ARM Cortex M3 : exemples de quelques instructions arithmétiques et logiques Soit la syntaxe suivante : Code opération opérande 1, opérande 2, {opérande 3} Code opération = opération à effectuer Opérande 1 = destination, contient le résultat de l opération Exemple : Cas d un opérande immédiat : MOVS R6,#0x55 #0x55 est une constante (valeur immédiate), on a R6 0x0000 0055 Le suffixe S indique le positionnement des indicateurs (flags), dans cette exemple l instruction MOVS ne positionne aucun indicateur à 1 donc on aura : N = Z = C = V = 0. Remarque : l opérande immédiat 0x55 fait partie du code de l instruction. Comme le code d une instruction peur être soit codé sur 16 ou 32 bits, la valeur de l opérande immédiat (constante) est limitée par la taille du code de l instruction. Les opérandes 2 et 3 sont les opérandes source. 3.3.1 Instruction d addition : ADD ADD{S}<c> {R d,}<r n >,#<const> R d R n + const {S} : est un suffixe optionnel, s il est spécifié alors les indicateurs seront positionnés à 1 selon le résultat de l opération sur 32 bits. <c> : est un suffixe optionnel, si la condition spécifiée est vraie, l instruction sera exécutée. R d R n : est le registre destination, il contient le résultat de l opération : est le registre contenant l opérande source #<const> : est une constante 39
Architecture d un ordinateur [C/TD2] Exemple : ADD R1,#5 R1 R1 + 5 Exercice à faire : Donner la séquence d instruction pour réaliser les opérations suivantes R1 R1+1 Si R1 = 0 alors faire R6 R5 + R6 On supposera que l état initial de R1 = 0xFFFFFFFF Rappel : si R1 = 0 l indicateur Z = 1. Le suffixe <c> dans le cas de cette condition s écrit EQ (pour Equal). ADD{S}<c> {R d,}<r n >,<R m >{,<shift>} R d R n + shift(r m ) <R m > : contient la valeur à décaler <shift> : opérateur optionnel indique le décalage de bits du registre R m Exemple : ADD R1,R2,R2, LSL #2 R1 R2 +4*R2 : les bits du registre R2 sont décalés à gauche de 2 positions (Logical Shift Left), ce qui revient à multiplier le registre R2 par 4. Exercice à faire : soit l opération y x 6x 7x, on suppose que x=3 est contenu dans le registre R5, le résultat y est rangé dans R6. Donner l instruction qui réalise cette opération. 3.3.2 Instruction logique ET : AND AND{S}<c> {R d,}<r n >,#<const> R d R n ET const AND{S}<c> {R d,}<r n >,<R m >{,<shift>} R d R n ET shift(r m ) Exemple : ANDS R1,R1,R2 R1 R1 ET R2 si R1 = 0xFFFFFFFF et R2 = 0 alors le résultat de cette instruction est R1 = 0x00000000 et l indicateur Z = 1. Exercice à faire : Si R1 contient la valeur 0xFFFFFFFF, donner l instruction qui permet d obtenir le résultat suivant : R1 = 0XFFFFFFF0 40
3.3.3. Instructions de décalage/rotation Architecture d un ordinateur [C/TD2] 3.3.3.1. LSL : décalage logique à gauche, ce décalage introduit des zéros à droite, le dernier sortant affecte l indicateur C. LSL{S}<c> {R d,}<r n >,#<imm> R d R m <<imm LSL{S}<c> {R d,}<r n >,<R m > R d R m <<R m Exercice à faire : illustrer par un exemple cette instruction et vérifier que le résultat obtenu est correct. 41
Architecture d un ordinateur [C/TD2] 3.3.3.2. LSR : décalage logique à droite, ce décalage introduit des zéros à gauche, le dernier bit sortant à droite affecte l indicateur C. LSR{S}<c> {R d,}<r m >,#<imm> R d R m >>imm LSR{S}<c> {R d,}<r n >,<R m > R d R n >>R m <R m > : contient la valeur à décaler Exercice à faire : illustrer par un exemple cette instruction et vérifier que le résultat obtenu est correct. 3.3.3.3. ASR : décalage arithmétique à droite, ce décalage réintroduit le bit de signe à gauche, le dernier bit sortant à droite affecte l indicateur C. ASR{S}<c> {R d,}<r n >,#<imm> R d R m >> imm ASR{S}<c> {R d,}<r n >,<R m > R d R n >> R m Exercice à faire : illustrer par un exemple cette instruction et vérifier que le résultat obtenu est correct. 3.3.3.4. ROR : rotation vers la droite, cette rotation réintroduit le bit 0 sur le bit 31 à chaque tour. ROR{S}<c> {R d,}<r n >,#<imm> R d rotation(r m ) de imm bits ROR{S}<c> {R d,}<r n >,<R m > R d rotation [R n ] de R m bits Exercice à faire : illustrer par un exemple l intérêt de cette instruction et vérifier que le résultat obtenu est correct. 3.3.3.5. RRX : rotation étendue vers la droite Cette instruction fonctionne selon le même principe que ROR, incluant dans la rotation l indicateur C. RRX{S}<c> {R d,}<r n >,<R m > R d rotation [R n,c] de R m bits Exercice à faire : illustrer par un exemple l intérêt de cette instruction et vérifier que le résultat obtenu est correct. 42
Architecture d un ordinateur [C/TD2] 3.4. Exemples d instructions d accès à la mémoire : instruction load et instruction store 3.4.1. Les modes d adressage : 3.4.1.1. Mémoire/registre Le tableau ci-dessous donne les principaux modes d adressage. Ainsi, l adresse de la mémoire, notée adr_mem est déterminée par : Le contenu d un registre. C est le mode d adressage indirect, noté [R n ]. Le contenu d un registre ± un constante. La valeur de la constante est appelée offset. C est le mode indirect avec déplacement, noté [R n,# offset]. La somme de deux registres. C est le mode indirect avec index, noté [R n,r m ]. R n contient l adresse de base et R m la valeur de l index. [adr_mem] Mode d adressage Calcul de l adresse de la mémoire [R n ] indirect adr_mem = R n [R n,# offset] Indirect avec déplacement adr_mem = R n offset [R n,r m ] Indirect avec index adr_mem = R n + R m Syntaxe de l instruction de chargement (Load) : chargement d un registre du microprocesseur par le contenu d une case mémoire. LDR R n,[adr_mem] R n contenu de la mémoire dont l adresse est donné par Syntaxe de l instruction de rangement (Store) : rangement d un registre du microprocesseur dans une case mémoire STR R n,[adr_mem] le contenu du registre R n dans une case mémoire d adresse adr_mem. 43
Architecture d un ordinateur [C/TD2] Exercice à faire : soit la matrice 5x5 ci-dessous : 0 0 0 0 0 0 255 254 253 0 0 252 251 250 0 0 249 248 247 0 0 0 0 0 0 Chaque élément de la matrice est codé sur 8 bits, l élément (0,0) de valeur 0 est rangé à l adresse 0x2000 0000. Cette matrice est implantée en mémoire ligne par ligne. Illustrer chacun des modes d adressage, par une séquence d instructions qui range l élément (2,2) dans le registre R5. 3.4.1.2. Registre/registre Les instructions de type MOV permettent d affecter la valeur d un registre à un autre registre. Syntaxe de l instruction MOV : MOV{S}<c> <R d >,#<const> R d const MOV{S}<c> <R d >,R m > R d R m MOVT<c> <R d > #imm R d [16 :31] imm imm est une constante Exercice à faire : 3.4.1.3. Constante/registre Les instructions de type MOV permettent d affecter une constante à un autre registre. Exercice à faire : Écrire pour chacune des opérations suivantes : R6 0x000A avec mise à jour des indicateurs et R5 R6 sans mise à jour des indicateurs. 44
Architecture d un ordinateur [Exercices] Exercices séance C/TD2 : Ordinateur : mémoire principal organisation et accès aux données 1. architecture ordinateur 1.1 On considère un ordinateur comprenant un microprocesseur dont le bus d adresse externe est de 32 bits, son bus de données est sur 32 bits. Quelle est la taille en octets de la mémoire adressable par ce microprocesseur? 1.2 On connecte à ce microprocesseur une mémoire de 64 kilo mots de 32 bits. Cette mémoire est adressable par le microprocesseur à une adresse début égale à 0x00000000. Donner l adresse du dernier mot long (mot de 32 bits) de cette mémoire. 2. structures de données de type tableau et implantation en mémoire 2.1 On considère une chaîne de caractère «bonjour, il est 8 heures». Cette chaîne peut être mémorisée en code ASCII sous la forme d un tableau à une dimension. On suppose que cette chaîne est mémorisée à l adresse 0x20000000, donner : L adresse du caractère h Quel est la taille de ce tableau Quelle l adresse de Fin + 1 de tableau 2.2 Soit une image en niveaux de gris de taille 4x4 dont les valeurs des pixels sont : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Ces pixels sont mémorisés en mémoire ligne par ligne. Le pixel (0,0) est stocké à l adresse 0x20000000. Donner l adresse : du pixel de valeur 5 du pixel de valeur 15 3. En utilisant les 3 modes d adressage donné au paragraphe 3.4.1, écrire en langage d assemblage ARM Cortex M3 les séquences suivantes : séquence 1 : lire l élément (0,3) du tableau de l exercice 2.2, lui ajouté la valeur 5 et le ranger dans le registre R3 séquence 2 : lire l élément (0,2), le multiplier par 2 (opération de décalage) et ranger le résultat dans l élément (0,0). Donner l adresse de rangement en hexadécimal séquence 3 : lire l élément (0,3), le diviser par 2 (opération de décalage) et ranger le résultat dans l élément (1,2). 45
Boucles et organigrammes [C/TD3] C/TD -3 Unité IGI 1001 Programmation des microprocesseurs Structures de contrôle Boucles : algorithmes et organigrammes 46
Boucles et organigrammes [C/TD3] C/TD -3 : Boucles : algorithmes et organigrammes Préparation de la séance : lire le support (page 47 à page 54). Les notions/définitions sont accompagnées par des exemples et des exercices à faire. 1. Identifier les notions/définitions importantes, être capable de les expliquer. 2. Refaire les exemples illustrant ces notions. 3. et les appliquer en faisant les exercices. Définitions : Algorithme : «méthode de calcul qui indique la démarche à suivre pour résoudre une série de problèmes équivalents en appliquant dans un ordre précis une suite finie de règles». Il est décrit sous la forme d une suite ordonnée d instructions laquelle définit la démarche proposée pour résoudre le problème étudié. La complexité d un algorithme est le nombre d instructions élémentaires à exécuter pour résoudre le problème. Organigramme : est une représentation graphique d un algorithme. Il met en œuvre des symboles représentant des traitements, des données, des liaisons. Il comprend un début et une fin, et permet de suivre l'ordre d'exécution des instructions de l algorithme pour résoudre le problème étudié. 1 symbole de Début, Fin 2 symbole pour le traitement (Instruction) 3 symbole Entrées/Sorties 4 symbole Décision/Aiguillage NON OUI Pour NON Pour OUI 5 symbole logique : décision/choix/aiguillage 47
Boucles et organigrammes [C/TD3] 1. Les structures algorithmiques fondamentales Les opérations élémentaires dont l application permet de résoudre un problème peuvent être organisées en utilisant les structures algorithmiques fondamentales : 1.1. Structure linéaire C est une suite d instructions exécutée dans l ordre énoncé. Exemple 1 : é : C est le titre de l algorithme Sortie : variable somme : entier : somme est le nom du résultat Affectation : le résultat de a+b+c est affecté (recopié) dans somme. Les instructions de l algorithme «somme» s exécutent les unes après les autres dans l ordre où elles on été écrites. Cet algorithme est constitué d un flux de 2 instructions Dans cet algorithme apparaît des variables, elles permettent de donner des noms (appelés identificateurs) à des données (les variables en entrée a et b, de type entier). La variable somme, de type entier sera affectée par le résultat de l addition de a,b,c. Représentation sous la forme organigramme de l algorithme somme : Lire a,b,c Somme a + b + c L exécution séquentielle ci-dessous peut être rompue par des instructions conditionnelles : appelées instructions de contrôle de flux. 48
Boucles et organigrammes [C/TD3] 1.2. Structure alternative ou conditionnelle : Si une condition est vraie, on exécute une ou plusieurs instructions. Cette structure permet aussi de traduire des choix possibles. Forme réduite Forme complète Le programme teste une condition, si la condition est satisfaite, le programme exécute «instruction 1», sinon il exécute «instruction 2». Où (condition) est une expression de type booléen comme par exemple. Elle est construite en général avec des comparateurs et les opérateurs logiques et, ou, non. Exemple 2 : Dans cette exemple, cette structure est appelée structure alternative réduite é é 49
Boucles et organigrammes [C/TD3] Dans l algorithme de l exemple 2, on distingue : le titre : identifie ce que fait l algorithme, les déclarations : les entrées, ce sont les objets manipulés dans le corps de l algorithme, le corps de l algorithme : ce sont les instructions à exécuter et les commentaires, ils facilitent la lisibilité de l algorithme. Dans les déclarations, les objets peuvent être par exemples : des constantes : la valeur d une constante ne peut être modifiée au cours de l exécution de l algorithme, des variables : leurs valeurs peuvent être modifiées au cours de l exécution de l algorithme. Les constantes et les variables sont identifiées par leur noms, appelés identificateurs et leurs types : entier, réel, booléen, chaîne de caractères. Dans cet exemple on distingue : l instruction qui manipule les données : et l instruction ) qui contrôle son exécution. Exemple 3 : dans cet exemple, la structure alternative est dite complète é Sortie : variable maximum : entier 50
Boucles et organigrammes [C/TD3] 1.3. Structure répétitive, structure itérative ou boucle Les itérations permettent d écrire des programmes qui exécutent plusieurs fois les mêmes instructions. Elles permettent de faire des récurrences ou de traiter des volumes importants de données. Les programmes itératifs sont liés à la notion mathématique de récurrence, par exemple la suite de Fibonacci est la suite de nombres définie par la récurrence suivante : Boucle - Tant que. faire Séquence d instructions1 tant que (condition) /*la condition s appelle une condition d arrêt*/ fin tant que Faire «séquence d instruction à répéter» Séquence d instructions2 /* quand la condition devient fausse, le programme exécute la séquence d instructions 2*/ Exemple 4 : calcul de la partie entière inférieure de la racine carrée d un entier donné, il permet de calculer la racine entière d un naturel. é Sortie : variable racine : entier é 51
Boucles et organigrammes [C/TD3] Remarque : la vérification de la condition est faite en début de boucle, le corps de la boucle n est exécuté que si la condition est vraie. Dans la boucle faire tant que (voir ci-dessous), la condition est vérifiée en fin de boucle. Le corps de boucle est exécuté au moins une fois. Boucle - répéter jusqu à Exemple 5 : calcul de la multiplication de 2 entiers par additions successives é Sortie : variable produit : entier é Remarque : la vérification de la condition se fait en fin de boucle. Le corps de la boucle est exécuté au moins une fois. 52
Boucle - Pour appelée aussi boucle for Boucles et organigrammes [C/TD3] Exemple 6 : calcul de la multiplication de 2 entiers positifs a et b donnés en utilisant l addition entière. é Sortie : variable produit : entier é à Fin pour Remarque : règle à respecter : il est interdit de modifier la variable de boucle dans le corps de la boucle. Cette variable est automatiquement incrémentée à chaque cycle. Le nombre d exécution de la boucle est : (valeur finale de cette variable valeur initiale) +1. 2. Représentation sous formes d organigrammes des structures algorithmiques fondamentales Début Faux Condition Instruction 1 (ou Traitement 1) Vrai Instruction 1 Instruction 2 Instruction 2 (ou Traitement 2) Structure alternative : si ---- alors ---- Fin fsi sinon ----- 53
Boucles et organigrammes [C/TD3] Condition Vrai Vrai Tant que «condition» Faire traitement Fin de tant que Faux Séquence d instructions Séquence répétitive tant que faire Séquence d Instructions Traitement Condition Faux Vrai Séquence répétitive répéter jusqu à répéter «traitement» jusqu à condition 54
Exercices [C/TD3] Exercices séance C/TD3 : Structures de contrôle Boucles : algorithmes et organigrammes Exercices à faire : 1. Décrire sous la forme d organigrammes les différents algorithmes des exemples 2 à 6 (page 49 à page 53). 2. Écrire l algorithme qui calcule la division de 2 entiers a et b par soustractions successives. 3. Écrire l algorithme qui calcule la multiplication de 2 entiers par additions successives 4. Écrire l algorithme qui calcul de la somme s 3 3 3 1 2 3... n 5. Écrire un algorithme qui calcule y = 6. Écrire l algorithme qui calcule pour un entier positif donné la valeur de (rappel : n! 1 2... n) 7. Soit 3 variables a, b et c, de type entiers naturels, écrire l algorithme qui calcule le maximum et range le résultat dans la variable appelé max. Donner l organigramme correspondant. 8. même exercice, pour le calcul du minimum, le résultat est rangé dans la variable min. 9. Calcul du maximum : écrire un algorithme qui trouve le plus grand élément d un tableau d entiers de taille et le range dans la variable max. 10. même question pour le calcul du minimum, le plus petit élément est rangé dans la variable min. 11. Calcul du maximum et du minimum d un tableau contenant n entiers : écrire un algorithme qui trouve le plus grand élément et le plus petit élément et les range respectivement dans max et min. 55
Boucles et programmation [C/TD4] C/TD 4 Unité IGI 1001 Programmation des microprocesseurs Structures de contrôle Boucles et programmation 56
Boucles et programmation [C/TD4] C/TD -4 : Structures de contrôle Boucles et programmation Préparation de la séance : lire le support page 57 à page 59. Les notions/définitions sont accompagnées par des exemples et des exercices à faire. 1. Identifier les notions/définitions importantes et être capable de les expliquer. 2. Refaire les exemples illustrant ces notions. 3. et les appliquer en faisant les exercices. Cette séance est consacrée à la programmation en langage d assemblage ARM Cortex M3 des structures de contrôle et des boucles. Elle répond à la question : comment écrire le programme correspondant à une des structures algorithmiques traitées dans la séance C/TD3. Exemple : Soit 2 variables a et b N (entiers naturels), on suppose que ces variables sont rangées temporairement dans les registres R1 et R2 (respectivement pour a et b). si a = 0 alors sinon b b+1 /* Instruction 1*/ b b+2 /*Instruction 2*/ fsi SI a = 0 l instruction 1 est exécutée. Si a 0 l instruction 2 est exécutée On doit d abord tester si a = 0. Comme a est dans R1, il faut tester si R1=0, cette condition est vérifiée si l indicateur Z = 1. Dans le tableau page 58, le suffixe correspondant à cette condition est EQ. Pour tester si R1 = 0, on peut par exemple le comparer à 0, à l aide de l instruction de comparaison : CMP R1,#0 Cette instruction consiste à faire l opération (R1 0) et à positionner les indicateurs dont l indicateur Z, si celui-ci est égal à 1 alors R1=0. 57
Boucles et programmation [C/TD4] Une instruction de branchement conditionnelle permet si la condition spécifiée est vraie d aller exécuter l instruction indiquée par l étiquette (label). CMP R1,#0 BEQ Inst1 /* aller à l étiquette Inst1 si la condition EQ est vraie*/ ADD R2,#2 B fsi /* branchement inconditionnel à l étiquette fsi*/ Inst1 ADD R2,#1 fsi Importante : Les instructions de contrôle changent la valeur de PC (le registre Program Counter contenant l adresse de l instruction à exécuter). Ainsi, lors de l exécution de l instruction BEQ inst1, le registre PC indique l instruction suivante (c'est-à-dire ADD R2,#2) que nous appelons PC courant. Si la condition est vraie, PC PC courant + Inst1, c'est-àdire PC = adresse de l instruction indiquée par l étiquette Inst1. Cette étiquette code le déplacement (saut) à effectuer de l adresse courante pour atteindre l instruction indiquée par l étiquette Inst1. Syntaxe de l instruction de branchement conditionnelle : B<c> <labelt> label (étiquette) identifie l instruction à exécuter si la condition est vraie. <c> désigne le suffixe de la condition à tester : 58
Boucles et programmation [C/TD4] Syntaxe de l instruction de comparaison : CMP<c> <R n >,#<const> test de (R d const) et positionne les indicateurs CMP<c> <R n >,<R m >{,<shift>} indicateurs test de (R n shift(r m ) et positionne les Soit à comparer deux 2 entiers a et b : CMP a,b Suffixe du code condition : <c> a et b (entiers naturels) a et b (entiers) a b EQ EQ a b LO MI a b LS LE a b HI GT a b HS GE 59
Boucles et programmation [Exercices] Exercices séance C/TD4 : Structures de contrôle Boucles et programmation Écrire pour chaque exercice ci-dessous, le programme en langage d assemblage ARM Cortex M3. Exercices à faire : 1. Exemples 2 à 6 (page 49 à page 53). 2. Calcul de la division de 2 entiers a et b par soustractions successives (a et b sont des entiers naturels sur 8 bits). 3. Calcul de la multiplication de 2 entiers b par additions successives (a et b sont des entiers naturels sur 8 bits). 4. Calcul de la somme s 3 3 3 1 2 3... n 5. Calcul de y = 6. Calcul pour un entier positif donné de la valeur de (rappel : n! 1 2... n) 7. Calcul du maximum de 3 variables a, b et c, de type entiers naturels, écrire l algorithme qui calcule le maximum et range le résultat dans la variable appelé max. 8. même exercice, pour le calcul du minimum, le résultat est rangé dans la variable min. 9. Calcul du maximum : programme trouvant le plus grand élément d un tableau d entiers de taille et le range dans la variable max. 10. même question pour le calcul du minimum, le plus petit élément est rangé dans la variable min. 11. Calcul du maximum et du minimum d un tableau contenant n entiers : programme trouvant le plus grand élément et le plus petit élément et les range respectivement dans max et min. 60
Microprocesseurs [TD1] TD1 TD 1 Unité IGI 1001 Programmation des microprocesseurs et simulateur Microprocesseur : Registres internes et transferts de données Calculs arithmétiques et indicateurs 61
Microprocesseurs [TD1] TD 1 : Microprocesseur : registres internes transferts de données opérations arithmétiques et indicateurs Les Travaux Dirigés (TD) se déroulent en salle informatique utilisation du simulateur VISION 4sur PC. Il est nécessaire d aller «au bout des choses» : identifier les erreurs, les corriger, programmer soi-même et s autoformer. Exécuter à l aide du simulateur VISION 4 chacun des programmes des exercices cidessous. L exécution instruction par instruction (pas à pas), vous permettra d observer le résultat de chaque instruction (observation des registres, des indicateurs, de la mémoire, le séquencement de votre programme, c'est-à-dire l évolution du registre R15 Program Counter) et aussi le résultat rendu par votre programme : est ce qu il correspond à ce qui est attendu? Partie I : Prise en main du simulateur VISION 4 à l aide du tutorial distribué 62
Microprocesseurs [TD1] Le programme ci-dessous, vous permettra de commencer à utiliser le simulateur VISION 4. Vous commencerez par créer un projet, recopier le programme en assembleur et l exécuter pour valider le résultat obtenu. Ce programme très simple permet de distinguer les différentes étapes du simulateur et de les utiliser. Partie II : Exercices à faire à l aide du simulateur VISION 4 Chaque exercice est à faire «à la main» avant de le tester avec le simulateur. Exercices à faire : Opérations arithmétiques et logiques 1. Donner pour chacune des opérations ci-dessous, l instruction en langage assembleur ARM Cortex M3 On traitera le cas des données codées sur 8, 16 puis 32 bits, dans les cas des opérations 1) et 2) uniquement. 1) 254 + 1 2) (-3) + (-127) 3) 0xFFFFFFFF ET 0x0000FFFF 4) 0x0000AAAA OU 0x00005555 5) 0x00000001 OU Exclusif 2. 63
Microprocesseurs [TD1] 6) Pour les nombres 0x01F1 et 0xFF85, donner l instruction en langage assembleur pour réaliser chacune des opérations suivantes : Un décalage à gauche de 2 positions Un décalage arithmétique à droite de 2 positions Un décalage logique à droite de 2 positions On supposera pour chaque instruction que les données (les opérandes sources) à traiter sont rangées dans des registres internes du processeur ARM Cortex M3 et que le résultat de l opération est aussi rangé dans un registre. 2. Donner pour chacune de ces instructions réalisant respectivement les opérations de 1) à 7), le résultat attendu, ainsi que l état des indicateurs N, Z, V et C positionnés à 1. 3. Vérifier à l aide du simulateur VISION 4 que le résultat observé correspond à celui attendu. 4. Expliquer l intérêt des opérations : 3), 4) et 5) 64
Microprocesseurs [TD2] TD - 2 Unité IGI 1001 Programmation des microprocesseurs et simulateur Microprocesseur : modes d adressage de la mémoire principale et accès aux données 65
Microprocesseurs [TD2] TD 2 : Microprocesseur : modes d adressage de la mémoire principale et accès aux données Les Travaux Dirigés (TD) se déroulent en salle informatique utilisation du simulateur VISION 4sur PC. Il est nécessaire d aller «au bout des choses» : identifier les erreurs, les corriger, programmer soi-même et s autoformer. Exécuter à l aide du simulateur VISION 4 chacun des programmes des exercices cidessous. L exécution instruction par instruction (pas à pas), vous permettra d observer le résultat de chaque instruction (observation des registres, des indicateurs, de la mémoire, le séquencement de votre programme, c'est-à-dire l évolution du registre R15 Program Counter) et aussi le résultat rendu par votre programme : est ce qu il correspond à ce qui est attendu? Exercices à faire : On suppose que le contenu de la mémoire en octet à partir de l adresse 0x20000000 est le suivant : 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0x01, 0x02,0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09. Le premier élément de cette zone se trouve à l adresse 0x20000000 et sa valeur est 0x11 1. Écrire en langage d assemblage ARM Cortex M3 les séquences suivantes (on utilisera pour chaque séquence chacun des 8 modes d adressage de l ARM Cortex M3) et exécuter pas à pas les instructions de ces séquence : séquence 1 : lire le 8 ème élément de cette zone lui ajouter la valeur 5 et le ranger dans le registre R3 séquence 2 : lire le 2 ème élément à partir de l élément de valeur 0x88, le multiplier par 2 (on utilisera une instruction de décalage) et ranger le résultat dans le 1 er élément de la zone d adresse 0x20000000. 66
Microprocesseurs [TD3] TD3 TD 3 Unité IGI 1001 Programmation des microprocesseurs et simulateur Structures de contrôle/boucles et programmation 67
TD 3 : Structures de contrôles boucles et programmation ARM Cortex M3 Microprocesseurs [TD3] Les Travaux Dirigés (TD) se déroulent en salle informatique utilisation du simulateur VISION 4sur PC. Il est nécessaire d aller «au bout des choses» : identifier les erreurs, les corriger, programmer soi-même et s autoformer. Exécuter à l aide du simulateur VISION 4 chacun des programmes des exercices cidessous. L exécution instruction par instruction (pas à pas), vous permettra d observer le résultat de chaque instruction (observation des registres, des indicateurs, de la mémoire, le séquencement de votre programme, c'est-à-dire l évolution du registre R15 Program Counter) et aussi le résultat rendu par votre programme : est ce qu il correspond à ce qui est attendu? Exercices à faire : 1. les programmes en assembleur ARM Cortex - M3 correspondants aux exemples 2 à 6 (page 49 à page 53). 2. Calcul la division de 2 entiers a et b par soustractions successives (a et b entiers naturels sur 8 bits). 3. Calcul de la multiplication de 2 entiers b par additions successives (a et b entiers naturels sur 8 bits) 4. Calcul de la somme s 3 3 3 1 2 3... n 5. Calcul de y = 6. Le calcul pour un entier positif donné de la valeur de (rappel : n! 1 2... n) 7. Calcul du maximum de 3 variables a, b et c, de type entiers naturels, le résultat est rangé dans la variable appelée max. 8. même exercice, pour le calcul du minimum, le résultat est rangé dans la variable min. 9. Calcul du maximum : programme trouvant le plus grand élément d un tableau d entiers de taille et le range dans la variable max. Le tableau contient n éléments, chaque élément est un entier naturel sur 8 bits. 10. même question pour le calcul du minimum, le plus petit élément est rangé dans la variable min. 68
Microprocesseurs [TD3] 11. Calcul du maximum et du minimum d un tableau contenant n entiers naturels codés sur 8 bits : programme trouvant le plus grand et le plus petit élément et les range respectivement dans max et min. 12. faire les exercices 8, 9, 10 et 11 dans les cas suivants : Le tableau contient n entiers, chacun étant codé sur 16 bits Le tableau contient n entiers, chacun étant codé sur 32 bits 69
Sous ensemble du jeu d instruction ARM Cortex M3 1. Opérations Arithmétiques ADD: Add values and store result to register Syntax ADD{cond}{S} Rd, Rn, Op2 Description Add Rn and Op2 and store result to Rd. Condition Flags If S is specified update flags: N, Z, C, V. Example ADDS R0,R2,R4 //Add R2 and R4 and store result to R0, update flags ADD R4,R4,#0xFF00 //Add value in 0xFF00 and R4 and store result in R4 Flexible Operand Op2 Several ARM instructions contain an Op2 field that is called flexible operand. Op2 may be one of the following: #imm8_r: 8-bit constant that may be rotated by an even number (0, 2, 4, 6,.., 30). Valid Examples: #0x12, #0xFF, #0x2FC0, #0xC000003F, Invalid Examples: #0x1FF, #0x1FE, #0x1234. Note: the Assembler uses Instruction Substitution (see below) in case that a constant cannot be represented. Rm: CPU register content of Rm. Example: R5 Rm, ASR #n: Content of Rm shifted right with sign extension by #n bits; valid range for #n: 1-32. Example: R2, ASR #4 Rm, LSL #n: Content of Rm shifted left with zero extension by #n bits; valid range for #n: 0-31. Example: R3, LSL #8 Rm, LSR #n: Content of Rm shifted right with zero extension by #n bits; valid range for #n: 1-32. Example: R3, LSR #4 Rm, ROR #n: Content of Rm rotated right by #n bits; valid range for #n: 1-31. Example: R2, ROR #6 Rm, RRX: Content of Rm rotated right with C-flag extension by one bit. Example: R2, RRX Rm, ASR Rs: Content of Rm shifted right with sign extension by the content of Rs. Example: R2, ASR R3 Rm, LSL Rs: Content of Rm shifted left with zero extension by the content of Rs. Example: R3, LSL R8 Rm, LSR Rs: Content of Rm shifted right with zero extension by the content of Rs. Example: R3, LSR R4 Rm, ROR Rs: Content of Rm rotated right by the content of Rs. Example: R2, ROR R6
Sous ensemble du jeu d instruction [Ressources] 2. Instructions arithmétiques The instruction pairs ADD and SUB, ADC and SBC, AND and BIC, MOV and MVN, CMP and CMN, are equivalent except for the inversion or negation of Op2. If an#imm8_r value in Op2 cannot be represented, the ARM Assembler inverts or negates the constant. If this constant can be represented in an#imm8_r value, a complementary instruction is automatically used. ADC: Add with Carry Syntax Description Condition Flags Example ADC{cond}{S} Rd, Rn, Op2 Add Rn and Op2 and Carry flag and store result to Rd. ADC is typical used for multi-word arithmetic. If S is specified update flags: N, Z, C, V. ADDS R0,R2,R4 // add R2 + R4, store result to R0, set flags ADC R1,R3,R5 // add R3 + R5 with carry from previous ADDS, store result to R1 SUB: Subtract registers Syntax Description SUB{cond}{S} Rd, Rn, Op2 subtracts the value of Op2 from the value in Rn. Condition Flags If S is specified update flags: N, Z, C, V. Example SUBS R8,R6,#240 //R8=R6-240 SBC: Subtract with carry Syntax Description SBC{cond}{S} Rd, Rn, Op2 synthesize multiword arithmetic. Condition Flags If S is specified update flags: N, Z, C, V. Example SUBS R0,R2,R4 SUB R4,R4,#5 71
Sous ensemble du jeu d instruction [Ressources] MUL: Multiply (32-bit by 32-bit, bottom 32-bit result) Syntax MUL{cond}{S} Rd, Rm, Rs Description multiplies the values from Rm and Rs, and places the least significant 32 bits of the result in Rd. Condition Flags If S is specified: N and Z flags according to the result. the C flag in ARM architecture v4 and earlier will be corrupted. the C flag in ARM architecture v5 and later is not affected. Example MUL R10, R2, R5 //R10:= R2*R5 3. Opérations Logiques : ET, OU, OU Exclusif, opérations de décalage AND: Logical AND operation Syntax Description Condition Flags Example AND{cond}{S} Rd, Rn, Op2 Load Rd with logical AND of Rn with Op2. Rd := Rn AND Op2 If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. AND R9,R2,#0xFF00 // Load R9 with R2 and value in 0xFF00 ORR: Logical OR operation Syntax ORR{cond}{S} Rd, Rn, Op2 Description OR operations on the values in Rn and Op2. Condition Flags If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. Example ORR R2, R0, R5 // Rd = R0 or R5 72
Sous ensemble du jeu d instruction [Ressources] EOR: Logical Exclusive OR operation Syntax Description Condition Flags Example EOR {cond}rd, Rn, Op2 performs a logical Exclusive OR operation N and Z flags are updated. The C flag may be updated by calculation of Op2. EORS R0, R0, R3, ROR R6 ASR (Thumb) Arithmetic (signed) Shift Right. The sign bit (bit position 31) is shift in on the right side. Syntax Description Registers Condition Flags Example ASR Rd, Rs ASR Rd, Rm, #imm ASR Rd, Rs Arithmetic shift right value in Rd. Only the low byte in Rs is used as shift value. If shift value is 32, Rd is cleared. If shift value is greater than 32, Rd and C are cleared. ASR Rd, Rm, #imm Arithmetic shift right value in Rm and store result to Rd. #imm specifics a constant shift value in the range 1-31. Supports only low registers (R0 - R7). Update N and Z; C is unaffected if shift value is zero, otherwise C contains last bit shifted out of Rd. ASR R0,R2,#6 // R0 = (signed) R2 >> 6 ASR R5,R2 // R5 = (signed) R5 >> R2, only the low byte in R2 is used. TEQ: Bitwise Exclusive OR operation, result discarded. Used for conditional operations afterwards Syntax Description TEQ{cond} Rn, Op2 Exclusive OR of the values Rn and Op2. Condition Flags N and Z flags are updated according the result. C flag may be updated during the calculation of Op2. Example TEQS R4, #3 //Test R4 for equality with 3 73
Sous ensemble du jeu d instruction [Ressources] TST: Test Syntax Description TST{cond} Rn, Op2 performs a bitwise AND operation on the value in Rn and the value of Op2. This is similar to the ANDS instruction, except that the result is discarded. Condition Flags N and Z flags are updated according the result. C flag may be updated during the calculation of Op2. Example TSTNE r1,r5,asr r1 BIC: Bit Clear Syntax Description BIC{cond}{S} Rd, Rn, Op2 Perform an AND operation on the bits in Rn with the complements of the corresponding bits in the value of Op2 Condition Flags If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. Example R0,R0 #0x1F //Clear mode bits 4. Instruction de comparaison Instruction de branchement conditionnelle CMP: Compare. Used in combination with conditional branch instructions Syntax Description CMP {cond} Rn, Op2 subtracts the value of Op2 from the value in Rn (equals to the SUBS instruction with a discarded result). This instruction updates the condition flags, but do not place a result in a register. Condition Flags N, Z, C and V flags are updated. Example CMP R2, R9 //Subtract value of R9 from R2 74
Sous ensemble du jeu d instruction [Ressources] B: Branch to label. Used to jump to a specific program location Syntax Description B{cond} label The jump distance must be within -252 to +258 bytes for conditional and ±2 KBytes for unconditional branch. Condition Flags not modified. Example CMP R1,#10 // compare R10 with #10 BEQ val_ok // jump to label val_ok val_ok: val_err: B val_err // jump to itself (loop forever) 5. Instructions lecture (Load)/écriture (Store) - mémoire LDR: Load 32-bit word to Memory Syntax LDR{cond} Rd, [Rn] LDR{cond} Rd, [Rn, offset] LDR{cond} Rd, [Rn, offset]! LDR{cond} Rd, label LDR{cond} Rd, [Rn], offset Description LDR{cond} Rd, [Rn] (zero offset) Rn is used as address value. LDR{cond} Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond} Rd, [Rn, offset]{!} (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond} Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond} Rd, [R15, offset]. LDR{cond} Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDR R8,[R10] //loads r8 from the address in r10. LDRNE R2,[R5,#960]! //(conditionally) loads r2 from a word 960 bytes above the address in r5, and increments r5 by 960. LDR R0,localdata //loads a word located at label localdata 75
Sous ensemble du jeu d instruction [Ressources] LDRB: Load register byte value to Memory Syntax LDR{cond}B Rd, [Rn] LDR{cond}B Rd, [Rn, offset] LDR{cond}B Rd, [Rn, offset]! LDR{cond}B Rd, label LDR{cond}B Rd, [Rn], offset Description LDR{cond}B Rd, [Rn] (zero offset) Rn is used as address value. LDR{cond}B Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond}B Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}B Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond}B Rd, [R15, offset]. LDR{cond}B Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDR r8,[r10] //loads r8 from the address in r10. LDRNE r2,[r5,#960]! //(conditionally) loads r2 from a word //960 bytes above the address in r5, and //increments r5 by 960. STR r2,[r9,#consta-struc] //consta-struc is an expression evaluating //to a constant in the range 0-4095. STRB r0,[r3,-r8,asr #2] //stores the least significant byte from //r0 to a byte at an address equal to //contents(r3) minus contents(r9)/4. //r3 and r8 are not altered. STR r5,[r7],#-8 //stores a word from r5 to the address //in r7, and then decrements r7 by 8. LDR r0,localdata //loads a word located at label local data 76
Sous ensemble du jeu d instruction [Ressources] LDRH: Load register 16-bit halfword value to Memory. The address must be even for halfword transfers Syntax LDR{cond}H Rd, [Rn] LDR{cond}H Rd, [Rn, offset] LDR{cond}H Rd, [Rn, offset]! LDR{cond}H Rd, label LDR{cond}H Rd, [Rn], offset Description LDR{cond}H Rd, [Rn] (Zero offset) Rn is used as address value. LDR{cond}H Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond}H Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}H Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond}H Rd, [R15, offset] LDR{cond}H Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDREQSH r11,[r6] //(conditionally) loads r11 with a 16-bit halfword //from the address in r6. Sign extends to 32 bits. LDRH r1,[r0,#22] //load r1 with a 16 bit halfword from 22 bytes //above the address in r0. Zero extend to 32 bits. STRH r4,[r0,r1]! //store the least significant halfword from r4 //to two bytes at an address equal to contents(r0) //plus contents(r1). Write address back into r0. LDRSB r6,constf //load a byte located at label constf. Sign extend. 77
Sous ensemble du jeu d instruction [Ressources] LDRD: Load register pair Rd and Rd+1 with double word (64-bit) value. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax CPU LDR{cond}D Rd, [Rn] LDR{cond}D Rd, [Rn, offset] LDR{cond}D Rd, [Rn, offset]! LDR{cond}D Rd, label LDR{cond}D Rd, [Rn], offset ARM9E only Description LDR{cond}D Rd, [Rn] (zero offset) Rn is used as address value. LDR{cond}D Rd, [Rn, offset] (pre-index offset) Rn and offset are added and used as address value. LDR{cond}D Rd, [Rn, offset]! (pre-index offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}D Rd, label (pre-index with PC relative offset) The assembler calculates the PC offset and generates LDR{cond}D Rd, [R15, offset] LDR{cond}D Rd, [Rn], offset (post-index offset with update) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDRD R6,[R11] //Load R6 and R7 and use R11 as address value 78
Sous ensemble du jeu d instruction [Ressources] MOV: Move constant or register to register. This instruction is also used for shift operations Syntax Description MOV{cond}{S} Rd, Op2 copies the value of Op2 into Rd. Condition Flags If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. Example MOV R5,#0x20 // load R5 with the constant 0x20 MOV R2,R3 // load R2 with the value in R3 MOV R4,R5, SHL #4 // load R4 with the value in R5 shift left by 4 bits LDRD: Load register pair Rd and Rd+1 with double word (64-bit) value. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax CPU LDR{cond}D Rd, [Rn] LDR{cond}D Rd, [Rn, offset] LDR{cond}D Rd, [Rn, offset]! LDR{cond}D Rd, label LDR{cond}D Rd, [Rn], offset ARM9E only Description LDR{cond}D Rd, [Rn] (zero offset) Rn is used as address value. LDR{cond}D Rd, [Rn, offset] (pre-index offset) Rn and offset are added and used as address value. LDR{cond}D Rd, [Rn, offset]! (pre-index offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}D Rd, label (pre-index with PC relative offset) The assembler calculates the PC offset and generates LDR{cond}D Rd, [R15, offset] LDR{cond}D Rd, [Rn], offset (post-index offset with update) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDRD R6,[R11] //Load R6 and R7 and use R11 as address value 79
Sous ensemble du jeu d instruction [Ressources] STRD: Store register pair Rd and Rd+1 with double word (64-bit) value. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax CPU STR{cond}D Rd, [Rn] STR{cond}D Rd, [Rn, offset] STR{cond}D Rd, [Rn, offset]! STR{cond}D Rd, label STR{cond}D Rd, [Rn], offset ARM9E only Description STR{cond}D Rd, [Rn] (zero offset) Rn is used as address value. STR{cond}D Rd, [Rn, offset] (pre-index offset) Rn and offset are added and used as address value. STR{cond}D Rd, [Rn, offset]! (pre-index offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. STR{cond}D Rd, label (pre-index with PC relative offset) The assembler calculates the PC offset and generates STR{cond}D Rd, [R15, offset] STR{cond}D Rd, [Rn], offset (post-index offset with update) Rn is used as address value. After memory transfer, the offset is added to Rn. Example STRD R4,[R9,#24] //Store R4 in R9+24. 80
Sous ensemble du jeu d instruction [Ressources] LDRD: Load register pair Rd and Rd+1 with double word (64-bit) value. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax CPU LDR{cond}D Rd, [Rn] LDR{cond}D Rd, [Rn, offset] LDR{cond}D Rd, [Rn, offset]! LDR{cond}D Rd, label LDR{cond}D Rd, [Rn], offset ARM9E only Description LDR{cond}D Rd, [Rn] (zero offset) Rn is used as address value. LDR{cond}D Rd, [Rn, offset] (pre-index offset) Rn and offset are added and used as address value. LDR{cond}D Rd, [Rn, offset]! (pre-index offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}D Rd, label (pre-index with PC relative offset) The assembler calculates the PC offset and generates LDR{cond}D Rd, [R15, offset] LDR{cond}D Rd, [Rn], offset (post-index offset with update) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDRD R6,[R11] //Load R6 and R7 and use R11 as address value 81
Sous ensemble du jeu d instruction [Ressources] STRD: Store register pair Rd and Rd+1 with double word (64-bit) value. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax CPU STR{cond}D Rd, [Rn] STR{cond}D Rd, [Rn, offset] STR{cond}D Rd, [Rn, offset]! STR{cond}D Rd, label STR{cond}D Rd, [Rn], offset ARM9E only Description STR{cond}D Rd, [Rn] (zero offset) Rn is used as address value. STR{cond}D Rd, [Rn, offset] (pre-index offset) Rn and offset are added and used as address value. STR{cond}D Rd, [Rn, offset]! (pre-index offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. STR{cond}D Rd, label (pre-index with PC relative offset) The assembler calculates the PC offset and generates STR{cond}D Rd, [R15, offset] STR{cond}D Rd, [Rn], offset (post-index offset with update) Rn is used as address value. After memory transfer, the offset is added to Rn. Example STRD R4,[R9,#24] //Store R4 in R9+24. 82
Sous ensemble du jeu d instruction [Ressources] LDRH: Load register 16-bit halfword value to Memory. The address must be even for halfword transfers Syntax LDR{cond}H Rd, [Rn] LDR{cond}H Rd, [Rn, offset] LDR{cond}H Rd, [Rn, offset]! LDR{cond}H Rd, label LDR{cond}H Rd, [Rn], offset Description LDR{cond}H Rd, [Rn] (Zero offset) Rn is used as address value. LDR{cond}H Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond}H Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}H Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond}H Rd, [R15, offset] LDR{cond}H Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDREQSH r11,[r6] //(conditionally) loads r11 with a 16-bit halfword //from the address in r6. Sign extends to 32 bits. LDRH r1,[r0,#22] //load r1 with a 16 bit halfword from 22 bytes //above the address in r0. Zero extend to 32 bits. STRH r4,[r0,r1]! //store the least significant halfword from r4 //to two bytes at an address equal to contents(r0) //plus contents(r1). Write address back into r0. LDRSB r6,constf //load a byte located at label constf. Sign extend. 83
Sous ensemble du jeu d instruction [Ressources] LDRSH: Load register signed halfword from Memory. The address must be even for halfword transfers Syntax LDR{cond}SH Rd, [Rn] LDR{cond}SH Rd, [Rn, offset] LDR{cond}SH Rd, [Rn, offset]! LDR{cond}SH Rd, label LDR{cond}SH Rd, [Rn], offset Description LDR{cond}SH Rd, [Rn] (Zero offset) Rn is used as address value. LDR{cond}SH Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond}SH Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}SH Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond}SH Rd, [R15, offset] LDR{cond}SH Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDREQSH r11,[r6] //(conditionally) loads r11 with a 16-bit halfword //from the address in r6. Sign extends to 32 bits. LDRH r1,[r0,#22] //load r1 with a 16 bit halfword from 22 bytes //above the address in r0. Zero extend to 32 bits. STRH r4,[r0,r1]! //store the least significant halfword from r4 //to two bytes at an address equal to contents(r0) //plus contents(r1). Write address back into r0. LDRSB r6,constf //load a byte located at label constf. Sign extend. 84
Sous ensemble du jeu d instruction [Ressources] STRH: Store register 16-bit halfword value to Memory. The address must be even for halfword transfers Syntax STR{cond}H Rd, [Rn] STR{cond}H Rd, [Rn, offset] STR{cond}H Rd, [Rn, offset]! STR{cond}H Rd, label STR{cond}H Rd, [Rn], offset Description STR{cond}H Rd, [Rn] (zero offset) Rn is used as address value. STR{cond}H Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. STR{cond}H Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The address value is written to Rn. STR{cond}H Rd, label (Program relative) The assembler calculates the PC offset and generates STR{cond}H Rd, [R15], offset. STR{cond}H Rd, [Rn], offset (post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example STRH r4,[r0,r1]! //store the least significant halfword from r4 //to two bytes at an address equal to contents(r0) //plus contents(r1). Write address back into r0. 85
Sous ensemble du jeu d instruction [Ressources] LDRB: Load register byte value to Memory Syntax LDR{cond}B Rd, [Rn] LDR{cond}B Rd, [Rn, offset] LDR{cond}B Rd, [Rn, offset]! LDR{cond}B Rd, label LDR{cond}B Rd, [Rn], offset Description LDR{cond}B Rd, [Rn] (zero offset) Rn is used as address value. LDR{cond}B Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond}B Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}B Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond}B Rd, [R15, offset]. LDR{cond}B Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDR r8,[r10] //loads r8 from the address in r10. LDRNE r2,[r5,#960]! //(conditionally) loads r2 from a word //960 bytes above the address in r5, and //increments r5 by 960. STR r2,[r9,#consta-struc] //consta-struc is an expression evaluating //to a constant in the range 0-4095. STRB r0,[r3,-r8,asr #2] //stores the least significant byte from //r0 to a byte at an address equal to //contents(r3) minus contents(r9)/4. //r3 and r8 are not altered. STR r5,[r7],#-8 //stores a word from r5 to the address //in r7, and then decrements r7 by 8. LDR r0,localdata //loads a word located at label localdata 86
Sous ensemble du jeu d instruction [Ressources] LDRSB: Load register signed byte value to Memory. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax LDR{cond}SB Rd, [Rn] LDR{cond}SB Rd, [Rn, offset] LDR{cond}SB Rd, [Rn, offset]! LDR{cond}SB Rd, label LDR{cond}SB Rd, [Rn], offset Description LDR{cond}SB Rd, [Rn] (Zero offset) Rn is used as address value. LDR{cond}SB Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. LDR{cond}SB Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. LDR{cond}SB Rd, label (Program-relative) The assembler calculates the PC offset and generates LDR{cond}SB Rd, [R15, offset] LDR{cond}SB Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDREQSH r11,[r6] //(conditionally) loads r11 with a 16-bit halfword //from the address in r6. Sign extends to 32 bits. LDRH r1,[r0,#22] //load r1 with a 16 bit halfword from 22 bytes //above the address in r0. Zero extend to 32 bits. STRH r4,[r0,r1]! //store the least significant halfword from r4 //to two bytes at an address equal to contents(r0) //plus contents(r1). Write address back into r0. LDRSB r6,constf //load a byte located at label constf. Sign extend. 87
Sous ensemble du jeu d instruction [Ressources] STRB: Store register byte value to Memory. Only the registers R0, R2, R4, R6, R8, R10, R12 are supported as Rd Syntax STR{cond}B Rd, [Rn] STR{cond}B Rd, [Rn, offset] STR{cond}B Rd, [Rn, offset]! STR{cond}B Rd, label STR{cond}B Rd, [Rn], offset Description STR{cond}B Rd, [Rn] (zero offset) Rn is used as address value. STR{cond}B Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. STR{cond}B Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The address value is written to Rn. STR{cond}B Rd, label (Program-relative) The assembler calculates the PC offset and generates STR{cond}B Rd, [R15, offset]. STR{cond}B Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example STRB R8,[R10] // store r8 to memory address in r10. CMP R2,#10 // compare R2 with 10 STRNEB R2,[R5,#960]! // if R2 is not 10, store R2 to R5+960 and update the R5 with this address value 88
Sous ensemble du jeu d instruction [Ressources] MOV: Move constant or register to register. This instruction is also used for shift operations Syntax Description MOV{cond}{S} Rd, Op2 copies the value of Op2 into Rd. Condition Flags If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. Example MOV R5,#0x20 // load R5 with the constant 0x20 MOV R2,R3 // load R2 with the value in R3 MOV R4,R5, SHL #4 // load R4 with the value in R5 shift left by 4 bits MVN : Load register with inverted value Syntax Description MVN{cond}{S} Rd, Op2 takes the value of Op2, performs a bitwise logical NOT operation on the value, and places the result into Rd. Condition Flags If S is specified, N, Z flags are updated. C flag may be updated by calculation of Op2. Example MVNE r11, #0xF000000B STM: Store multiple registers Syntax Description STM{cond}mode Rn{!}, reglist{^} Stores any subset of the currently visible registers. This instruction supports all possible stacking modes, maintaining full or empty stacks which can grow up or down memory, and they are very efficient instructions for saving or restoring context, or for moving large blocks of data around main memory. Condition Flags If S is specified update flags: N, Z, C, V. Example STMDB r1!,{r3-r6,r11,r12} STMFD r13!,{r0,r4-r7,lr} ; Push registers including the stack pointer 89
Sous ensemble du jeu d instruction [Ressources] STR: Store register 32-bit words to Memory. The address must be 32-bit word-aligned Syntax STR{cond} Rd, [Rn] STR{cond} Rd, [Rn, offset] STR{cond} Rd, [Rn, offset]! STR{cond} Rd, label STR{cond} Rd, [Rn], offset Description STR{cond} Rd, [Rn] (zero offset) Rn is used as address value. STR{cond} Rd, [Rn, offset] (Pre-indexed offset) Rn and offset are added and used as address value. STR{cond} Rd, [Rn, offset]! (Pre-indexed offset with update) Rn and offset are added and used as address value. The new address value is written to Rn. STR{cond} Rd, label (Program-relative) The assembler calculates the PC offset and generates STR{cond} Rd, [R15], offset. STR{cond} Rd, [Rn], offset (Post-indexed offset) Rn is used as address value. After memory transfer, the offset is added to Rn. Example LDR r8,[r10] //loads r8 from the address in r10. LDRNE r2,[r5,#960]! //(conditionally) loads r2 from a word //960 bytes above the address in r5, and //increments r5 by 960. STR r2,[r9,#consta-struc] //consta-struc is an expression evaluating //to a constant in the range 0-4095. STRB r0,[r3,-r8,asr #2] //stores the least significant byte from //r0 to a byte at an address equal to //contents(r3) minus contents(r9)/4. //r3 and r8 are not altered. STR r5,[r7],#-8 //stores a word from r5 to the address //in r7, and then decrements r7 by 8. LDR r0,localdata //loads a word located at label localdata 90
Sous ensemble du jeu d instruction [Ressources] SWP: Swap content of 32-bit word between register and memory Syntax SWP{cond} Rd, Rm, [Rn] Description Swap data between registers and memory. Example SWP R2,R3,[R4] // Load R2 with 32-bit word at address in R4 and store R3 to this memory location CMP R0,#55H // Compare R0 with 0x55, if equal SWPEQ R0,R0,[R1] // exchange memory content at address R1 with register R0 Note Non word-aligned addresses are handled in exactly the same way as an LDR and an STR instruction. SWPB: Swap content of a byte between register and memory Syntax SWP{cond}B Rd, Rm, [Rn] Description Swap data between registers and memory. Example SWPB R2,R3,[R4] // Load R2 with unsigned byte at address in R4 and store R3 to this memory location CMP R0,#55H // Compare R0 with 0x55, if equal SWPEQB R0,R0,[R1] // exchange memory content at address R1 with byte in register R0 LDM: Load multiple registers from memory Syntax Description LDM{cond}mode Rn{!}, reglist{^} Loads any subset of the currently visible registers. This instruction supports all possible stacking modes, maintaining full or empty stacks which can grow up or down memory, and they are very efficient instructions for saving or restoring context, or for moving large blocks of data around main memory. Condition Flags If S is specified, N, Z, C and V flags are updated. Example LDMFD R13!, {R0,R4-R7,PC} //Pop the registers and return from subroutine 91
Sous ensemble du jeu d instruction [Ressources] STM: Store multiple registers Syntax Description STM{cond}mode Rn{!}, reglist{^} Stores any subset of the currently visible registers. This instruction supports all possible stacking modes, maintaining full or empty stacks which can grow up or down memory, and they are very efficient instructions for saving or restoring context, or for moving large blocks of data around main memory. Condition Flags If S is specified update flags: N, Z, C, V. Example STMDB r1!,{r3-r6,r11,r12} STMFD r13!,{r0,r4-r7,lr} ; Push registers including the stack pointer 92