Architecture Logicielle et matérielle

Documents pareils

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

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

Rappels d architecture

Structure d un programme

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

Architecture des ordinateurs

Programmation assembleur : aperçu

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

ASR1 TD7 : Un microprocesseur RISC 16 bits

Représentation d un entier en base b

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Conception de circuits numériques et architecture des ordinateurs

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

TP 1. Prise en main du langage Python

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

IV- Comment fonctionne un ordinateur?

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

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

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Plan du cours. Historique du langage Nouveautés de Java 7

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

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

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Compilation (INF 564)

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Microprocesseur + Logiciel

Algorithme. Table des matières

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Algorithmique et Programmation, IMA

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

Informatique Générale

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours Informatique 1. Monsieur SADOUNI Salheddine

CM2 L architecture MIPS32

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Cours 1 : Qu est-ce que la programmation?

Licence Sciences et Technologies Examen janvier 2010

Architecture des ordinateurs Introduction à l informatique

Logiciel de Base. I. Représentation des nombres

Architecture des ordinateurs

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Algorithmique et programmation : les bases (VBA) Corrigé

L informatique en BCPST

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

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Limitations of the Playstation 3 for High Performance Cluster Computing

Une version javascript sera disponible directement dans le cours prochainement.

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

REALISATION d'un. ORDONNANCEUR à ECHEANCES

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Programmation C++ (débutant)/instructions for, while et do...while

Concept de machine virtuelle

Cours d algorithmique pour la classe de 2nde

Introduction à l algorithmique et à la programmation (Info 2)

Architecture matérielle des systèmes informatiques

Rappels Entrées -Sorties

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Le langage C. Séance n 4

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Cours Informatique Master STEP

Programmation système I Les entrées/sorties

Initiation à la programmation en Python

Java Licence Professionnelle CISII,

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année

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

INF 321 : mémento de la syntaxe de Java

Créer le schéma relationnel d une base de données ACCESS

Conventions d écriture et outils de mise au point

Les chaînes de caractères

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

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

Manuel de référence du langage Exemples Les aventures de Docteur R.

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

SYSTÈME DE GESTION DE FICHIERS

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Langage Java. Classe de première SI

Logiciel de base. Première année ENSIMAG

TP Contraintes - Triggers

ACTIVITÉ DE PROGRAMMATION

Claude Delannoy. 3 e édition C++

Chap III : Les tableaux

IFT2880 Organisation des ordinateurs et systèmes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

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

Programmation en langage C

TP1 : Initiation à Java et Eclipse

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

V- Manipulations de nombres en binaire

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Millenium3 Atelier de programmation

GPA770 Microélectronique appliquée Exercices série A

Transcription:

Architecture Logicielle et matérielle Cours 6 : Programmation LC3 (sans routine) D après les transparents de N. Louvet (univ Lyon1) Laure Gonnord http://laure.gonnord.org/pro/teaching/ Laure.Gonnord@univ-lyon1.fr Licence d info - Université Lyon 1 - FST

Introduction Le LC-3 est un processeur développé dans un but pédagogique par Yale N. Patt et J. Patel dans [Introduction to Computing Systems : From Bits and Gates to C and Beyond, McGraw-Hill, 2004]. Des sources et exécutables sont disponibles à l adresse : http://highered.mcgraw-hill.com/sites/0072467509/ Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 2 / 34

Intro 2/2 Nous allons nous baser sur le LC-3 pour illustrer les points suivants : Comment programme-t-on en assembleur? Comment mettre en place des routines? Comment mettre en place une pile d exécution de programme? Que doit faire un assembleur? Ce cours est inspiré de celui d Olivier Carton (Université Paris Diderot - Paris 7), disponible à l adresse : http://www.liafa.jussieu.fr/~carton Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 3 / 34

Introduction à l architecture du LC-3 1 Introduction à l architecture du LC-3 2 Les instructions du LC3 Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 4 / 34

Introduction à l architecture du LC-3 La mémoire centrale et les registres du LC-3 La mémoire du LC-3 est organisée par mots de 16 bits, avec un adressage également de 16 bits. La mémoire du LC-3 est donc formée de 2 16 mots de 16 bits, c est-à-dire 128 Kio avec des adresses de (0000) H à (FFFF) H. 8 registres généraux 16 bits : R0,...,R7. Toutefois, R6 : gestion de la pile d exécution, R7 : stockage de l adresse de retour d un appel de fonction (RET). quelques registres spécifiques 16 bits : PC (Program Counter), IR (Instruction Register) PSR (Program Status Register) plusieurs drapeaux. quelques autres. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 5 / 34

