1 / 17

CHAPITRE 6 Exemples de Programmation Microprocesseur 68000

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).

bracha
Download Presentation

CHAPITRE 6 Exemples de Programmation Microprocesseur 68000

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 = 0000 0000 0abc 0000 (en binaire) LSR.W #4,D0 D0.W = 0000 0000 0000 0abc (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 SWAP D1 Move remainder to D1(0:15) OR.W D1,D0 Insert 1s digit into LSN

  5. Un exemple numérique 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

  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. Adresse de l'adresse de la routine 32*4=128 33*4=132 … 47*4=188 Numéro du vecteur correspondant 32 33 … 47 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

More Related