T.P. 3 Calculatrice (partie 2)

Documents pareils
Rappels d architecture

Algorithme. Table des matières

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Mon aide mémoire traitement de texte (Microsoft Word)

Structure d un programme

V- Manipulations de nombres en binaire


Informatique Générale

Les opérations binaires

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

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

Représentation des Nombres

Conversion d un entier. Méthode par soustraction

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

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

1.1 L EXPLORATEUR WINDOWS

IFT2880 Organisation des ordinateurs et systèmes

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

Chap III : Les tableaux

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

Master d'informatique 1ère année. Réseaux et protocoles. Architecture : les bases

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

IV- Comment fonctionne un ordinateur?

Programmation assembleur : aperçu

Tout savoir sur le clavier

Guide de correction et d optimisation des images en vue de leur publication sous Marcomedia Contribute. Logiciel utilisé : Adobe PhotoShop 7

Structure du format BMP, sa lecture, sa construction et son écriture

a) b)

Logiciel de Base. I. Représentation des nombres

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Esterel The french touch star touch esterel advance

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

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

alg - Classes, instances, objets [oo] Exercices résolus

Manuel d'installation de GESLAB Client Lourd

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

LECON 2 : PROPRIETES DE L'AFFICHAGE Version aout 2011

C++ - Classes, instances, objets [oo] Exercices résolus

Licence Sciences et Technologies Examen janvier 2010

Représentation d un entier en base b

UltraBackup NetStation 4. Guide de démarrage rapide

Architecture des ordinateurs

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

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Manuel de System Monitor

REALISATION d'un. ORDONNANCEUR à ECHEANCES

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Guide d installation du logiciel Proteus V.8 Sous Windows Vista, 7, 8

Administration de Parc Informatique TP07 : Installation de Linux Debian

SOMMAIRE AIDE À LA CRÉATION D UN INDEX SOUS WORD. Service général des publications Université Lumière Lyon 2 Janvier 2007

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

TP Déploiement de réseaux IP sous Linux et MS Windows sur une infrastructure virtualisée

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

Limitations of the Playstation 3 for High Performance Cluster Computing

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

TP 1 : prise en main de Windows. TP 1 : prise en main de Windows

MANUEL UTILISATEUR SOPISAFE V 3.5

TP 1. Prise en main du langage Python

sommaire Archives... Archiver votre messagerie... Les notes... Les règles de messagerie... Les calendriers partagés Les listes de diffusions...

Microprocesseur + Logiciel

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

Fiche Pratique. Présentation du problème. Installation du logiciel. Etape 1. MAJ le 17/10/2011

Une version javascript sera disponible directement dans le cours prochainement.

Une ergonomie intuitive

QUESTION 1 {2 points}

Plan du Travail. 2014/2015 Cours TIC - 1ère année MI 30

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

Une introduction aux codes correcteurs quantiques

ASR1 TD7 : Un microprocesseur RISC 16 bits

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

Premiers pas avec SES-Pegase (version 7.0) SES : Un Système Expert pour l analyse Statistique des données. Premiers pas avec SES-Pegase 1

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Restaurer des données

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

1. Utilisation du logiciel Keepass

avec des nombres entiers

TP a Notions de base sur le découpage en sous-réseaux

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Procédure de sauvegarde pour AB Magique

Guide d installation UNIVERSALIS 2014

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

ENVOI EN NOMBRE DE SMS

Cours Informatique 1. Monsieur SADOUNI Salheddine

CAPTURE DES PROFESSIONNELS

Initiation à LabView : Les exemples d applications :

Logiciels de gestion FAC. Analyste AgExpert. Guide de démarrage rapide 2014

EXCEL: Les fonctions financières

N importe qui possédant un code MS valide peut initier la rencontre. Néanmoins, il serait préférable de laisser cette

Architecture des ordinateurs Introduction à l informatique

Chapitre 1 : Évolution COURS

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A. TP réseau firewall

Plan du cours Cours théoriques. 29 septembre 2014

Logiciel REFERENCE pré-requis informatiques et techniques :

Par combien de zéros se termine N!?

Transcription:

T.P. 3 Calculatrice (partie 2) Pour ce TP, le sous-programme GetInput est mis à votre disposition. Il permet de récupérer une chaîne de caractères saisie par l utilisateur. GetInput contient les entrées-sorties suivantes : Entrées :.L pointe sur un buffer de 60 octets où sera stockée la chaîne après la saisie. D1.B contient le numéro de colonne où sera affichée la chaîne à saisir. D2.B contient le numéro de ligne où sera affichée la chaîne à saisir. Sortie : Aucune. Le buffer sera réservé par la directive d assemblage DS.B qui permet de réserver un espace défini dans la mémoire. Tapez le code source ci-dessous puis copiez le fichier "GetInput.bin" dans le même dossier. ; Initialisation des vecteurs org $0 vector_000 dc.l $ffb500 vector_001 dc.l Main vector_002_255 dcb.l 254,break_exception break_exception illegal ; Programme principal org $1000 Main lea sbuffer,a0 clr.b d1 clr.b d2 jsr GetInput illegal ; Sous-programmes GetInput incbin "GetInput.bin" sbuffer ds.b 60 ; Données T.P. 3 1/6

Exécutez-le à l aide du débogueur en activant la fenêtre de sortie vidéo. Saisissez une chaîne de caractères puis appuyez sur la touche [Entrée]. Observez alors ce que contient la mémoire à l adresse buffer. Recommencez jusqu à bien comprendre le fonctionnement de GetInput. Attention, il n est pas demandé d exécuter pas à pas le contenu de GetInput afin de comprendre son fonctionnement interne, mais simplement de savoir l utiliser. Remarque Le sous-programme GetInput ne prend en compte ni les majuscules, ni les accents, ni la répétition automatique des touches du clavier. Étape 1 Réalisez le sous-programme NextOp qui détermine soit la position du prochain opérateur dans une chaîne, soit la position du caractère nul si elle ne contient aucun opérateur. Entrée :.L pointe sur le premier caractère d une chaîne. Sortie :.L renvoie l adresse du premier opérateur de la chaîne s il existe, ou l adresse du caractère nul de la chaîne si elle ne contient aucun opérateur. Ex : Avant : '1' '0' '4' '+' '9' '*' '2' '-' '3' 0 Après : '1' '0' '4' '+' '9' '*' '2' '-' '3' 0 Étape 2 Réalisez le sous-programme GetNum qui détermine la valeur numérique du prochain nombre dans une chaîne avec une gestion des erreurs. Entrée :.L pointe sur le premier caractère d une chaîne. Sorties : Z renvoie 0 si la conversion contient une erreur. Z renvoie 1 si la conversion est valide. Si Z renvoie 0, alors D0.L et.l ne sont pas modifiés. Si Z renvoie 1, alors : D0.L renvoie la valeur numérique du nombre..l renvoie l adresse du caractère situé juste après le nombre converti. Ex : Avant : '1' '0' '4' '+' '9' '*' '2' '-' '3' 0 Après : '1' '0' '4' '+' '9' '*' '2' '-' '3' 0 Avec Z = 1 et D0 = 104 T.P. 3 2/6

Utilisez les registres et pour encadrer un nombre. Chaque nombre est séparé par un opérateur (sauf le dernier qui est suivi d un caractère nul). Aidezvous de NextOp, qui détermine la position du prochain opérateur (ou du caractère nul), pour réaliser cet encadrement. Sauvegardez dans D1 le caractère qui suit le nombre. D1 Isolez le nombre du reste de la chaîne en remplaçant le caractère qui suit ce nombre par un caractère nul. Ex : '1' '0' '4' 0 '9' '*' '2' '-' '3' 0 Utilisez le sous-programme Conv pour obtenir la conversion du nombre isolé. Replacez le caractère sauvegardé dans D1 à son emplacement d origine. D1 Faites attention aux valeurs de sortie et aux cas d erreurs. Étape 3 Réalisez le sous-programme GetExpr qui détermine la valeur numérique d une expression contenue dans une chaîne avec une gestion des erreurs. Entrée :.L pointe sur le premier caractère d une chaîne contenant une expression. Sorties : Z renvoie 0 si la conversion contient une erreur (elle est invalide). Z renvoie 1 si la conversion est valide. Si Z renvoie 0, alors D0.L est perdu. Si Z renvoie 1, alors D0.L renvoie la valeur numérique de l expression. T.P. 3 3/6