Introduction à l architecture du LC-3 Registre PSR Les bits N,Z,P du PSR indiquent si la dernière valeur placée dans un registre général est négative strictement (N), zéro (Z) ou positive strictement (P). On s en sert pour les tests Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 6 / 34

Introduction à l architecture du LC-3 Exemple : afficher les entiers de 9 à 0-1/5 print("affichage des entiers de 9 à 0 :\n"); i <- 9; while(i >= 0) { print(i + '0'); i <- i - 1; } print("\nfin de l'affichage!\n"); Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 7 / 34

Introduction à l architecture du LC-3 Exemple 2/5 : pseudo code + registres R0 pour l affichage, R1 comme compteur et R2 pour 0 : print("affichage des entiers de 9 à 0 :\n"); R2 <- '0'; R1 <- 9; while(r1 >= 0) { R0 <- R1 + '0'; print(r0); R1 <- R1-1; } print("\nfin de l'affichage!\n"); Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 8 / 34

Introduction à l architecture du LC-3 Exemple 3/5 : schéma général de traduction boucle while : /* En peudo-code */ while(e cmp 0) { corps de boucle } ; En langage d'assemblage du LC3 loop: evaluation de e BR!cmp endloop ; condition de sortie de boucle corps de boucle BR loop ; branchement inconditionnel endloop: Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 9 / 34

Introduction à l architecture du LC-3 Exemple 4/5 : application /* En peudo-code */ R1 <- 9; while(r1 >= 0) { } R0 <- R1 + '0'; print(r0); R1 <- R1-1; ; En langage d'assemblage du LC3 AND R1,R1,0 ; ADD R1,R1,9 ; R1 <- 9 loop: ADD R1,R1,0 ; pour forcer la maj du PSR endloop: BRn endloop ; si R1 < 0, on sort de la boucle ADD R0,R1,R2 ; R0 <- (code ascii du chiffre R1) OUT ADD R1,R1,-1 BR loop ; affiche le caractère dans R0 ; R1 <- R1-1, maj du PSR d'après R1 ; retour au début de boucle Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 10 / 34

Introduction à l architecture du LC-3 Ex 5/5 : prog entier.orig x3000 ; adresse de début de programme ; partie dédiée au code LEA R0,msg0 ; charge l'adresse effective désignée par msg0 dans R0 PUTS ; affiche la chaine de caractères pointée par R0 (TRAP x22) LD R2,carzero ; charge '0' dans R2 AND R1,R1,0 ; ADD R1,R1,9 ; R1 <- 9 loop: BRn endloop ; si R1 < 0, alors on sort de la boucle ADD R0,R1,R2 ; R0 <- R1+'0' = (code ascii du chiffre R1) OUT ; affiche le caractère contenu dans R0 (TRAP x21) ADD R1,R1,-1 ; R1 <- R1-1, maj de NZP d'après R1 BR loop ; retour au début de boucle endloop: LEA R0,msg1 ; charge l'adresse effective désignée par msg0 dans R0 PUTS ; affiche la chaine de caractères pointée par R0 (TRAP x22) HALT ; termine le programme ; partie dédiée aux données carzero:.fill x30 ; code ASCII du caractère '0' (48 en décimal) msg0:.stringz "Affichage des entiers de 9 à 0 :\n" msg1:.stringz "\nfin de l'affichage!\n".end ; marque la fin du bloc de code Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 11 / 34

Introduction à l architecture du LC-3 Forme générale d un programme Un programme source écrit en langage d assemblage est un fichier texte qui comporte une suite de lignes. Sur chaque ligne, on trouve : soit une instruction (ADD, LD, BR,... ) ; soit une macro (GETC, OUT,... ) ; soit une directive d assemblage (.ORIG,.BLKW,... ) ; Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 12 / 34

Introduction à l architecture du LC-3 Forme générale d un programme : labels Une ligne peut être précédée par une étiquette pour référencer son adresse..orig x3000 ; directive pour le début de programme ; partie dédiée au code <- il s'agit d'un commentaire loop: GETC ; macro marquée par une étiquette... OUT LD R1,cmpzero ADD R0,R0,R1 ; partie dédiée aux données cmpzero:.fill xffd0 msg: ; macro ; instruction ; instruction ; directive.stringz "\nzero!\n" ; directive.end ; directive marquant la fin du programme Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 13 / 34

Introduction à l architecture du LC-3 Etiquettes ou labels L assembleur permet d utiliser des labels pour désigner des adresses. Un label est associé à une adresse et peut être utilisé par d autres instructions. L assembleur traduira ce label en une adresse effective lors de l assemblage. Par exemple, l étiquette label représente ci-dessous l adresse où se trouve l instruction ADD R6,R1,R2 :... label: ADD R6,R1,R2 ; R6 <- R1 + R2... BRz label ; Branchement conditionnel à l'adresse label... Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 14 / 34

