Tour rapide d’un premier programme SPARC v9

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Introduction au Langage C,C++
Les procédures et interruptions en Assembleur (Tasm)
DECLARATION DE VARIABLES
Les Structures. Introduction : Imaginons que lon veuille afficher les notes dune classe délèves par ordre croissant avec les noms et prénoms de chaque.
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
Gestion de FICHIERS.
Assembleur
La pile un élément essentiel
C.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Section VIII Modularité Partie II
Le codage des nombres en informatique
Système d’exploitation : Assembleur
CPI/BTS 2 Programmation Web Introduction au PHP
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Chapitre IV LES STRUCTURES SIMPLES. Plan I- Les entrées II- Laffectation III- Les sorties.
Démarche de résolution de problèmes
Les éléments de base de l’algorithmique
La récursivité Une procédure est dite récursive si, et seulement si, elle fait appel à elle-même, soit directement soit indirectement Djamal Rebaïne Djamal.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Système d’exploitation : Assembleur
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Introduction à la programmation (Java)
Lecture et écriture de données
Points importants de la semaine Les constantes de compilation. Les fonctions.
Principes de programmation
Les chaînes de caractères
LANGAGE C LP A2I IUT St DIE
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Types de données fondamentaux
Animateur : Med HAIJOUBI
Stocker plusieurs valeurs de même type dans une variable
Les bases de l’assembleur
SIF-1053 Architecture des ordinateurs
Langage C Chapitre I: Initiation à la programmation en C
Un survol du language C.
Labo 4 : Les structures et les entrées et sorties
REPRESENTATION DE L’INFORMATION
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Méthodes et outils de conception Introduction à la programmation Paramètre de retour Appel d’une fonction Portée des variables Définition Pourquoi les.
Fonctions avancées et graphiques
Microcontrôleurs PIC. 1ère séance Présentation du PIC16F876 Outils de programmation du PIC Le langage C Exemples d’applications simples 2ème séance Présentation.
L’addition et la soustraction des nombres décimaux
Introduction au langage C Les entrées-sorties
Mettre en formeExaminerManipuler Les fonctions printf() et sprintf Le traitement de chaîne de caractère La fonction printf() formate le contenu d'une chaîne.
La Notation Scientifique
Patricia Renault UPMC 2005/2006
Les entrées-sorties élémentaires
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Les structures simples
IFT209 – Programmation Système
Les instructions de contrôle
Chapitre 4 La représentation des nombres.
Chapitre 3 L’accès aux données.
Introduction à l’utilitaire
Chapitre 9 Les caractères.
CHAPITRE 6 Les tableaux 1. Suite de composantes de même type Donc de même longueur Contiguë en mémoire Possédant un nom Donc une adresse Où chaque composante.
02/10/2015Les structures de contrôle1 COURS A2I12 Initiation à l'algorithmique illustrée par le langage C Guillaume BOURLET Département GEII IUT Sénart/Fontainebleau.
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
Objets et Actions Élémentaires.
Les Structures simples
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
BASE DE L’ALGORITHMIE.  Un système d’instructions.  Pour résoudre d’un problème ou d’une classe de problèmes  Recette de cuisine pour faire un gâteau.
Transcription de la présentation:

Tour rapide d’un premier programme SPARC v9 Chapitre 4 Tour rapide d’un premier programme SPARC v9

Problème Dans le plan cartésien, trouver le périmètre et la surface d’un rectangle connu par l’intermédiaire des coordonnées de deux de ses sommets diamétralement opposés. Les côtés du rectangle sont parallèles aux axes.

Analyse-Conception Données Entrées Sorties Intermédiaire X1 : abscisse du 1er sommet Y1 : ordonnée du 1er sommet X2 : abscisse du 2e sommet Y2 : ordonnée du 2e sommet Sorties Périmètre = 2×(𝐵𝑎𝑠𝑒+𝐻𝑎𝑢𝑡𝑒𝑢𝑟) Surface = 𝐵𝑎𝑠𝑒×𝐻𝑎𝑢𝑡𝑒𝑢𝑟 Intermédiaire 𝐵𝑎𝑠𝑒= 𝑋 2 − 𝑋 1 𝐻𝑎𝑢𝑡𝑒𝑢𝑟= 𝑌 2 − 𝑌 1

Les entrées/sorties On utilise les fonctions de C « printf » et « scanf » printf(format, data…) printf("Allo le monde"); printf("Allo, mon nom est %s", nom); printf("Allo, mon nom est %s et mon âge est %u", nom, age); Chaîne de caractères représentant le format d’écriture Nom de la fonction Données variables à afficher

Les entrées/sorties Utilisation en assembleur setx format, %l7, %o0 ! On met l’adresse du format dans %o0 mov %l1, %o1 ! On met la première valeur à afficher dans %o1 %l2, %o2 ! On met la 2e valeur à afficher dans %o2 call printf ! On appelle la fonction printf de C nop ! On ne fait rien dans la fente de temporisation format: .asciz  "Entrez un nombre : "

Les entrées/sorties On utilise les fonctions de C « printf » et « scanf » scanf(format, &data…) scanf("%u", &age); Chaîne de caractères représentant le format de la donnée à lire Nom de la fonction Adresse où aller écrire les données lues

Les entrées/sorties Utilisation en assembleur setx format, %l7, %o0 ! On met l’adresse du format dans %o0 x1, %l7, %o1 ! On met l’adresse de la « variable » dans %o1 call scanf ! On appelle la fonction scanf de C nop ! On ne fait rien dans la fente de temporisation format: .asciz "%u" x1: .skip 4

