Language assembleur






H  I  N  Z  V  C
| | | | | |
| | | | | --- Carry-Borrow
| | | | ------ Overflow
| | | --------- Zero
| | ------------ Negative
| --------------- Interrupt Mask
------------------ Half Carry
    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
ABCDEFAABBCCDDEE
$f80$f81$f82$f83$f84$f85$f86$f87
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