Cours Architecture des Systèmes Informatiques Jean-Jacques Girardot girardot@emse.fr http://kiwi.emse.fr/ASI/ Troisième séance Instructions et Modes d’Adressage
Instructions et modes d’adressages CPU & Registres Exemples : MAC, une machine virtuelle simplifiée Mémoire & Modes d’adressage Instructions Sémantique Représentation Format des instructions Assembleur
Qu’y a-t-il dans une CPU ? Unité arithmétique et logique Unité de commande Registres spécialisés et généraux données [nombres entiers, nombres flottants] (Data Registers) adresses (Adresses Registers) pointeur d’instruction (PC, Program Counter/IP Instruction Pointer) état du calculateur (PSW, Program Status Word/Flags) pointeur de pile (SP, ou Stack Pointer) …
Déroulement d’un programme Adresse de lancement La première instruction à exécuter Valeur initiale du registre PC (Program Counter) Exécution séquentielle Rangement des instructions en MC par adresses croissantes Branchement (conditionnel ou non) Changer l’adresse de la prochaine instruction à exécuter Exceptions et Interruptions Suspension du déroulement normal d’un programme
Exceptions et Interruptions Évènements qui provoquent l’arrêt du déroulement normal d’un programme Exception (évènement interne) : une opération provoque une erreur Division par zéro Accès à une adresse mémoire incorrecte Code opération invalide, etc. Interruption (évènement externe) : signal extérieur à la CPU Une unité d’E/S termine une opération/est en erreur Le signal “reset” est actionné
Traitement d’une interruption L’évènement est pris en charge par la CPU Différents niveaux selon la nature (16, 256…) ; priorités Différents codes Déroulement : Sauvegarde du “contexte” du programme courant Registres, PC, PSW Exécution du code de gestion de l’interruption Reprise éventuelle du déroulement du programme interrompu L’interruption est alors transparente
Les instructions du calculateur Types d’instructions Opérations de l’unité arithmétique et logique [UAL] Instructions de branchement Branchement conditionnel, inconditionnel Appel & retour de sous-programme Instructions de contrôle diverses Syntaxe des instructions : Langage machine 0xA35002C4 Assembleur LD R5,SD2
Instructions de l’UAL Réaliser des opérations dyadiques op1 op2 op3 [ex: +, -, *, /, &,| , etc.] Architecture de l’UAL Machine à pile empiler, dépiler ; opération sur “sommet” de la pile Machine à “une adresse” et accumulateur/registres A A op RX RX op Machine à deux/trois adresses op1 op1 op2 op1 op2 op3
Machine à pile Accès mémoire Opérations “Empiler” un opérande push “Dépiler un opérande” pull Opérations S’appliquent aux “n” éléments situés en sommet de pile Ex : 98*(12+45)
Machine à accumulateur Un registre spécifique (l’accumulateur) sert aux opérations. op1 op2 op3 se traduit par : Chargement depuis la mémoire : LOAD Écriture en mémoire : STORE Opérations : ADD, SUB, MUL, etc. Les expressions complexes utilisent des “temporaires” (A+B)*(C-D) devient : LOAD A STORE TMP1 SUB D ADD B LOAD C MUL TMP1 LOAD OP2 ADD OP3 STORE OP1
Machine à registres multiples Registres spécialisés/non : données/adresses caractéristiques différentes (taille 32/24 bits) Chaque registre (de données) se comporte comme un accumulateur Opérations registre/mémoire, ou registre/registre (A+B)*(C-D) devient : LOAD R2,A ADD R2,B LOAD R3,C SUB R3,D MUL R2,R3 Architectures RISC (Reduced Instruction Set Computer)
Instructions à adresses multiples Machines anciennes / exotiques taille variable des instructions : 1 à 26 octets… cas des machines CISC “Complex Instruction Set Computer” souvent réalisé par microprogrammation opérations spécialisées déplacement de zones de mémoire conversion de zones de mémoire opérations sur nombres flottants Ex: 8080 et descendants…
SIM, un ordinateur “pédagogique” Une machine imaginaire La CPU 16 registres généraux 16 bits (données & adresses), R0, R1… R15 1 registre programme 16 bits, PC 1 registre d’état 16 bits, PSW : R..POCSZeeeeeeee R : bit “run” : 1 si le calculateur est en marche P : bit “parité” : bit de poids faible du résultat du dernier calcul O : bit “overflow” : dépassement de capacité en complément à 2 C : bit “carry” : retenue en complément à 1 S : bit “signe” : bit de poids fort du résultat du dernier calcul Z : bit “zéro” : 1 si le résultat du dernier calcul est nul eeeeeeee : code d’erreur ou d’interruption Mémoire de 64 ko, adressable en mots (16 bits) ou octets (8 bits)
Les instructions de la machine 2 Formats : court, 16 bits, ou long 32 bits 0 mm ccccc xxxx yyyy 1 mm ccccc xxxx yyyy aaaaaaaaaaaaaaaa bit 0 : format (court 0 ou long 1) bits 1-2 : mode M (3 modes : immédiat 00, direct 01, indirect 10) bits 3-7 : code opération C (32 opérations) bits 8-11 : constante/registre X bits 12-15 : constante/registre Y bits 16-31 : constante/adresse mémoire A
Ex: chargement de registre : 0x01 LD R5,#3 0 00 00001 0101 0011 0153 R5 reçoit la valeur 3 (adressage court immédiat) LD R5,R3 0 01 00001 0101 0011 2153 R5 reçoit le contenu de R3 (adressage court direct) LD R5,(R3) 0 10 00001 0101 0011 4153 R3 désigne un mot de la mémoire, R5 reçoit le contenu de ce mot (indirect) LD.L R5,#0x3F24 1 00 00001 0101 0000 0011111100100100 R5 reçoit la valeur 0x3F24 (adressage long immédiat) 8150 3F24 LD.L R5,0x3F24 1 01 00001 0101 0000 0011111100100100 R5 reçoit la valeur contenue dans le mot d’adresse 0x3F24 (adressage long direct) A150 3F24 LD.L R5,0x3F24(R3)1 10 00001 0101 0011 0011111100100100 R5 reçoit la valeur située dans le mot dont l’adresse est obtenue en ajoutant le contenu de R3 à 0x3F24 (adressage long indexé) C153 3F24
Opérations arithmétiques et logiques (1) Addition : ADD, 0x03. Ex: ADD R2,#8 0328 Soustraction : SUB, 0x04. Ex: SUB R5,R9 2459 Logiques And : AND, 0x07. Ex AND R6,(R11) 476B Or : OR, 0x06. Ex: OR.L R12,MASK A6C01234 Xor: XOR, 0x08. Ex XOR.L R3,#0x8080 88308080 Comparaison Compare: CMP, 0x05. CMP.L R7,MASK(R13) C57D1234
Opérations arithmétiques et logiques (2) Opposé : NEG 0x16. Ex: NEG R2 1620 Décalage arithmétique à gauche : SAL 0x12. (id: SAR 0x13, décalage à droite). Ex: SAL R5,#9 1259 Logiques Not : NOT 0x17. Ex NOT R6 1760 Décalage logique à gauche : SLL 0x10. (id: SLR 0x11). Ex: SLL R5,R9 3059 Décalage circulaire à gauche : SCL 0x14. (id: SCR 0x15). Ex: SCL R5,R9 3459
Opérations arithmétiques et logiques (3) Multiplication & Division MUL 0x18, DIV 0x19. Opèrent sur un couple de registres, R0-R1 : le produit de deux entiers 16 bits est un entier 32 bits. MUL R4 1840 [R0-R1] R0*R4 DIV R4 1940 [R0-R1] R4 [R0-R1] est divisé par R4 ; R0 reçoit le quotient entier, R1 le reste Positionnement des drapeaux du PSW P, S et Z : toutes les opérations arithmétiques et logiques, chargement C et O : opérations arithmétiques ; décalages (C : bit sortant à droite, O : bit sortant à gauche)
Exemple - 1 Calcul de C=(A+5)*(B-1) A est à l’adresse 0x1020, B à l’adresse 0x1044, C en 0x1028 LD.L R0,A A100 1020 ADD R0,#5 0305 LD.L R2,B A120 1044 SUB R2,#1 0421 MUL R2 1820 ST.L R1,C A910 1028 Instruction Store, ST, 0x09 : “décharger un registre” Formats directs et indirects, courts et longs.
Opérations de branchement Instruction unique : Jump, 0x0F. Opération effective : bits 8 à 11. Ex : 0000, branchement inconditionnel Pas de mode d’adressage court immédiat. JMP R3 0 01 01111 0000 0011 2F03 PC reçoit le contenu de R3 (adressage court direct) JMP (R3) 0 10 01111 0000 0011 4F03 R3 désigne un mot de la mémoire, PC reçoit le contenu de ce mot (indirect) JMP.L #0x3F24 1 00 01111 0000 0000 0011111100100100 PC reçoit la valeur 0x3F24 (adressage long immédiat) 8F00 3F24 JMP.L 0x3F24 1 01 01111 0000 0000 0011111100100100 PC reçoit la valeur contenue dans le mot d’adresse 0x3F24 (adressage long direct) AF00 3F24 JMP.L 0x3F24(R3)1 10 01111 0000 0011 0011111100100100 PC reçoit la valeur située dans le mot dont l’adresse est obtenue en ajoutant le contenu de R3 à 0x3F24 (adressage long indexé) CF03 3F24
Branchements conditionnels JEQ : jump si égal 0x1 JEQ R5 2F15 (saut si Z=1) JNE : jump si non égal 0x2 JNE R5 2F25 (saut si Z=0) JG : jump si supérieur 0x3 JGT R5 2F35 (Z=0 et S=0) JL : jump si inférieur 0x4 JLT R5 2F45 (S=1) JGE : supérieur ou égal 0x5 JGE R5 2F55 (S=0) JLE : inférieur ou égal 0x6 JLE R5 2F65 (Z=1 ou S=1) JC : saut si carry 0x8 JC R5 2F85 (C=1) JNC : non carry, 0xA (C=0) JO : overflow, 0x9 (O=1) JNO : non overflow, 0xB (O=0) JP : parity, 0xC (P=1) JNP : non parity, 0xD (P=0)
Exemple - 2 Calcul de C=MAX(A,B) A est à l’adresse 0x1020, B à l’adresse 0x1044, C en 0x1028, le code en0x400 0400 LD.L R0,A A100 1020 0404 CMP.L R0,B A500 1044 0408 JGT 0x410 8F30 0410 040C LD.L R0,B A100 1044 0410 ST.L R0,C A900 1028
Exemple - 3 : PGCD de 2 nombres Algorithme : Nombres dans R2 et R3 Étape 1 : si R2 = R3, alors : R2 est le PGCD ; arrêt du programme. Étape 2 : si R2 > R3, échanger R2 et R3 Étape 3 : soustraire R2 de R3 Étape 4 : revenir à l’étape 1
PGCD : le programme Code placé en 0x1000 TEST: CMP R2,R3 1000 2523 JEQ FIN 1002 8F10 1016 JLT SUITE 1006 8F40 1010 LD R0,R3 100A 2103 LD R3,R2 100C 2132 LD R2,R0 100E 2120 SUITE: SUB R3,R2 1010 2432 JMP TEST 1012 8F00 1000 FIN: ... 1016 ...