La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Instructions Types dinstructions Séquencement Contrôle BUS SYSTÈME Registres Unité de Traitement Unité de Traitement Unité Flottante Unité de Contrôle.

Présentations similaires


Présentation au sujet: "Instructions Types dinstructions Séquencement Contrôle BUS SYSTÈME Registres Unité de Traitement Unité de Traitement Unité Flottante Unité de Contrôle."— Transcription de la présentation:

1 Instructions Types dinstructions Séquencement Contrôle BUS SYSTÈME Registres Unité de Traitement Unité de Traitement Unité Flottante Unité de Contrôle Unité de Contrôle Décodeur PC ALU CPU MÉMOIRE PRINCIPALE MÉMOIRE PRINCIPALE IO Cache Données Cache Instructions

2 Contrôle de lunité de traitement UNITÉ DE CONTRÔLE OEN SEL AL[2:0] SH[2:0] RA[2:0] RB[2:0] WEN WA[2:0] Z0 OEN SEL AL[2:0] SH[2:0] RA[2:0] RB[2:0] WEN WA[2:0] OPÉRATIONOPÉRANDES RA WA RB WEN I0I0 I1I1 Z SHIFTER R0R1R2R3R4R5R6R7 SH2 SH1 SH0 AL2 AL1 AL0 OEN SEL Z0 1 0 INPORTOUTPORT 3 3 3

3 Contrôle par instructions - Décodage 0:R14:R1,R3,R4 1:R0,R2 5:R2,R4,R2 2:R0,R3 6:R1,R1 3:7:R2 0:A IN4: C A&B 1:B A 5: C A+B 2:B A+16: B A>>1 3:NOP7: OUT A 0:0|14:5 1:25:6 2:36:7|4 3:47:0 0:data inport 1:ocount 0 2:mask 1 3:while data 0 4:temp data AND mask 5:ocount ocount+temp 6:data data >> 1 end while 7:outport ocount SLC CKCK n BASCULES Opcode Opérandes n BASCULES Opcode Opérandes Fanions RAM Contrôle SLC Opérandes Instruction Adresse Chaque instruction doit permettre de générer les bits de contrôle pour lunité de traitement ainsi que ladresse de linstruction suivante.

4 Format des instructions: exemple Le codage des instructions est, en général, arbitraire: OPCODE OPER1 OPER2 OPER3 LOAD ADR, R Adresse[5:0] MOVE R0, R ø ø ø INC R0, R ø ø ø BRAADR, COND Adresse[5:0] data=0 AND R1, R3, R ADDR2, R4, R SHRR1, R ø ø ø BRAADR, COND Adresse[5:0] vrai STORE ADR, R Adresse[5:0] 0 1 0

5 Compilation program toto; var A, B, C : array [ ] of integer; i : integer begin... for i:=1 to 1000 do C[i] := A[i] + B[i];... end program toto; var A, B, C : array [ ] of integer; i : integer begin... for i:=1 to 1000 do C[i] := A[i] + B[i];... end Algorithme Langage de haut-niveau Langage machine = jeu dinstructions Algorithme Langage de haut-niveau Langage machine = jeu dinstructions COMPILATEUR... MOVE.L#2001,A0 MOVE.L#3001,A1 MOVE.L#4001,A2 START:ABCD-(A0),-(A1) MOVE.B(A1),(A2) TEST:CMPA#1001, A0 BNESTART... MOVE.L#2001,A0 MOVE.L#3001,A1 MOVE.L#4001,A2 START:ABCD-(A0),-(A1) MOVE.B(A1),(A2) TEST:CMPA#1001, A0 BNESTART...

6 Opération du processeur - Opcodes Un processeur non-spécialisé (general-purpose) doit avoir un jeu dinstructions qui soit: Complet: il doit pouvoir exécuter toute fonction calculable; Efficace: il doit exécuter rapidement les fonctions les plus utilisées; Régulier: il doit contenir les fonctions attendues (p.ex., sil y a un décalage à gauche, il doit y avoir un décalage à droite); Compatible?: si nécessaire, il doit être compatible avec le jeu dune machine existante. Tout algorithme est réalisé par une séquence (série) dinstructions.

