LA PROGRAMMMATION EN ASSEMBLEUR J. RIVIERE RESUME L'étude de l'assembleur apporte une compréhension détaillée des mécanismes de l'ordinateur et, de ce fait, constitue un élément fondamental de réflexion sur la manière de programmer en langage évolué, Elle ne saurait donc être omise dans la. formation de l'informaticien. La pratique de l'assembleur s'avère, malgré la puissance des langages évolués, encore indispensable lorsqu' existent des contraintes de temps d e réponse (certains grands programmes, systèmes d'exploitation, compilateurs, temps réel...) ou bien de taille mémoire (minis et moyens ordinateurs). ou encore des contraintes dues à l'insuffisance des ressources logicielles (Fortran, Basic). Par ailleurs, les utilisateurs de la micro-informa,tique trouveront fréquemment dans la pratique de l'assembleur la seule solution à leurs problèmes. Cet ouvrage s'adresse aux étudiants et praticiens qui souhaitent approfondir leurs connaissances en informatique, Constitué de chapitres courts commençant à partir de remarques très simples sur une calculette, il conduit peu à. peu le lecteur, notamment grâce à des exercices corrigés, des notions de base de structure machine à l'étude de l'assembleur et du macro-langage. Il pourra bien évidemment être utilisé comme manuel de référence et d'enseignement concernant la gamme des machines prises pour exemples (séries IBM 370, 3000 et 4000) mais il a été conçu comme un guide général pour conduire sainement toute programmation en assembleur. TABLE DES MATIERES PREMIERE PARTIE 1 GENERALlTES 3 3 5 7 8 8 UNE MACHINE SIMPLE 1.1 Etude d'une calculatrice de poche 1.2 Etude d'une calculatrice avec mémoire 1.3 De la calculatrice à l'ordinateur 1.3.1 Structure des instructions-machine 1.3.2 Mécanisme de reconnaissance et d'enchaînement des Instructions 1.4 Conclusion sur la machine simple 1.5 L'ordinateur, présentation classique 10 11 2 CODAGE DES INFORMATIONS 2.1 Les systèmes de numération 2.2 Les changements de bases 2.3 Intérêt des systèmes hexadécimal et octal 2.4 L'arithmétique en bases 2 et 16 2.5 Représentation interne des données 2.5.1 La mémoire 2.5.2 Représentation des données non numériques 2.5.3 Représentation des données numériques A) La virgule fixe B) La virgule flottante C) Les représentations décimales Exercices 13 14 15 16 17 17 17 18 19 20 23 25 26 3 ADRESSAGE ABSOLU, ADRESSAGE RELATIF 27 3 ADRESSAGE ABSOLU, ADRESSAGE RELATIF 3.1 Généralités 3.2 Adressage basé 3.3 Adressage indexé 3.4 Adressage direct 3.5 Adressage indirect 3.6 Adressage immédiat 27 27 28 29 30 30 31 4 STRUCTVRE DES IBM 360/370 4.1 La mémoire 4.2 Les registres 4.3 Le PSW 4.3.1 Le PSW en mode BC 4.3.2 Le PSW en mode EC 32 32 32 33 33 34 5 LE LANGAGE MACHINE 5.1 Format des instructions-machine 5.2 Catégories d'instructions 5.3 Ecriture d'un programme en langage machine 36 36 38 38 6 LE LANGAGE ASSEMBLEUR 6.1 Caractéristiques des langages assembleurs 6.2 Définitions 6.3 Le processus d'assemblage 6.3.1 Le compteur d'emplacements 6.3.2 Adressage symbolique et références absolues 6.3.3 La table des symboles 6.3.4 Assemblage d'une instruction 6.4 Phases d'exécution d'un programme 42 42 43 43 44 45 45 46 47 DEUXIEME PARTIE L'ASSEMBLEUR 360/370 7 ELEMENTS DE BASE 7.1 Généralités et présentation du programme 7.2 Eléments du langage assembleur 7.2.1 Les valeurs d'auto-définition 7.2.2 Les littéraux 7.2.3 L'attribut-longueur 7.3 Les expressions 51 51 52 53 53 54 55 8 DIRECTIVES DE DEFINITION DE SYMBOLES 8.1 Définition de constante DC 8.2 Les constantes d'adresse 8.3 Directive de réservation de mémoire DS 8.4 Directive d'équivalence EQU Exercices 58 58 62 64 65 66 9 ECRITURE DES ADRESSES EN ASSEMBLEUR 9.1 Base implicite, base explicite 9.2 Ecriture des facteurs 9.3 Règles d'alignement Exercices 67 67 68 69 71 10 LES INSTRUCTIONS EN ASSEMBLEUR – GENERALITES 10.1 Notation 10.2 Codes-opération mnémoniques 72 72 73 11 ARITHMETIQUE EN VIRGULE FIXE ET MOUVEMENTS 11.1 Chargement et rangement des registres généraux LR, L, LH, LCR, LPR, LNR, LTR, LM, LA, IC, ICM ST, STH, STM, STC, STCM 11.2 Instructions d'arithmétique en virgule fixe 75 75 11.3 AR, A, AH, SR, S, SH, MR, M, MH, DR, D Les comparaisons en virgule fixe CR, C, CH Addition et soustraction « logiques» ALR, AL, SLR, SL 11.5 Mouvements MVI, MVC, MVCL, MVN, MVZ, MVO Exercices 11.4 12 LES BRANCHEMENTS 12.1 Le code-condition 12.2 Instructions testant le CC : BCR et BC 78 80 80 81 83 84 84 84 12.2 13 Instructions testant le CC : BCR et BC Mnémoniques étendus 12.3 Instructions testant la valeur prise par un registre BCTR, BCT,BXHet BXLE 12.4 Branchements avec retour BALR,BAL,EX Exercices 84 LES OPERATIONS LOGIQUES 13.1 Les fonctions logiques 13.2 Les instructions logiques Intersection NR, N, NI, NC Réunion OR, O, OI, OC Disjonction XR, X, XI, XC 13.3 Les comparaisons logiques CLR, CL, CLI, CLC, CLM, CLCM 13.4 Les comparaisons logiques particulières CS, CDS, TM Exercices 90 90 90 91 91 92 93 86 88 89 94 95 14 LES DECALAGES 14.1 Instructions «logiques» et instructions «arithmétiques» 14.2 Décalages algébriques 14.3 Décalages «logiques» 14.4 Instructions de décalages Décalages algébriques : SLA, SLDA, SRA, SRDA Décalages logiques : SLL, SLDL, SRL, SRDL Règles communes aux décalages logiques et algébriques Exercices 97 97 97 99 99 99 99 100 100 15 PROBLEMES 15.1 Tri 15.2 Consultation dichotomique d'une table 101 101 104 16 L'ARITHMETIQUE DECIMALE 16.1 Généralités 16.2 Les instructions AP,ZAP,SP,MP,DP,CP,SRP 108 108 109 17 L'ARITHMETIQUE FLOTTANTE 17.1 Généralités 17.2 Instructions LER, LE, LDR, LD, LTBR, LTDR, LCER, LCDR, LCDR, LRER, AER,AE,ADR,AD,AXR, AUR, AU, AWR, AW, SER, SE, SDR, SD, SXR SUR, SU, SWR, SW, MER,ME,MDR,MD,MXDR,MXD, MXR, DER, DE, DDR, DD, HER, HDR STE, STD, CER, CE, CDR,CD 111 111 112 18 INSTRUCTIONS DE CONVERSIONS DE REPRESENTATIONS 18.1 Généralités 18.2 Instructions de conversion PACK, UNPK, CVB, CVD 18.3 Edition ED, EDMK 18.4 Traduction TR, TRT Exercices 114 114 115 116 117 118 19 INTERRUPTIONS ET ENTREES-SORTIES 19.1 Interruptions 19.1.1 Principe des interruptions 120 120 120 19.1.2 19.1.3 19.1.4 19.1.5 19.2 20 Mécanisme des interruptions Masque des interruptions Les interruptions dues au programme Instructions liées aux interruptions SPM, SVC, MC, STCK, TS Les entrées-sorties 19.2.1 Définitions et mécanismes 19.2.2 Informations nécessaires à une entrée-sortie 19.2.3 Entrée-sortie au niveau logique DIRECTIVES CONCERNANT L'ADRESSAGE ET LA STRUCTURE D'UN PROGRAMME 20.1 Définition et chargement des registres de base A) USING B) Chargement des registres de base C) DROP 120 121 121 123 124 124 125 126 128 128 128 130 131 20.2 20.3 20.4 20.5 Sectionnement des programme 20.2.1 Symboles internes, symboles externes 20.2.2 Directives de sectionnement START,CSECT,DSECT,COM 20.2.3 Edition de liens 20.2.4 Chargement 20.2.5 Communication entre sections d'un même module source 20.2.6 Conclusion sur le sectionnement Directives affectant le compteur d'emplacements ORG, LTORG, CNOP. Directives de contrôle du listing ICTL, ISEQ, COPY, EJECT, SPACE, PRINT, TITLE, PUNCH, REPRO Directives utilisables sous OS seulement PUSH,POP 131 131 132 135 136 137 138 140 140 141 21 LES SOUS-PROGRAMMES 21.1 Sous-programme et section de contrôle 21.2 Branchement à un sous-programme et retour 21.3 Passation de paramètres 21.4 Conventions de liaisons entre le système et le programme 142 143 143 144 147 22 ASSEMBLAGE CONDITIONNEL ET MACRO-INSTRUCTIONS 22.1 Assemblage conditionnel 22.1.1 Variables et constantes d'assemblage conditionnel 22.1.2 Les noms d'étiquettes 22.1.3 Directives d'affectation SETx 22.1.4 Directives de branchement à des étiquettes d'assemblage AIF, AGO 22.1.5 Directive ANOP 22.1.6 Exemples d'utilisation de l'assemblage conditionnel 22.2 Les macro-procédures 22.2.1 Transmission d'arguments 22.2.2 Application 22.2.3 La directive MEXIT 22.2.4 La directive ACTR 22.2.5 La directive MNOTE 22.2.6 Les commentaires 22.2.7 Les fonctions intrinsèques &SYSLIST, &SYSNDX, &SYSECT, &SYSPARM, &SYSTIME,&SYSDATE 22.2.8 Les attributs Type T', Longueur L', Partie entière l', Nombre de caractères N', Nombre d'éléments d'une liste N', Longueur L', Facteur d'échelle S' 22.2.9 Exemples de macro-définitions 152 152 152 153 154 156 CONSEILS DE PROGRAMMATION 23.1 Structure d'un traitement 23.1.1 Programmation modulaire 167 167 167 23 156 156 157 158 159 159 159 160 160 160 162 164 23.1.2 Présentation et mise en page Structure d'un module 23.2.1 Prologue et épilogue 23.2.2 Corps du programme 167 168 168 168 Conclusion 170 CORRIGES DES EXERCICES ANNEXES Table de codage des caractères Index alphabétique des instructions Directives de l'assembleur Caractéristiques des constantes Mnémoniques étendus 173 179 180 182 185 185 186 23.2 23.3 BIBLIOGRAPHIE INDEX TOP 187 189