Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Exemples de Programmation
CHAPITRE 6 Exemples de Programmation Microprocesseur 68000
2
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 = abc 0000 (en binaire) LSR.W #4,D0 D0.W = abc (en binaire)
3
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
4
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
5
Un exemple numérique 11001100 (204) ---> 0010 0000 0100
(204) > CLR.L D1 D0 = CC, D1 = MOVE.B D0,D1 D0 = CC, D1 = CC DIVU.W #100,D1 D0 = CC, D1 = MOVE.W D1,D0 D0 = , D1 = SWAP D1 D0 = , D1 = AND.L #$0FFFF,D1 D0 = , D1 = DIVU #10,D1 D0 = , D1 = LSL.W #$4,D0 D0 = , D1 = OR.W D1,D0 D0 = , D1 = LSL.W #$4,D0 D0 = , D1 = SWAP D1 D0 = , D1 = OR.W D1,D0 D0 = , D1 =
6
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
7
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
8
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 ...
9
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
10
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
11
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
12
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
13
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
14
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
15
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
16
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 ...
17
Table des adresses de routines d’interruption
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.