Informatique Industrielle 1. Architecture du 80x86-Pentium INFORMATIQUE INDUSTRIELLE TR 1. 1 Informatique Industrielle 1. Architecture du 80x86-Pentium 0. Préambule INFORMATIQUE INDUSTRIELLE : INFORMATIQUE AVEC CONTRAINTE DE TEMPS INFORMATIQUE AVEC PERIPHERIQUES D’E/S INFORMATIQUE AVEC CONTRAINTE DE TEMPS Intervention sur le langage de programmation Le langage assembleur. Intervention sur le système d’exploitation Fonctionnement multitâche. Processus Processus P3 Processus P2 Processus P1 Temps TR 1. Inactif (en sommeil, attente) Actif Changement de contexte (sauvegarde des registres ...) 2 Informatique Industrielle 1. Architecture du 80x86-Pentium Intervention sur l’architecture de la machine Machine parallèle. Processus Processus P3 Processus P2 Inactif (en sommeil, attente) Processus P1 Actif Temps INFORMATIQUE AVEC PERIPHERIQUES D’E/S Ordinateur Adresse physique des ports d'E/S Périphérique analogique Programme Driver Carte Contrôleur de périphérique de périphérique CAN CNA Adresse physique des ports d'E/S Périphérique numérique Programme Driver de périphérique TR 1. Carte Contrôleur de périphérique 3 Informatique Industrielle 1. Architecture du 80x86-Pentium Plan du Cours INFORMATIQUE INDUSTRIELLE (II) + REGULATION (RI) COURS + TP ASSEMBLEUR 80x86-Pentium 1. ARCHITECTURE DU 80x86-Pentium 2. SOUS-PROGRAMMES ASSEMBLEUR SYSTEMES TEMPS REEL 3. SYSTEMES TEMPS RÉEL (TR) PERIPHERIQUES : INTERFACES d’E/S / FILTRAGE 4. TUTORIAL LabWindows/CVI 5. LE PIO 8255 (Interface parallèle) 6. L’UART 8250 (Interface série) 7. FILTRAGE NUMERIQUE TEMPS DIFFERE REGULATION 1. SIMULATION 2. CONTRÔLE d’un processus électrique 3. CONTRÔLE d’un processus électromécanique 4Annexe.CONTRÔLE d’un processus thermique SYSTEMES A DSP - ROBOTIQUE (sous réserve) . SYSTEMES à DSP . ROBOTIQUE PROJET . PROJET TR 1. 4 Informatique Industrielle 1. Architecture du 80x86-Pentium Contrôle des connaissances Projet (II ou RI) + TP. Projet TP 1 si travail satisfaisant, -1 sinon 0 si travail moyen. Note globale TP = +2 si tous TPs OK. Note d’Informatique Industrielle Note Projet + Note globale de TP. Bibliographie [5] H. Nussbaumer « Informatique Industrielle II » PPR [8] A. Schiper « Programmation concurrente » PPR [10] D. Tschirhart « Commande en Temps Réel » Dunod [11] P. Wratil/R. Schmidt « Contrôle mesure régulation sur PC » Radio TR 1. 5 Informatique Industrielle 1. Architecture du 80x86-Pentium 1. ASM 80x86-Pentium : Architecture 1. Architecture du 80x86-Pentium Mémoire Unité d'interface { { Unité d'exécution TR 1. BUS (16 bits) ∑ Queue d'instructions CS DS GS ES SS FS 5 3 1 4 2 Système de contrôle Registres 16 bits BUS (32 bits) EBX EDX EBP EDI EIP EAX ECX ESP ESI EFL Registres 32 bits UAL Registre 16 bits FLAGS 6 Informatique Industrielle 1. Architecture du 80x86-Pentium 2. Registres du 80x86-Pentium AX (2 Octets) EAX 4 Octets (32 bits) AH EBX BH AL ACCUMULATOR 1 Octet (8 bits) BX BL BASE CX ECX CH CL COUNT DL DATA DX EDX DH } Registres généraux } } ESP 4 Octets EBP SP (2 Octets) STACK POINTER BP BASE POINTER ESI SI SOURCE INDEX EDI DI DESTINATION INDEX CS (2 Octets) CODE SEGMENT DS DATA SEGMENT SS STACK SEGMENT ES EXTRA SEGMENT FS GS (4 Octets) EIP EFL OD I T S Z TR 1. A P C Registres pointeurs Registres index } Registres de segment INSTRUCTION POINTER Registre Compteur de programme FLAGS Registre des indicateurs 7 Informatique Industrielle 1. Architecture du 80x86-Pentium 3. La segmentation MEMOIRE RAM REGISTRES MICROPROCESSEUR CS Adresse la plus basse CODE DS SS DONNEES ES PILE Les segments peuvent être : . disjoints . recouverts . partiellement recouverts EXTRA Adresse la plus haute Segmentation de la mémoire centrale (≡ RAM) TR 1. 8 Informatique Industrielle 1. Architecture du 80x86-Pentium Adressage physique Adresse physique sur bus 32 bits : 2 parties : . une partie segment, notée SEGMENT sur 16 bits . une partie offset par rapport au segment SEGMENT, notée OFFSET sur 32 bits. Au total : Adresse = SEGMENT:OFFSET Calcul de l’adrese physique : 15 0 31 Registre segment (16 bits) 0 + = 35 Registre offset (32 bits) 0 Adresse physique (36 bits) Adresse = SEGMENT * 16 + OFFSET TR 1. 9 Informatique Industrielle 1. Architecture du 80x86-Pentium Modes d’adressage Adresse effective MEMOIRE (EBP) (EBX) (ESI) (EDI) (EBP) + MEMOIRE (EBX) + MEMOIRE (ESI) + MEMOIRE (EDI) + MEMOIRE (EBP) + (ESI) (EBP) + (EDI) (EBX) + (ESI) (EBX) + (EDI) (EBP) + (ESI) + MEMOIRE (EBP) + (EDI) + MEMOIRE (EBX) + (ESI) + MEMOIRE (EBX) + (EDI) + MEMOIRE (EIP) (ESP) (EDI) Par rapport au segment DS Interdit DS DS DS SS DS DS DS SS SS DS DS SS SS DS DS CS SS ES 4. Le registre des indicateurs (FLAGS) (4 Octets) OD I T S Z TR 1. A P C FLAGS 10 Informatique Industrielle 1. Architecture du 80x86-Pentium 5. Rangement mémoire La mémoire est indexée octet par octet. Ex. : int TOTO = 256 (Décimal) = 00 00 01 00 (Hexadécimal) Adresse mémoire (offset) (indexée octet par octet) : Donnée 00000000 : 00000001 : 00000002 : 00000003 : 00 01 00 00 6. Implantation de la pile en RAM. Squelette d’un programme assembleur sous Visual C++ . Pile (= LIFO) .Ordres de manipulation de pile : PUSH (empilement) et POP (dépilement). .Le pointeur de pile (Stack Pointer) SP : repère la position courante du sommet de la pile. 4 champs constituent une instruction assembleur : 1. Champ étiquette 2. Champ instruction 3. Champ opérande 4. Champ commentaire Exemple : Empilement de(AX), puis dépilement dans le registre BX. Supposons : (ESP) = 0064FDE4 avant manipulation de la pile TR 1. 11 Informatique Industrielle 1. Architecture du 80x86-Pentium // Squelette d'un pgm assembleur pour Visual C++ // Exemple de manipulation de la pile #include <stdio.h> void main() { // Partie C Les déclarations des données de l'asm se font dans la partie C short int Toto = 255; // Toto = 255 Décimal = 00 FF Hexa unsigned char Titi; printf("\n Toto = % d", (int) Toto); // Partie assembleur Minuscules et majuscules indifférentes __asm { mov push label: mov } ax, Toto ax pop bx Titi, bl // Toto -> AX : (AX) = 255 = 00 FF EtatPile#1 // Empilement de (AX) : (AX) ≡ (AX) EtatPile#2 // Depilement dans BX : (BX) = 00 FF EtatPile#3 // (BL) -> Titi : Titi = 255 = FF // Partie C printf("\n Titi = % d\n", (int) Titi); } Etat de la pile : EtatPile#1 0064FDE4 0064FDE3 0064FDE2 (ESP)+2 (ESP)+1 (ESP) (ESP)-1 (ESP)-2 PUSH AX (ESP) Résultat de l’exécution TR 1. EtatPile#2 00 FF Toto = 255 POP BX EtatPile#3 (ESP) Titi = 255 12 Informatique Industrielle 1. Architecture du 80x86-Pentium 7. Jeu d’instructions (instructions principales) INSTRUCTIONS DE TRANSFERT INSTRUCTIONS SYSTEME MOV PUSH POP XCHG XLAT LEA LDS LES IN OUT LAHF SAHF PUSHF POPF INT INTO IRET HLT WAIT ESC LOCK STC STD STI CLC CLD CLI CMC NOP INSTRUCTIONS LOGIQUES INSTRUCTIONS ARITHMETIQUES SHL SAL SHR SAR ROL RCL ROR RCR NOT TEST AND OR XOR CMP CBW CWD INSTRUCTIONS DE TEST et BRANCHEMENT CALL RET JMP J?? JN? LOOP LOOPE LOOPNE JCXZ REP REPE REPNE ADD ADC INC AAA DAA SUB SBB DEC AAS DAS DIV IDIV AAD MUL IMUL AAM NEG SUFFIXES A, G E B, L C Z O P S INSTRUCTIONS DE CHAÎNES CMPS SCAS LODS STOS MOVS TR 1. 13 Informatique Industrielle 1. Architecture du 80x86-Pentium 9. Exemple de pgm : calcul du maximum d’un vecteur #include <stdio.h> char VECT[5]; char RES; char Chaine; int MaxElemVect; void main (void) { int NbElem = 5; VECT[0] = 2; VECT[1] = 3; VECT[2] = 1; VECT[3] = 7; VECT[4] = 0; // Debut de la partie assembleur __asm { MOV ECX, NbElem ; (ECX)=NbElem DEC ECX MOV ESI, 0 ; i := 0 MOV AL, VECT[ESI] ; (AL) = MAX = VECT[0] INC ESI ; i := 1 NEXT: MOV AH, VECT[ESI] ; (AH) = VECT[i] CMP AL, AH JGE SUP ; MAX >= VECT[i] ? MOV AL, AH ; MAX < VECT[i] (AL) = VECT[i] SUP: INC ESI ; MAX >= VECT[i] i=i+1 LOOP NEXT ; (ECX) = (ECX) - 1 MOV RES, AL ; (AL) → RES } // Fin de la partie assembleur MaxElemVect = RES; printf ("\nElement maximum du vecteur = %d\n\n", MaxElemVect); } TR 1. 14 Informatique Industrielle 1. Architecture du 80x86-Pentium __________ TR 1. 15