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

CHAPITRE 6 Exemples de Programmation Exemples de Programmation Microprocesseur 68000.

Présentations similaires


Présentation au sujet: "CHAPITRE 6 Exemples de Programmation Exemples de Programmation Microprocesseur 68000."— Transcription de la présentation:

1 CHAPITRE 6 Exemples de Programmation 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.LD1 Clear D1 for 32-bit dividend MOVE.BD0,D1Copy source to D1 DIVU.W#100,D1 Get 100s digit in D1(0:15) MOVE.WD1,D0Save digit in D0(0:3) SWAPD1Move remainder to D1(0:15) AND.L#$FFFF,D1Clear MSW of D1 DIVU#10,D1Get 10s digit in D1(0:15) LSL.W#4,D0Shift 100s digit one place OR.WD1,D0Insert 10s digit in D0 LSL.W#4,D0Shift digits one place SWAPD1Move remainder to D1(0:15) OR.WD1,D0Insert 1s digit into LSN

5 CLR.LD1D0 = CC, D1 = MOVE.BD0,D1D0 = CC, D1 = CC DIVU.W#100,D1D0 = CC, D1 = MOVE.WD1,D0D0 = , D1 = SWAPD1D0 = , D1 = AND.L#$0FFFF,D1D0 = , D1 = DIVU#10,D1D0 = , D1 = LSL.W#$4,D0D0 = , D1 = OR.WD1,D0D0 = , D1 = LSL.W#$4,D0D0 = , D1 = SWAPD1D0 = , D1 = OR.WD1,D0D0 = , D1 = (204) ---> Un exemple numérique

6 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.WD2 Clear element offset MOVE.W#m,D0 D0 is row counter L2MOVE.W#n,D1 D1 is column counter L1MOVE.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 C = A + B, A, B, C sont des matrices mxn les matrices sont sauvegardée ligne par ligne a 1,1 est à l'adresse A a i,j est à l'adresse A+(i-1)n+j-1 Addition matricielle

7 ONE_CNT MOVEM.L D1-D2,-(A7) Save D1 and D2 CLR.B D1 Clear 1s 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 1s 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 Sous programme pour compter le nombre de 1 dans un octet – D0.B : registre d'entrée/sortie Compteur de '1'

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

9 Cal_RMOVEM.LD6/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 Sous programme

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 linstruction TRAP

11 Instruction TRAP 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 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

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

13 Exceptions Linté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 dappel dune routine système Passer les paramètres de la routine sur la pile move.x,-(a7) … move.x,-(a7) Passer la fonction voulu de l'interruption sur la pile (s'il y en a) move.w #,-(A7) Appeler la routine dexception trap # Récupérer la pile add.l #,a7

15 Exemple Trap #1 A cette commande correspond plus dune 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,A7initialisation de la pile utilisateur leaTAB(PC),a0récupérer ladresse de début de table move.la0,-(A7)passer le premier paramètre à la routine : ladresse de début de table move.w#9,-(A7)fonction 9 de lexception trap#1appel de lexception pour écrire la chaîne de caractères addq.l#6,a7récupération de pointeur de pile trap#0retour au moniteur TABdc.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 ladresse de la routine dinterruption dans la table de vecteurs dinterruptions, la carte MC 1000 met à notre disposition la fonction 5 du « trap #13 ». Deux paramètre à envoyer sur la pile : adresse de la routine dinterruption à implanter (mot long) numéro du vecteur dexception à changer (mot) exemple leaR_INT(PC),a0R_INT… move.la0,-(A7)… move.w#34,-(A7) correspondant à trap #2rte move.w#5,-(A7) trap#13 addq.l#8,a7...

17 Table des adresses de routines dinterruption


Télécharger ppt "CHAPITRE 6 Exemples de Programmation Exemples de Programmation Microprocesseur 68000."

Présentations similaires


Annonces Google