7 Boucle de traitement Début Instructions en attente? Instructions en attente? Chargement Décodage Interruptions en attente? Interruptions en attente? Traitement OUI NON OUI Les instructions sont stockées en mémoire, comme nimporte quelle donnée. À chaque instruction correspond donc un adresse. Chaque instruction est chargée dans le processeur, décodée pour déterminer sa fonction et les bits de contrôle pour lunité de traitement sont générés en conséquence. Lunité de traitement effectue lopération désirée sur les données. Si une interruption est en attente, elle a normalement précédence sur les instructions, et elle est donc traitée immédiatement.

8 Types dinstructions - Opcode Transfert de données Transferts dinformations entre positions mémoire (interne ou externe au processeur) Arithmétique Opérations sur données numériques Logique Opérations booléennes et autres Entrées/sorties (I/O) Transferts dinformations entre le processeur ou la RAM et les unités externes Contrôle Instructions qui modifient le flot dinstructions

9 Format des instructions: exemple data inport= LOAD ADR, R1[T] ocount 0= MOVE R0, R2[T] mask 1= INC R0, R3[A] while data 0 = BRACOND, ADR [C] temp data AND mask= AND R1, R3, R4[L] ocount ocount + temp= ADDR2, R4, R2[A] data data >> 1= SHRR1, R1[L] end while= BRA1, ADR[C] outport ocount= STORE ADR, R2[T]

10 Format des instructions Beaucoup dinformation! P.ex., une architecture avec 256 instructions, 16 fanions, 64 registres et un bus (adresse) de 32 bits aurait besoin, même si tous les opérandes sont des registres (ce qui nest pas le cas), de x3 + 32x2 = 94 bits! Une solution est de coder les instructions sur plusieurs mots mémoire. Ce fut une technique très utilisée dans le passé (processeurs 8 et 16 bits) et le reste aujourdhui pour certains types dinstructions. Elle introduit cependant beaucoup de délai (plusieurs coups dhorloge par instruction, décodage complexe). Des simplifications sont nécessaires! Opcode Conditions Opérandes (3) Prochaine(s) instruction(s)

11 Format des instructions - Simplifications Première simplification: chaque type dinstruction nécessite des informations différentes. Transferts de données: 78 bits (un opérande peut être une adresse) Opérations arithmétiques et logiques: 58 bits (que des registres) Opérations dentrée/sortie: 78 bits (un opérande peut être une adresse) Instructions de contrôle: 76 bits Opcode Opérandes (2) Prochaine instruction Opcode Opérandes (3) Prochaine instruction Opcode Opérandes (2) Prochaine instruction Opcode Conditions Prochaine(s) instruction(s)

12 SL CKCK n BASCULES Opcode Opérandes n BASCULES Opcode Opérandes Fanions RAM Contrôle SLC Opérandes Instruction Adresse Format des instructions - Simplifications Deuxième simplification: par défaut, on peut définir la prochaine instruction comme étant linstruction suivante en mémoire. 0:+1|04:+1 1:+15:+1 2:+16:+1|4 3:+17:0 0:data inport 1:ocount 0 2:mask 1 3:while data 0 4:temp data AND mask 5:ocount ocount+temp 6:data data >> 1 end while 7:outport ocount

13 Séquenceur CKCK n BASCULES Opcode Opérandes n BASCULES Opcode Opérandes Fanions RAM Contrôle SLC Opérandes Instruction Adresse CKCK Séquenceur CKCK Opérande SLC Opcode Condition Fanions +1 Adresse PC

14 Format des instructions - Simplifications Transferts de données: 46 bits (un opérande peut être une adresse) Opérations arithmétiques et logiques: 26 bits (que des registres) Opérations dentrée/sortie: 46 bits (un opérande peut être une adresse) Instructions de contrôle: 44 bits Toujours trop grandes! Il faut trouver dautres simplifications. Opcode Opérandes (2) Opcode Opérandes (3) Opcode Opérandes (2) Opcode Condition Prochaine instruction

15 Les opérations arithmétiques et logiques peuvent, en théorie, être effectuées directement sur des données en mémoire (CISC): add adr1,adr2,adr3 (8+32x3=104 bits!) En pratique, pour simplifier le contrôle du processeur, ce type dopérations est toujours fait avec des données préalablement placées dans les registres du processeur (RISC): add rx,ry,rz (8+6x3=26 bits) Grâce à cette approche, 32 bits sont normalement suffisants pour stocker une instruction complète. Pour des processeurs plus petits (16 bits), on peut toujours réduire le nombre dopérandes à deux: move rx,rz add ry,rz Opérations arithmétiques et logiques

