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 |