INFORMATIQUE INDUSTRIELLE

Transcription

INFORMATIQUE INDUSTRIELLE
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