16 Transferts de données et I/O Pour les transferts de données et pour le traitement des entrées/sorties, on ne peut pas se passer de références à la mémoire principale. Linstruction doit coder soit les données elles-mêmes, soit des indications sur comment lunité de traitement peux les retrouver. Encore une fois, les transferts de données peuvent, en théorie, être effectués directement sur des adresses mémoire: move adr1,adr2 (8+32x2=72 bits) En pratique, pour simplifier le contrôle du processeur, un des opérandes (la source ou la destination, indifféremment) dans ce type dopérations est toujours un des registres du processeur: move adr,rx ( =46 bits) Cette approche réduit le nombre de bits nécessaires pour codes ces instructions, mais pas suffisamment. Le problème est résolu (plus ou moins) par lutilisations de modes dadressage.

17 Modes d'adressage Pour les transferts de données et pour le traitement des entrées/sorties, on suppose donc que lun des opérandes est un registre. Lautre opérande doit coder soit les données elles-mêmes, soit leur emplacement dans la mémoire principale (adresse). Petit exemple: MAX = 100; CNTR = MAX/2; ARR = MALLOC(MAX*sizeof(INT)); START_VAL = *(ARR); END_VAL = *(ARR + 100); CNTR_VAL = *(ARR + CNTR); START = ARR; END = ARR + MAX; FOR (I=0; I

18 Adressage immédiat Si les données sont stockées directement dans l'instruction elle-même, on parle dadressage immédiat ou littéral: move data,rx Il faut remarquer que les données de ce type dinstruction ont forcément une taille limitée par largeur de linstruction (dans notre exemple, = 18 bits). Dans notre exemple: MAX = 100; Opcode Data Destination (Rx)

19 Adressage par registre Les données peuvent être préalablement stockées dans un des registres du processeur. On parle dans ce cas dadressage par registre: move ry,rx Les données dans ce type dinstructions ont une taille égale à la largeur des registres. Dans notre exemple: CNTR = MAX/2; Opcode Source (Ry) Banc des registres Banc des registres Opérande Destination (Rx)

20 Adressage direct Si le deuxième opérande doit indiquer lemplacement des données en mémoire principale, on peut coder directement ladresse dans linstruction. On parle dans ce cas dadressage direct ou absolu: move adr,rx La taille des adresses est ici limitée par la largeur de linstruction. Les bits restants sont implicites (ajoutés par la MMU). Ce mode d'adressage est très rarement utilisé dans les programmes écrits par l'utilisateur. Par contre, il est très commun dans les OS: ARR = MALLOC(MAX*sizeof(INT)); Opcode Source (adresse) MMU Mémoire Opérande Destination (Rx)

21 Adressage indirect par registre Lemplacement (adresse) des données en mémoire principale peut aussi être préalablement stocké dans un des registres du processeur. On parle dans ce cas dadressage indirect par registre: move (ry),rx Les adresses dans ce type dinstructions ont une taille égale à la largeur des registres. Dans notre exemple: START_VAL = *(ARR); Opcode Source (Ry) Banc des registres Banc des registres Adresse Mémoire Opérande Destination (Rx)

22 Adressage indirect via mémoire Lemplacement (adresse) des données en mémoire principale peut être lui-même stocké en mémoire principale. On parle dans ce cas dadressage indirect via mémoire: move (adr),rx Opcode Source (adresse) Mémoire Adresse Opérande MMU Destination (Rx) La taille des adresses est ici limitée par la largeur de linstruction. Les bits restants sont implicites (ajoutés par la MMU). Comme l'adressage direct, ce mode d'adressage est très rarement utilisé dans les programmes écrits par l'utilisateur mais il est très commun dans les OS.

23 Adressage avec déplacement Lemplacement (adresse) des données en mémoire principale peut être défini comme un déplacement (offset) par rapport à une adresse de base stockée dans un des registres. Si le déplacement est stocké dans l'instruction, on parle dadressage avec déplacement ou basé: move dpl(ry),rx Opcode Banc des registres Banc des registres Adresse Mémoire Opérande Offset + + Base (Ry) Destination (Rx) La taille des adresses est égale à la largeur des registres. Par contre, la taille du déplacement est limitée par la taille de l'instruction. Dans notre exemple: END_VAL = *(ARR + 100);