Introduction à l architecture du LC-3 2 types de constantes Les chaînes de caractères : directive.stringz : elles sont délimitées par deux caractères " et implicitement terminées par le caractère nul. Les constantes entières écrites en hexadécimal sont précédées d un x, en décimal elles sont précédées d un # : Exemple : opérandes immédiats des instructions paramètres des directives.orig,.fill et.blkw..orig x3000 ; Constante entière en base 16 AND R2,R1,#2 ; Constante entière en base 10 ADD R6,R5,#-1 ; Constante entière négative en base 10.STRINGZ "Chaine" ; Constante chaîne de caractères Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 15 / 34

Introduction à l architecture du LC-3 Directives d assemblage.orig adresse : Spécifie l adresse à laquelle doit commencer le bloc d instructions qui suit..end : Termine un bloc d instructions..fill valeur : Réserve un mot de 16 bits et le remplit avec la valeur constante donnée en paramètre..stringz chaine : Réserve un nombre de mots égal à la longueur de la chaîne de caractères plus un caractère nul et y place la chaîne..blkw nombre : Cette directive réserve le nombre de mots de 16 bits passé en paramètre. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 16 / 34

Introduction à l architecture du LC-3 Les interruptions prédéfinies : «appels système» L instruction TRAP appelle un gestionnaire d interruption mis en place par le petit système d exploitation du LC-3 : il s agit donc d un appel système. Chaque appel système est identifié par une constante sur 8 bits. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 17 / 34

Introduction à l architecture du LC-3 Macros pour les interruptions Dans l assembleur du LC-3, on peut utiliser les macros suivantes pour effectuer des appels systèmes. instruction macro description TRAP x00 HALT termine un programme (rend la main à l OS) TRAP x20 GETC lit au clavier un caractère ASCII et le place dans l octet de poids faible de R0 TRAP x21 OUT écrit à l écran le caractère ASCII placé dans l octet de poids faible de R0 TRAP x22 PUTS écrit à l écran la chaine de caractères pointée par R0 TRAP x23 IN lit au clavier un caractère ASCII, l écrit à l écran, et le place dans l octet de poids faible de R0 Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 18 / 34

Les instructions du LC3 1 Introduction à l architecture du LC-3 2 Les instructions du LC3 Les instructions de chargement et rangement Les instructions de branchement Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 19 / 34

Les instructions du LC3 Les instructions du LC-3 (redite, cf ISA) Les instructions du LC-3 se répartissent en trois classes. Instructions arithmétiques et logiques : ADD, AND, NOT. Instructions de chargement et rangement : LS, ST, LDR, STR, LEA. Instructions de branchement : BR, JSR, TRAP, RET Il y a aussi NOP, pour no operation, qui ne fait rien... Pour simplifier les choses, d autres instructions du jeu d instruction du LC3 sont ici omises. (cf ISA) Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 20 / 34

Les instructions du LC3 Récapitulatif des instructions du LC-3 Cf feuille jointe + ISA du LC3. La colonne «NZP» indique les instructions qui provoquent la mise à jour des drapeaux NZP. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 21 / 34

Les instructions du LC3 Deux comportements pour ADD (rappel) Notez par exemple que l addition (ADD) se décline de deux façons : «ADD DR, SR1, SR2» ajoute les contenus des deux registres sources SR1 et SR2, et place le résultat dans le registre destination DR. «ADD DR, SR1, SR2» ajoute le contenu de SR1 à un immédiat codé en complément à 2 sur 5 bits, et de place le résultat dans DR. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 22 / 34

Les instructions du LC3 Les instructions de chargement et rangement 1 Introduction à l architecture du LC-3 2 Les instructions du LC3 Les instructions de chargement et rangement Les instructions de branchement Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 23 / 34

Les instructions du LC3 Les instructions de chargement et rangement LD (principe symétrique pour ST) Soit adi adresse de l instruction LD considérée. syntaxe : LD DR,label le label servira à désigner une adresse mémoire AdM. action : DR Mem[PC + Sext(PCOffset9)] valeur de PC après son incrémentation lors du chargement : PC = adi+1. l adresse du chargement est calculé à partir d un offset codé en complément à 2 sur 9 bits : -256 Sext(PCOffset9) 255. La case mémoire chargée est donc celle à l adresse : adm = adi + 1 + Sext(PCOffset9), Comme adi 255 adm adi + 256, la distance entre une instruction LD et la case mémoire dont elle peut charger le contenu est limitée, d où l utilité de l instruction LDR. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 24 / 34

