Language assembleur
| Definition | ||||
|---|---|---|---|---|
H I N Z V C | ||||
| formulaire | ||||
|---|---|---|---|---|
| Nom | AE (adresse effective) | Notation | Exemple | L'information se trouve |
| Directe par registre de donnée | Dm | Dm | D4 | Dans le registre Dm |
| Direct par registre d'adresse | Am | Am | A1 ou SP | Dans le registre Am |
| Absolu court | les 16 bits donnés | Abs.w | 300 | A l'adresse indiquée |
| Absolu long | les 32 bits donnés | Abs.1 | S4F008 | A l'adresse indiquée |
| Immédiat (adressage relatif) | "ICI" | Imm | #10 ou #$10 | "ICI" dans le code |
| Indirect | (Am) | (Am) | (A7) ou (A5) | à l'adresse qui est contenue dans le registre Am |
| Indirect post-incrémenté | (An):An<=An+x | (An)+ | (A7)+ ou (A5)+ | à l'adresse qui est contenue dans le registre An puis An est incrémenté |
| Indirect pré-incrémenté | An<=An+x :(An) | -(An) | -(A7) ou -(A5) | le contenue de An est décrémenté puis on prend son contenue pour trouver l'information |
| Indirecte avec déplacement | (An)+d16 | d(An) | $F5A(A3) | à l'adresse calculée par le contenue de An +d16 |
| Indirecte avec déplacement et index | (An)+(Xn)+d8 | d(An,Xn) | 2(A5,D7) | à l'adresse calculée par le contenue de An +conteneur de Xn + déplacement d8 |
| Relatif au PC avec déplacement | (PC)+d16 | d(PC) | 40(PC) | contenue de PC+d16 |
| Relatif au PC avec déplacement et index | (PC)+d16+(Xn) | d(PC,Xn) | 40(PC,D5) | contenue de PC+ contenue de Xn +d16 |
| Adressage du SR | SR | SR | SR | c'est le SR |
| Adressage du CCR | CCR | CCR | CCR | c'est le CCR |
| quelques exemples : | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| # | adressage relatif | ||||||||||||||||
| $ | adressage absolue | ||||||||||||||||
| (XX) | adressage indirecte | ||||||||||||||||
| (XX)+ | adressage indirecte et modification de l'adressage | ||||||||||||||||
| |||||||||||||||||
| D0[CCCCCCCC] D1[DDDDDDDD] A0[AAAAAAAA] A1[66666666] | |||||||||||||||||
| Move #10,D0 | D0[CCCC000A] | ||||||||||||||||
| Move $f82,D1 | D1[DDDDEFAA] | ||||||||||||||||
| Move #$f84,A0 | A0[00000F84] | ||||||||||||||||
| Move (A0),A1 | A1[0000BBCC] | ||||||||||||||||
| Move (A0)+,D1 | D1[DDDDEFBB] A0[00000F85] | ||||||||||||||||
| structure d'une ligne d'assembleur | ||||
|---|---|---|---|---|
| [etiquette :][instruction[-f]][operande] | ||||
| struc | option | definition | ||
| etiquette : | label | adresse de la ligne dans le programme | ||
| [.f] | -b(byte) -w(word) -l(long) |
équivalent à [.w] si on ne mentionne rien | ||
| quelques instructions | ||||
|---|---|---|---|---|
| ADD | ajouter | _ADD[.f] S,D | D<-D+S | |
| CMP | comparaison | _CMP[.f] S,D | D-S | |
| BRA | b ranch always | BRA etiquette | PC<-D | |
| MOVE | déplacer | (expace) Move[.f]S,D Execution D -S | PC<-D | |
| les insructions Bxx (Branchement conditionnés | ||||
|---|---|---|---|---|
| XX | Branchement si | UNE interprétation de xx | ||
| NE | Z=0 | not equal | ||
| EQ | Z=1 | Equal | ||
| CC | C=0 | Carry clear | ||
| CS | C=1 | Carry set | ||
| VC | V=0 | Overflow clear | ||
| VS | V=1 | Overflow set | ||
| PL | N=0 | Plus | ||
| MI | N=1 | Minus | ||
| quelques instructions | ||||
|---|---|---|---|---|
| jsr | jump sub routine (saut) | JSR [destination] | PILE < -PC -(SP) < PC PC <- destination |
|
| RTS | (revenir au sault) | RTS [destination] PC <-(SP)+ |
on prend le contenue de la pile et on dépile avec le + | |
| DS | data storage | _DS.f [N] | reserve n emplacement au format .f a l adresse ou se situe la ligne | |
| DC | define constand | _DC.f [N,N,Xxxx] | idem que DS et y place N valeurs | |
| ORG N | continue l'assemblage a parit de ladresse N | |||
| END N | termine lassemblage et indique la premier ligne N | Biblio.x.68 appels liés aux entrées/sorties type "texte" (et fin de programme) | ||
| SAISCAR | SAISCAR MOVE #5,D0 TRAP #15 RTS |
attend d une frappe au clavier | ||
| AFFCAR | AFFCAR MOVE #6,D0 TRAP #15 RTS |
afficher à l ecran le caractere dont le code ascii est dans d1 | ||
| FINPRG | FINPRG MOVE #9,D0 TRAP #15 RTS |
fin du programme | ||
| GET_TIME | GET_TIME MOVE #8,D1 TRAP #15 RTS |
recupère le nombre de centième de secondes depuis minuit | ||
| POS_CURS | POS_CURS MOVE #11,D0 TRAP #15 RTS |
positionne le curseur [ligne][colones][00000000][00000000] | ||
| GET_AFFCAR | GET_AFFCAR MOVE #22,D0 TRAP #15 RTS |
récupère le code ASCII du caractère affiché à l'écran | ||
| BIB_PERIPH.x68 appels liés à l'environnement (fenêtre et périphériques) | ||||
| HARDWARE | HARDWARE MOVE #32,D0 TRAP #15 RTS |
console hardware | D1.b=00=>affiche la console D1.b=01=>met l'adresse de l'afficheur 7-segment dans D1.L D1.b=02=>met l'adresse des leds dans D1.L D1.b=03=>met l'adresse des interupteurs dans D1.L | |
| RESOLUTION | RESOLUTION MOVE #33,D0 TRAP #15 RTS |
recupère la resolution dans D1.L (min(640/480)) | D1.L[largeur sur 16 bits|Hauteur sur 16bits] | |
| GET_MOUSE | GET_MOUSE MOVE #61,D0 TRAP #15 RTS |
recupère des informations de la sourie et du clavier (/!\ D1 doit être à zero) | D0.b [ |Ctrl|Alt|Shift|D|Midle|Right|Left] D1.L=[coord Y sur 16bits|Coord X sur 16 bits] | |
| MOUSE_IRQ | MOUSE_IRQ MOVE #60,D0 TRAP #15 RTS |
permet de décider les prises en comptes de la sourie ou non | ||
| BIB_GRAPH.x68 appels liés au Graphisme (la base) | ||||
| SET_PEN_COLOR | SET_PEN_COLOR MOVE #80,D0 TRAP #15 RTS | innitialise la couleur du crayon | D1.L[00BBVVRR] | |
| SET_FILL_COLOR | SET_FILL_COLOR MOVE #81,D0 TRAP #15 RTS | initialise la couleur du remplissage | D1.L[00BBVVRR] | |
| DRAW_PIX | DRAW_PIX
MOVE #82,D0 TRAP #15 RTS | dessine un pixel en X.Y | X=D1.W Y=D2.W |
|
| GET_PIX_COLOR | GET_PIX_COLOR
MOVE #83,D0 TRAP #15 RTS | recupère la couleur du pixel en X.Y | X=D1.W Y=D2.W |
|
| DRAW_LINE | DRAW_LINE
MOVE #84,D0 TRAP #15 RTS | dessine une ligne de X1.Y1 à X2.Y2 | X1=D1.W Y1=D2.W X2=D3.W Y2=D4.W |
|
| DRAW_TO | DRAW_TO
MOVE #85,D0 TRAP #15 RTS | dessine une ligne de la position actuelle à : X.Y | X=D1.W Y=D2.W |
|
| MOVE_TO | MOVE_TO
MOVE #86,D0 TRAP #15 RTS | va se positionner à | X=D1.W Y=D2.W |
|
| DRAW_FILL_RECT | DRAW_FILL_RECT
MOVE #87,D0 TRAP #15 RTS | dessine un rectangle plein de haut droite: X1.Y1 à bas gauche: X2.Y2 | X1=D1.W Y1=D2.W X2=D3.W Y2=D4.W |
|
| DRAW_FILL_ELLIPSE | DRAW_FILL_ELLIPSE
MOVE #88,D0 TRAP #15 RTS | dessine une elipse pleine de haut droite: X1.Y1 à bas gauche: X2.Y2 | X1=D1.W Y1=D2.W X2=D3.W Y2=D4.W |
|
| POT_DE_PEINTURE | POT_DE_PEINTURE
MOVE #89,D0 TRAP #15 RTS | colorie tout les pixel de même couleur et en contact | X=D1.W Y=D2.W |
|
| DRAW_RECT | DRAW_RECT
MOVE #90,D0 TRAP #15 RTS | dessine un rectangle plein avec la couleur du crayon pour le contour de haut droite: X1.Y1 à bas gauche: X2.Y2 | X1=D1.W Y1=D2.W X2=D3.W Y2=D4.W |
|
| DRAW_ELLIPSE | DRAW_ELLIPSE
MOVE #91,D0 TRAP #15 RTS | dessine une elipse pleine avec la couleur du crayon pour le contourde de haut droite: X1.Y1 à bas gauche: X2.Y2 | X1=D1.W Y1=D2.W X2=D3.W Y2=D4.W |
|
| WIDTH_PEN | WIDTH_PEN
MOVE #93,D0 TRAP #15 RTS | defini la largeur du crayon en pixel | dans D1.b | |
| DRAW_STRING | DRAW_STRING
MOVE #95,D0 TRAP #15 RTS | dessine une chaine de caractere dont l'adresse est contenue dans A1 en X.Y | X=D1.W et Y=D2.W /!\ la fonction 22 n'est plus disponible | |
| SWAP_SCREEN | SWAP_SCREEN
MOVE #94,D0 TRAP #15 RTS | affiche à lecran le buffer d'écran virtuel | ||
| DRAW_MODE | DRAW_MODE
MOVE #92,D0 TRAP #15 RTS | defini le mode de dessin suivant D1.b | D1.b=17 Permet de dessiner dans l'écran virtuel D1.b=16 Revient au dessin dans l'ecran actuel D1.b=0 Dessine en Noir D1.b=1 Dessine en Blanc D1.b=2 Dessine ??? D1.b=3 Dessine en inversant la couleur de fond D1.b=5 Dessine en inversant la couleur du crayon D1.b=6 Dessine en inversant la couleur du crayon et un 'OU' logique avec la couleur du crayon D1.b=7 Dessine en inversant la couleur du crayon et un 'ET' logique avec la couleur du crayon |
|
| BIB_FICH.x68 appels liés à la gestion de fichier (une partie) | ||||
| CLOSE_ALL_FILE | CLOSE_ALL_FILE
MOVE #50,D0 TRAP #15 RTS | ferme tout les fichier | (il est recommandé de le faire avant toute manipulation) | |
| OPEN_FILE | OPEN_FILE
MOVE #51,D0 TRAP #15 RTS | ouvre le fichier dont le nom est contenue dans A1 | D1.L = le N° identifiant le fichier | |
| NEW_FILE | NEW_FILE
MOVE #52,D0 TRAP #15 RTS | crée un fichier si le nom est contenue à l'adresse A1 n'est pas trouvé | D1.L = le N° identifiant le fichier | |
| READ_FILE | READ_FILE
MOVE #53,D0 TRAP #15 RTS | Lit D2.L octets dans un fichier dont le N° Identifiant est dans D1.L | résultat dans un buffer dont l'adresse est dans A1 D2.L contient le nbr d'octet réellement lue |
|
| WRITE_FILE | WRITE_FILE
MOVE #54,D0 TRAP #15 RTS | Ecrit D2.L Octets dans un fichier dont le N° Identifiant est dans D1.L | les octets sont pris dans un BUffer dont l'adresse est dans A1 | |
| CLOSE_FILE | CLOSE_FILE
MOVE #56,D0 TRAP #15 RTS | ferme le fichier dont le numéro identifiant est dans D1.L | ||
| DELETE_FILE | DELETE_FILE
MOVE #57,D0 TRAP #15 RTS | efface le fichier dont le nom se trouve à l'adresse contenue dans A1 | ||
| architecture d'un code |
|---|
|
*----------------------------------------------------------- * Title : * Written by : schnellbach * Date : 13/11/2017 * Description: tp2 *----------------------------------------------------------- * DEBUT ORG $400 *PROG PRINCIPALE move.l #15,D1 *0=48 *A=65 SI: CMP #9,D1 BLE ALORS SINON: add #7,D1 ALORS: add #48,D1 JSR AFFCAR BRA FINPRG *fin du programme principale *ssprg1 *rts * [...] include 'Biblio.x.68.X68' *déclaration en .w et .l *//////////////////// *déclaration en .b END $400 |