Exemples de Programmation

Slides:



Advertisements
Présentations similaires
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Advertisements

Développement logiciel sur micro-contrôleurs PIC en C
Les procédures et interruptions en Assembleur (Tasm)
ARCHITECTURE INTERNE d’un MICROPROCESSEUR
Portée des variables VBA & Excel
LYCEE MAGHREB ARABE TECHNIQUE
GEF 435 Principes des systèmes d’exploitation
Plan du cours : 2ème Partie
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
La pile un élément essentiel
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Le Concept du programme enregistré
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Les structures de données
Calcul numérique (avec Maple)
Les microprocesseurs A. Objectifs de la séquence:
Système d’exploitation : Assembleur
Système d’exploitation : Assembleur
Système d’exploitation : Assembleur
Chapitre 8 : L’architecture de base des ordinateurs
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
ROLE DES DIFFERENTS ELEMENTS
Système d’exploitation : Assembleur
Récursivité.
Architecture et technologie des ordinateurs II
Gestion des Périphériques
Les piles Djamal Rebaïne.
La récursivité Une procédure est dite récursive si, et seulement si, elle fait appel à elle-même, soit directement soit indirectement Djamal Rebaïne Djamal.
Système d’exploitation : Assembleur
Calcul et implantation des filtres numériques RIF et RII dans un DSP
LE MICROPROCESSEUR 8086/8088 Architecture externe du 8086
Architecture des Ordinateurs
INTRODUCTION AU Février 2008
Chapitre 4.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES SYSTEMES AUTOMATISES
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Environnements d'exécution
Architecture et technologie des ordinateurs II
IFT 6800 Atelier en Technologies d’information
Chapitre 9 Les sous-programmes.
Expressions et affectations
ΜP David Saint-Mellion.
L’essentiel du langage C
L'Unité centrale (CPU) Le CPU doit être rapide (mesuré en temps de CPU) UNITE DE CONTROLE Générer les signaux de control/temps Contrôler le décodage/exécution.
- énergie bornée (tend vers 0 lorsque
Notions de pointeurs en C
Advanced Boolean Equation Language
SIF-1053 Architecture des ordinateurs
Créer des packages.
Les interruptions – Ph. Hoppenot Les interruptions I.Notion d'interruption II.Exemple du 8051 III.Exemple du
3-Présentation d’un µP simple
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
LE TRAITEMENT NUMERIQUE
Chapitre 4 Interruptions
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
Cours LCS N°4 Présenté par Mr: LALLALI
INFOR 101 Chapitre 5 Marianne Morris.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Patricia Renault UPMC 2005/2006
UE MAREP Cours 5 : Structures de contrôle représentées en assembleur
Cours Système LI324 Les Interruptions Cours Système LI324
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
Les instructions de contrôle
Chapitre 3 L’accès aux données.

Chapitre 9 Les caractères.
14/08/2013JC/LP/MD1 TP3 Enoncé. 14/08/2013JC/LP/MD2 Objectif Gérer la liaison série avec la réception en interruption On utilisera le Hardware Vector.
Master 1ère année Sécurité des Systèmes d’Information 1 Programmation en shell.
Transcription de la présentation:

Exemples de Programmation CHAPITRE 6 Exemples de Programmation Microprocesseur 68000

Filtrage d'une partie Utilisation de l'instruction "et logique" exemple : D0.W = xxxx xxxx xabc xxxx (en binaire) AND.W #$0070,D0 D0.W = 0000 0000 0abc 0000 (en binaire) LSR.W #4,D0 D0.W = 0000 0000 0000 0abc (en binaire)

Extension de signe d'une partie D0 contient une donnée signée sur 12 bits D0 = xxxx abcd efgh ijkl LSL.W #4,D0 D0 = abcd efgh ijkl xxxx ASR #4,D0 D0 = aaaa abcd efgh ijkl

Conversion binaire - BCD Exemple : $CC=204 $204 D0.b contient la valeur en binaire D0.w doit contenir la valeur en BCD (3 digits) CLR.L D1 Clear D1 for 32-bit dividend MOVE.B D0,D1 Copy source to D1 DIVU.W #100,D1 Get 100s digit in D1(0:15) MOVE.W D1,D0 Save digit in D0(0:3) SWAP D1 Move remainder to D1(0:15) AND.L #$FFFF,D1 Clear MSW of D1 DIVU #10,D1 Get 10s digit in D1(0:15) LSL.W #4,D0 Shift 100s digit one place OR.W D1,D0 Insert 10s digit in D0 LSL.W #4,D0 Shift digits one place OR.W D1,D0 Insert 1s digit into LSN

Un exemple numérique 11001100 (204) ---> 0010 0000 0100 11001100 (204) ---> 0010 0000 0100 CLR.L D1 D0 = 000000CC, D1 = 00000000 MOVE.B D0,D1 D0 = 000000CC, D1 = 000000CC DIVU.W #100,D1 D0 = 000000CC, D1 = 00040002 MOVE.W D1,D0 D0 = 00000002, D1 = 00040002 SWAP D1 D0 = 00000002, D1 = 00020004 AND.L #$0FFFF,D1 D0 = 00000002, D1 = 00000004 DIVU #10,D1 D0 = 00000002, D1 = 00040000 LSL.W #$4,D0 D0 = 00000020, D1 = 00040000 OR.W D1,D0 D0 = 00000020, D1 = 00040000 LSL.W #$4,D0 D0 = 00000200, D1 = 00040000 SWAP D1 D0 = 00000200, D1 = 00000004 OR.W D1,D0 D0 = 00000204, D1 = 00000004

Addition matricielle C = A + B, A, B, C sont des matrices mxn les matrices sont sauvegardée ligne par ligne a1,1 est à l'adresse A ai,j est à l'adresse A+(i-1)n+j-1 MOVEA.L #A,A0 A0 is base of matrix A MOVEA.L #B,A1 A1 is base of matrix B MOVEA.L #C,A2 A2 is base of matrix C CLR.W D2 Clear element offset MOVE.W #m,D0 D0 is row counter L2 MOVE.W #n,D1 D1 is column counter L1 MOVE.B (A0,D2.W),D6 Get element from A ADD.B (A1,D2.W),D6 Add element from B MOVE.B D6,(A2,D2.W) Store sum in C ADDQ.W #1,D2 Increment element pointer SUB.W #1,D1 Repeat for n columns BNE L1 SUB.W #1,D0 Repeat for m rows BNE L2

Compteur de '1' Sous programme pour compter le nombre de 1 dans un octet – D0.B  : registre d'entrée/sortie ONE_CNT MOVEM.L D1-D2,-(A7) Save D1 and D2 CLR.B D1 Clear 1’s counter MOVEQ #7,D2 D2 points to MSB NXT_BIT BTST D2,D0 Test D2th bit of D0 BEQ.S LP_TST Do nothing if 0 ADDQ.B #1,D1 Else incr 1’s cnt LP_TST SUBQ.B #1,D2 Decr bit pointer BGE NXT_BIT Repeat until done MOVE.B D1,D0 Put count in D0 MOVEM.L (A7)+,D1-D2 Restore D1 and D2 RTS Return

Calcul de R = (P² + Q² )/(P² - Q²) MOVE.W D0,-(A7) Push P MOVE.W D1,-(A7) Push Q PEA R Push reference to R BSR Cal_R Call subroutine ...

Sous programme Cal_R MOVEM.L D6/A6,-(A7) Save working registers LINK A0,#-8 Allocate 8-byte stack frame MOVE.W 22(A0),D6 Get P MULU.W D6,D6 Calc P2 MOVE.L D6,-4(A0) Save on SF MOVE.L D6,-8(A0) Save again MOVE.W 20(A0),D6 Get Q MULU.W D6,D6 Calc Q2 ADD.L D6,-4(A0) Store P2 + Q2 on SF SUB.L D6,-8(A0) Store P2 - Q2 on SF MOVE.L -4(A0),D6 Get P2 + Q2 DIVU.W -6(A0),D6 Calc (P2 + Q2)/(P2 - Q2) LEA 16(A0),A6 Get ptr to addr of R MOVEA.L (A6),A6 Get address of R MOVE.W D6,(A6) Modify R in caller UNLK A0 Deallocate SF MOVEM.L (A7)+,D6/A6 Restore working registers RTS Return

CHAPITRE 7 Exceptions Deux catégories d'exceptions Interruption circuit La requête d'interruption a une source extérieure On ne sait pas à quel moment elles arrivent Suivant le type d'interruption, un programme particulier s'exécute Les interruptions logicielles (exceptions) ont deux origines différentes causé par des événement internes du processeur (division par zéro) explicitement par le programme moyennant l’instruction TRAP

Instruction TRAP Interruption logicielle TRAP Elle fait partie du programme Il y en a plusieurs identifiées par des numéros (0-15) Suivant le numéro, un programme particulier s'exécute Elles ressemblent à un appel à un sous programme La différence : Le programmeur sur une carte complète n'est pas censé de connaître l'adresse de la routine Se gère comme une interruption et non pas comme un sous programme L'adresse des routines d'exception se trouvent dans une table dont l'adresse est fixée par Motorola

Vecteur d'exception A chaque exception correspond une adresse où l'adresse de la routine d'exception est sauvegardée. Numéro du vecteur correspondant 32 33 … 47 Adresse de l'adresse de la routine 32*4=128 33*4=132 … 47*4=188 Exception TRAP #0 TRAP #1 … TRAP #15

Exceptions L’intérêt des TRAP est de débarrasser le programmeur sur les détails du système exemple en TP : TRAP #0 va mettre le système dans un état contrôlé par le PC Le fonctionnement des TRAP dépend du système sur lequel on travail Ainsi les fabricant des cartes (ou des PC) mettent des programmes tous faits à des adresses qu'ils fixent dans la table des vecteurs d'interruption

Les TRAP disponibles sur la carte de TP (MC 1000) Les exceptions disponibles TRAP #0 pour retourner au moniteur TRAP #13 pour exécuter des fonction BIOS (Basic Input/Output System) TRAP #1 pour exécuter les routines des fonctions logiques du système (RDOS RAM/Disk Operating System) Procédure d’appel d’une routine système Passer les paramètres de la routine sur la pile move.x <Pn>,-(a7) … move.x <p1>,-(a7) Passer la fonction voulu de l'interruption sur la pile (s'il y en a) move.w #<Fonct>,-(A7) Appeler la routine d’exception trap #<num> Récupérer la pile add.l #<taille>,a7

Exemple Trap #1 A cette commande correspond plus d’une vingtaine de fonctions. La fonction 9, par exemple, nous permet d’écrire une chaîne de caractères sur l’écran. Le programme ci-dessous en montre un exemple: movea.l #$0FFF000,A7 initialisation de la pile utilisateur lea TAB(PC),a0 récupérer l’adresse de début de table move.l a0,-(A7) passer le premier paramètre à la routine : l’adresse de début de table move.w #9,-(A7) fonction 9 de l’exception trap #1 appel de l’exception pour écrire la chaîne de caractères addq.l #6,a7 récupération de pointeur de pile trap #0 retour au moniteur TAB dc.b "C ’est un test!",13,10,0 13 est le retour chariot, 10 est pour passer à la ligne et 0 pour terminer la chaîne

Changer l'adresse d'une routine d'interruption sur la carte MC1000 Pour changer ou initialiser l’adresse de la routine d’interruption dans la table de vecteurs d’interruptions, la carte MC 1000 met à notre disposition la fonction 5 du « trap #13 » . Deux paramètre à envoyer sur la pile : adresse de la routine d’interruption à implanter (mot long) numéro du vecteur d’exception à changer (mot) exemple lea R_INT(PC),a0 R_INT … move.l a0,-(A7) … move.w #34,-(A7) correspondant à trap #2 rte move.w #5,-(A7) trap #13 addq.l #8,a7 ...

Table des adresses de routines d’interruption