Les instructions du LC3 Les instructions de chargement et rangement LD 2/2 adm = adi + 1 + Sext(PCOffset9). En pratique, c est l assembleur qui va se charger du calcul de PCOffset9 le programmeur en langage d assemblage se contente d utiliser des labels. label1: 10 data1 label2: 11 data2 12 13 14 15 16 17 18 19............... LD R1,label1...... LD R1, 8 Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 25 / 34

Les instructions du LC3 Les instructions de chargement et rangement LDR (principe symétrique pour STR) syntaxe : LDR DR,baseR,Offset6 action : DR Mem[baseR + Sext(PCOffset6)] l offset est codé en complément à 2 sur 6 bits : 32 Sext(Offset6) 31. La case mémoire chargée est celle à l adresse : adm = baser + Sext(PCOffset6), avec baser 32 adm baser + 31. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 26 / 34

Les instructions du LC3 Les instructions de chargement et rangement Utilisation de STR/LDR Avec LDR et STR, on peut accéder à toutes les adresses de la mémoire. On utilise ses instructions pour manipuler des données sur la pile 1, comme les variables locales des fonctions ; accéder aux éléments d un tableau. baser est utilisé comme un pointeur. Par contre, comment initialiser baser? 1. on n a pas encore vu cette notion Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 27 / 34

Les instructions du LC3 Les instructions de chargement et rangement LEA - chargement d une adresse dans un registre syntaxe : LEA DR,label action : DR PC + Sext(PCOffset9) si adi est l adresse de l instruction, l adresse chargée est : adm = adi + 1 + Sext(PCOffset9), adi 255 adm adi + 256. L adresse est calculée comme pour un LD, mais seule l adresse adm est chargée dans DR (pas Mem[AdM]). Cette instruction est utile pour : charger l adresse d un tableau dans un registre, charger l adresse de la base de la pile d exécution. On s en sert donc de LEA pour initialiser un pointeur. Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 28 / 34

Les instructions du LC3 Les instructions de branchement 1 Introduction à l architecture du LC-3 2 Les instructions du LC3 Les instructions de chargement et rangement Les instructions de branchement Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 29 / 34

Les instructions du LC3 Les instructions de branchement BR : registre dédié 1/2 Trois drapeaux N, Z et P (majuscules) du PSR sont mis à jour dès qu une nouvelle valeur est chargée dans l un des registres généraux : N passe à 1 si cette valeur est strictement négative, Z passe à 1 si cette valeur est nulle, P passe à 1 si cette valeur est strictement positive. (cf TP circuits combinatoires) Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 30 / 34

Les instructions du LC3 Les instructions de branchement BR : instruction 2/2 L instruction BR contient elle trois bits n, z et p (minuscules) : syntaxe : BR[n][z][p] label action : si cond alors PC PC+Sext(PCOffset9) cond = (n z p) + (n = N) + (z = Z) + (p = P ) si adi est l adresse de l instruction, l adresse de branchement est : adm = adi + 1 + Sext(PCOffset9), adi 255 adm adi + 256. On réalise avec BR des branchements inconditionnels ou conditionnels. L assembleur se charge de calculer PCOffset9 d après le label fourni : il faut néanmoins garder à l esprit le fait que la distance du saut est limitée... Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 31 / 34

Les instructions du LC3 Les instructions de branchement Un autre exemple de programme 1/3 On veut écrire un programme qui calcule la longueur d une chaîne de caractères se trouvant à l adresse désignée par un label string. Le résultat sera stocké à l adresse désignée par res. On commence par mettre en place la structure de base du programme :.ORIG x3000 ; Partie contenant le code ; Chaine constante string:.stringz "Hello World" res:.blkw #1.END Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 32 / 34

Les instructions du LC3 Les instructions de branchement Ex 2/3 : pseudo code à traduire R0 <- &string; // R0 pointe vers le début de la chaine R1 <- 0; // Le compteur R1 est initialisé à 0 while((r2 <- *R0)!= '\0') { R0 <- R0+1; // Incrémentation du pointeur R1 <- R1+1; // Incrémentation du compteur } res <- R1; // Rangement du résultat Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 33 / 34

Les instructions du LC3 Les instructions de branchement Ex 3/3 : Programme final.orig x3000 LEA R0,string ; Initialisation du pointeur R0 AND R1,R1,0 ; Le compteur R1 est initialisé à 0 loop: LDR R2,R0,0 ; Chargement dans R2 du caractere pointé par R0 BRz end ; Test de sortie de boucle ADD R0,R0,1 ; Incrémentation du pointeur ADD R1,R1,1 ; Incrémentation du compteur BR loop end: ST R1,res HALT ; Chaine constante string:.stringz "Hello World" res:.blkw #1.END Laure Gonnord (L2/FST/Univ Lyon1) ArchiL2 (LIF6) Cours 06 : Programmation LC3 1/2 2014 34 / 34