Indications David Bouchet Architecture des ordinateurs Info-Spé 2011/2012 Il est conseillé d utiliser les registres comme suit : doit servir à se déplacer dans la chaîne. D0 doit servir à la conversion de chacun des nombres de la chaîne. D1 doit servir à accumuler le résultat final. D2 doit servir à contenir l opérateur (ou le caractère nul). Prenons l exemple de la chaîne suivante : À l aide de GetNum, récupérez la valeur numérique du premier nombre. pointera sur le prochain opérateur. D0 contiendra la valeur numérique 104. Z contiendra 1. Renvoyez une erreur si la conversion est erronée. Initialisez la valeur de D1 (résultat final) avec celle du premier nombre. Il faut maintenant réaliser une boucle qui effectuera les opérations suivantes : Lecture de l opérateur (ou du caractère nul) dans D2. Faire pointer sur le prochain nombre. Si le contenu de D2 est nul, alors on peut quitter sans erreur. Sinon, il faut lancer la conversion du prochain nombre (et quitter si erreur). Selon l opérateur contenu dans D2, réaliser l opération. C'est-à-dire additionner, soustraire, multiplier ou diviser le contenu de D0 au contenu de D1. N oubliez pas de traiter le cas de la division par zéro qui doit renvoyer une erreur. Attention à l instruction de division du 68000 (cf. manuel) qui stocke le quotient entier dans les 16 bits de poids faible de la destination et le reste dans les 16 bits de poids fort. Une extension de signe sera peut-être nécessaire. T.P. 3 4/6

Étape 4 Réalisez le sous-programme Uitoa qui convertit une valeur numérique entière, codée sur 16 bits non signés, en une chaîne de caractères ASCII. Entrées :.L pointe sur un buffer où sera stockée la chaîne après la conversion. D0.W contient une valeur numérique entière non signée à convertir. Ex : Si D0.W = 10825, la chaîne suivante devra être placée à l adresse pointée par : '1' '0' '8' '2' '5' 0 Indications La technique consiste à diviser successivement par 10 le nombre à convertir et à récupérer le reste de chaque division afin de pouvoir le transformer en caractère. Par exemple si D0.W = 10825, on aura les cinq divisions suivantes : Division Quotient Reste 10825/10 1082 5 1082/10 108 2 108/10 10 8 10/10 1 0 1/10 0 1 Il suffit de récupérer chaque reste et de le transformer en caractère ASCII. Un problème se pose : le premier reste que l on récupère correspond au dernier caractère à stocker dans la chaîne. Les caractères nous arrivent dans l ordre inverse. Après avoir transformé un reste en caractère, il n est donc pas possible de le placer tout de suite dans la chaîne. Il faut dans un premier temps le placer dans la pile. Le premier caractère à empiler sera le caractère nul (avant même la première division). Seront empilés ensuite les caractères '5', '2', '8', '0' et '1'. C est la valeur nulle du quotient qui indiquera à quel moment arrêter les divisions. La pile aura alors l aspect suivant (en représentation hexadécimale) : A7 0031 0030 0038 0032 0035 0000 Remarque Il n est pas possible d empiler un octet. La taille minimale d une donnée empilée est de 16 bits. Rappel : '0' = $30 T.P. 3 5/6

Il suffit maintenant de dépiler tous les caractères (jusqu au caractère nul) et de les placer dans la chaîne. Attention, il n est pas possible de copier directement le contenu d un caractère de la pile dans la chaîne. Dans la pile, un caractère est codé sur 16 bits, alors que dans la chaîne, un caractère est codé sur 8 bits. On a donc une source sur 16 bits et une destination sur 8 bits. Pour réaliser cette opération, il faudra passer par un registre. C'est-à-dire copier le caractère de la pile dans un registre (opération sur 16 bits), puis copier le registre dans la chaîne (opération sur 8 bits). Attention à l instruction de division du 68000 (cf. manuel) qui stocke le quotient entier dans les 16 bits de poids faible de la destination et le reste dans les 16 bits de poids fort. Aidez-vous de l instruction SWAP (cf. manuel) qui permet d échanger les paquets de 16 bits d un registre. Attention également à bien comprendre la taille prise en compte pour chacun des opérandes de l instruction DIVU. Dans notre cas, seuls les 16 bits du dividende nous intéressent. Si les 32 bits sont pris en compte dans la division, il faudra ajouter un masque initialisant à zéro les 16 bits de poids fort du dividende juste avant la division. Étape 5 Réalisez le sous-programme Itoa qui convertit une valeur numérique entière, codée sur 16 bits signés, en une chaîne de caractères ASCII. Entrées :.L pointe sur un buffer où sera stockée la chaîne après la conversion. D0.W contient une valeur numérique entière signée à convertir. Ex : Si D0.W = -10825, la chaîne suivante devra être placée à l adresse pointée par : '-' '1' '0' '8' '2' '5' 0 Indications Si le nombre est positif, il suffit d appeler Uitoa. Si le nombre est négatif, il faut positionner le caractère '-' dans la chaîne puis appeler Uitoa avec l opposé du nombre à convertir. Étape 6 Réalisez le programme Main de la calculatrice en respectant l affichage de l exemple suivant : Veuillez saisir une expression : 50*4+2 Resultat : 202 T.P. 3 6/6