Les entrées/sorties Les formats sont les mêmes pour la lecture et l’écriture Lecture Format Écriture Caractère  Code Ascii %c Code Ascii  Caractère Chaîne  Suite de codes Ascii %s Suite de codes Ascii  Chaîne Entier décimal  Binaire %d Binaire  Entier décimal Entier non signé décimal  Binaire %u Binaire  Entier non signé décimal Entier octal  Binaire %o Binaire  Entier octal Entier hexadécimal  Binaire %x Binaire  Entier hexadécimal Virgule flottante  Binaire %f Binaire  Virgule flottante

Section du code Il y a plusieurs sections dans un programme SPARC « .text » Pour les instructions, en lecture seulement « .rodata » Pour les données en lecture, donc toutes les constantes « .data » Pour les données initialisées « .bss » Pour les données non initialisées, donc les variables

Les commentaires Pour les commentaires sur plusieurs lignes Comme en C/C++/Java/C# /* Ici débute un commentaire sur plusieurs lignes */ Le délimiteur de commentaire pour une ligne Le caractère « ! »

Solution au problème .global Rectangle .section ".text" ! Section des instructions Rectangle: mov 2, %l0 ! Nombre de points à lire setx points, %l7, %l1 rec00: ptfmt1, %l7, %o0 ! Adresse de la chaîne à imprimer 3, %o1 ! Numéro du point = 3 - %l0 sub %o1, %l0, %o1 call printf ! Imprimer le message nop scfmt1, %l7, %o0 ! Adresse du format d’entrée %l1, %o1 ! Adresse de la coordonnée en X scanf ! Lire la coordonnée en X

Solution au problème setx ptfmt2, %l7, %o0 ! Adresse de la chaîne à imprimer mov 3, %o1 ! Numéro du point = 3 - %l0 sub %o1, %l0, %o1 call printf ! Imprimer le message nop scfmt1, %l7, %o0 ! Adresse du format d’entrée inc 4, %l1 ! On avance l’adresse au prochain mot %l1, %o1 ! Adresse de la coordonnée en Y scanf ! Lire la coordonnée en Y ! Avance l’adresse au prochain mot dec %l0 ! On a lu un point brnz %l0, rec00 ! Est-ce qu’il y a un autre point?

Pseudo-instructions Les pseudo-instructions servent à guider le compilateur Commencent toujours par le caractère « . » .section .global .skip

Pseudo-instructions .align 2, 4 ou 8 Alignement sur une frontière .skip 4*8 Réserve de l’espace Ici, 32 octets, soit de l’espace pour 4 mots étendus, 8 mots, 16 demi-mots 8*4 16*2 32 .ascii "suite de caractère" ! Doit se terminer par 0 si c’est une chaîne complète .asciz "chaîne de caractère" ! Est automatiquement terminée par un 0 .byte n Réserve un octet initialisé à la valeur « n » .half Réserve un demi-mot initialisé à la valeur « n » .word Réserve un mot initialisé à la valeur « n » .single Réserve un virgule flottante (mot) initialisé à la valeur « n » .double Réserve un virgule flottante (mot étendu) initialisé à la valeur « n »

Solution au problème .section ".bss" ! Section des données non initialisées .align 4 ! Aligné pour des mots points: .skip 4*4 ! X1, Y1, X2, Y2 ".rodata" ! Section des données en lecture seulement scfmt1: .asciz "%d" ptfmt1: "Entrez la coordonnée en X du point %u : " ptfmt2: "Entrez la coordonnée en Y du point %u : " ptfmt3: .ascii "Le périmètre du rectangle est : %u \n" "La surface du rectangle est : %u \n" ".data" ! Section des données en écriture

Solution au problème setx points, %l7, %l1 ldsw [%l1], %l2 ! Point 1 (X1, …) [%l1+4], %l3 ! Point 1 (…, Y1) [%l1+8], %l4 ! Point 2 (X2, …) [%l1+12], %l5 ! Point 2 (…, Y2) sub %l2, %l4, %l6 ! X1 – X2 %l3, %l5, %l7 ! Y1 – Y2 brgez %l6, rec05 nop neg %l6 ! |X1 – X2| rec05: %l7, rec10 %l7 ! |Y1 – Y2|

Solution au problème rec10: mulx %l6, %l7, %o2 ! Calcul de la surface add %l6, %l6, %l6 ! Deux fois la longueur %l7, %l7, %l7 ! Deux fois la hauteur %l6, %l7, %o1 ! Calcul du périmètre setx ptfmt3, %l7, %o0 ! Adresse de la chaîne de réponse call printf ! Imprimer les résultats nop clr %o0 ! Le programme retourne 0 exit ! Arrêter le programme

Normes de programmation Utilisation des registres Une ligne est divisée en 4 colonnes Étiquette | Mnémonique | Opérandes | Commentaires Les colonnes sont alignées Une seule instruction par ligne Une ligne blanche entre les groupes d’instructions Globaux À éviter le plus possible Locaux Aucune limitation, utilisation intensive Output Limité, ne pas utiliser o6 et o7 Input Dans un sous-programme, détruit les registres O du programme appelant. À n’utiliser que pour les paramètres et les valeurs de retour

Normes de programmation Une étiquette Est seule sur sa ligne pour les instructions Sur la même ligne que la pseudo-instruction pour les données. C’est une suite de caractères qui se termine par « : » À un nom significatif pour les données Commence par les 3 ou 4 premières lettres du point d’entrée, suivi de chiffres Les chiffres vont toujours en ordre croissant d’une étiquette à l’autre Aide à voir l’ordre d’exécution du programme Le plus de commentaires possible après les instructions!