24 Adressage indexé Lemplacement (adresse) des données en mémoire principale peut être défini par la somme dune adresse de base stockée dans un registre et dun déplacement (index) stocké dans un autre registre. On parle dans ce cas dadressage indexé: move (ry+rz),rx Opcode Banc des registres Banc des registres Adresse Mémoire Opérande Base (Ry) + + Offset Index (Rz) Destination (Rx) Les adresses et le déplacements dans ce type dinstructions ont une taille égale à la largeur des registres. Dans notre exemple: CNTR_VAL = *(ARR + CNTR);

25 Adressage auto-incrémenté Pour parcourir une série de positions mémoire successives (p.ex. lors de laccès à une table), il est utile dincrémenter une adresse avant ou après chaque accès. Il s'agit de ladressage auto-incrémenté. Post-incrément: move (ry)+,rx Opcode Source (Ry) Banc des registres Banc des registres Adresse Mémoire Opérande + + Taille de la donnée Destination (Rx) Les adresses dans ce type dinstructions ont une taille égale à la largeur des registres. Dans notre exemple: BOTTOM_HALF += *(START); START += sizeof(INT);

26 Adressage auto-décrémenté Pour parcourir une série de positions mémoire successives à partir de la fin, il est utile de décrémenter une adresse avant ou après chaque accès. On parle dans ce cas dadressage auto-décrémenté. Pre-décrément: move -(ry),rx Opcode Source (Ry) Banc des registres Banc des registres Adresse Mémoire Opérande Taille de la donnée - - Destination (Rx) Les adresses dans ce type dinstructions ont une taille égale à la largeur des registres. Dans notre exemple: TOP_HALF += *(END-sizeof(INT));

27 Petit exemple bien compliqué program toto; var A, B, C : array [ ] of integer; i : integer begin for i:=1 to 1000 do C[i] := A[i] + B[i]; end... MOVE.L#2001,A0 Charger ladresse 2001 dans le registre A0 (pointeur sur le vecteur A) MOVE.L#3001,A1 Charger ladresse 2001 dans le registre A1 (pointeur sur le vecteur B) MOVE.L#4001,A2 Charger ladresse 2001 dans le registre A2 (pointeur sur le vecteur C) START:ABCD-(A0),-(A1) Décrémenter le contenu de A0 et A1 (adresses), puis additionner les données (1 byte BCD) MOVE.B(A1),-(A2) Décrémenter A2 et stocker le résultat (1 octet) dans le vecteur C TEST:CMPA#1001, A0 Comparer le contenu de A0 (adresse) avec 1001; Z=1 si les deux valeurs sont égales, Z=0 sinon BNESTART Sauter à START si Z nest pas égal à 1...

28 Les instructions de contrôle (essentiellement des branchements) doivent nécessairement indiquer une adresse (la cible du branchement): if (cond) then [continue] else [branche] En théorie, cette cible pourrait être nimporte quelle position mémoire. En pratique, dans la grande majorité des cas, il sagit dun saut à une instruction dont la position mémoire est relativement proche de linstruction qui est en train de sexécuter. Par conséquent, le mode dadressage couramment utilisé pour les instructions de contrôle est ladressage par déplacement, où la base est définie implicitement comme étant le PC. Instructions de contrôle Opcode Condition Adresse cible Opcode Condition Offset

29 Séquenceur CKCK n BASCULES Opcode Opérandes n BASCULES Opcode Opérandes Fanions RAM Contrôle SLC Opérandes Instruction Adresse CKCK Branchement par déplacement 0:+1|+04:+1 1:+15:+1 2:+16:+1|-2 3:+17:-7 0:data inport 1:ocount 0 2:mask 1 3:while data 0 4:temp data AND mask 5:ocount ocount+temp 6:data data >> 1 end while 7:outport ocount

30 Séquenceur CKCK n BASCULES Opcode Opérandes n BASCULES Opcode Opérandes Fanions RAM Contrôle SLC Opérandes Instruction Adresse CKCK Séquenceur CKCK Offset SLC Opcode Condition Fanions +1 Adresse + PC


Télécharger ppt "Instructions Types dinstructions Séquencement Contrôle BUS SYSTÈME Registres Unité de Traitement Unité de Traitement Unité Flottante Unité de Contrôle."

Présentations similaires


Annonces Google