Académique Documents
Professionnel Documents
Culture Documents
L'adressage immdiat:
=====================
Dans ce mode, l'oprande que l'instruction doit prendre en
compte est situe aprs le code opratoire.
Ex: LDA
#$DF Chargement de A avec la valeur
hexadcimal DF.( le symbole "$" prcise que la donne est en
hexadcimal. Pour les instructions LDa (a: accu quelconque),la
valeur a charger dans l'accu doit tre du mme type que cet
accu (8 bits
pour A,B et 16 bits pour X,Y,U,S,D).
Les instructions de stockage en mmoire ( STa, a: accu du
microprocesseur) n'existent pas en adressage immdiat, car ces
instructions n'agissent que sur la mmoire.
Ce mode d'adressage est utilis pour configurer des
registres (microprocesseur ou RAM) en vue de l'appel ultrieur
d'une routine de l'ordinateur ou bien d'un sous-programme.
L'appel de cette routine se fera
par: JSR
ADRESSE, ADRESSE tant le dbut du sous-programme
(=point d'entre).
JSR (Jump to SubRoutine) est l'assembleur ce que GOSUB est
au BASIC. Un retour de sous-programme se fera par
un RTS(Return of SubRoutine). RTS est l'quivalent
de RETURN sous BASIC.
L'adressage direct:
===================
Ce mode d'adressage permet de travailler sur la mmoire.
L'oprande d'une instruction en adressage direct ne sera
constitue que d'un seul octet registre mmoire sur lequel il
faut agir.
Explications...:
On notera que l'adresssage direct sera spcifi par le
signe "<" plac devant l'oprande, dans la syntaxe assembleur.
Ex: Si le registre de page vaut $A1:
l'instruction STA
<$45 stockera le contenu de
l'accu A en $A145. et de l'oprande (poids faibles, $45).
.
Avec ORG $8000, on va dcider de l'implanter partir de cette adresse dans la partie
utilisateur non commutable de la RAM (voir page 189 guide du TO8). L'assembleur va alors,
automatiquement, se charger de ranger squentiellement le code de
chacune des instructions ou donnes de votre programme
partir de l'adresse $8000.
Notre programme commence donc ainsi:
*affichage d'un caractre graphique mode 320X200 16 couleurs
ORG $8000
PSHS U,Y,X,DP,B,A
*communication mode TO7/70
LDA #$00
STA $E7DC
Les lignes prcdes d'un * sont des commentaires non pris en
compte lors de l'assemblage. On a commenc par sauvegarder
dans la pile systme S, le contenu des
registres U,Y,X,DP,B,A ;c'est une sage prcaution prendre !
Puis le programme choisit le mode TO7/70 en mettant la valeur
0 dans le registre &HE7DC.
*mmorisation adresse 1er octet de l'cran.
LDX #$4000
*calcul adresse de l'octet situ ligne L (coordonne
caractre)
*et colonne C(en coordonne caractre) donn par formule
*adr=$4000+C+(L*8*($28)) avec 0<=L<=24 et 0<=C<=39
LDB COORL
*calcul valeur d'octet pour ligne du dessous
LDA COORL
LDB #$08
MUL
LDA #$28
MUL
LEAX D,X
Cette partie du programme mrite quelques explications. Le
guide du TO8 nous informe page 189 que la mmoire vido
s'tend de l'adresse &H4000 jusqu' &H5FFF; cela nous
intresse.
On va donc ranger dans le registre X de 16 bits la valeur de
l'adresse mmoire du premier segment d'cran en haut gauche.
Mais ce qu'il faut connatre c'est l'adresse mmoire vido qui
correspond un segment quelconque situ colonne Cligne L. La
formule de calcul est fournie en commentaire dans le
programme. On peut la vrifier car si
&H4000+1+(0*&H28)=&H4001.
L'cran contenant 40 segments de 8 points (40=&H28).
FCB
FCB
FCB
FCB
FCB
FCB
FCB
FCB
$FF,$FF,$80,$80,$00,$80
$80,$00,$80,$BC,$7E,$80
$A4,$02,$80,$A4,$06,$80
$A4,$0C,$80,$BC,$18,$80
$A4,$C0,$80,$BD,$80,$80
$A4,$C0,$80,$80,$00,$80
$80,$00,$80,$80,$00,$80
$80,$00,$80,$FF,$FF,$80
END
L'tiquette COORC pointera sur l'adresse &H8100 qui contient
la valeur dcimale (dsigne par &) 15 reprsentant le numro
de colonne, l'tiquette COORL pointera sur
l'adresse &H8101 contenant la valeur 10, puis LOGO pointera
sur l'adresse &H8102contenant la valeur segment du
logo. FCB est une directive d'assemblage qui permet de
rserver un espace de 8 bits pour y ranger une valeur.
Remontons dans la suite de notre programme et crivons les
instructions pour transfrer les donnes.
Donc suite l'instruction STA $E7C3 slectionner la mmoire
forme) on crira
*rcupration et transfert des donnes
LDY #LOGO
LDA #&16
LSUIV
LDB ,Y+
STB ,X+
LDB ,Y+
STB ,X+
LDB ,Y+
STB ,X
On charge dans le registre 16 bits Y l'adresse pointe par
l'tiquette LOGO (cette adresse vaut &H8102) et on se sert du
registre A pour compter les lignes afficher( 16 lignes au
total). On dmarre par l'tiquette LSUIV, une boucle de
transfert de donnes pour chacune des 16 lignes avec 3
segments
par ligne. On met dans B le contenu de l'adresse point par
Y(donc la valeur situe en &H8102 soit $FF) puis on augmente Y
de
1 et la prochaine adresse pointe sera &H8103 qui contient la
seconde valeur soit $FF. On range ensuite la valeur contenue
dans
B l'adresse indiqu par le registre X (celui-ci rappelons le
conserve l'adresse de la mmoire vido). On augmente de 1
l'adresse vido pour pointer sur le segment suivant et on
recommence trois fois la mme opration en augmentant chaque
fois de 1 les registres Y et X pour rcuprer la valeur
suivante du logo et passer la case mmoire vido suivante.
Une fois le troisime segment affich il n'est plus question
de continuer sue la mme ligne mais il faut passer la ligne
du dessous et s'aligner nouveau sur la colonne de gauche.
Pour cela il faut retrouver la bonne adresse vido
correspondante.
LEAX $26,X
DECA
BNE
LSUIV
PULS A,B,DP,X,Y,U
SWI
On fait pointer alors X sur le 1er segment de la ligne du
dessous donc pour obtenir son adresse partir de l'adresse du
3me segment que l'on vient de traiter on ajoute 40 et on
retranche 2 soit ajouter 38 (38 s'crit 26 en hxa). On
diminue de 1 notre compteur de ligne et s'il n'est pas nul on
aura pas fini de
traiter les 16 lignes on recommence la boucle en se branchant
l'endroit du programme dsign par LSUIV (dbut de
la boucle ).
Quand le compteur de ligne est zro le programme se termine,
on rcupre le contenu des registres par PULS et on termine
par l'instruction d'interruption SWI (non pas RTS car on
excutera ce
programme partir de l'assembleur et non pas du Basic).
Rappelons qu'a la suite de l'instruction SWI le listing du
programme n'est pas termin puisque nous avons crit toute
la partie de stockage des donnes vue plus haut. La fin
logique du programme c'est la directive END qui est l pour
l'indiquer.
III-EXECUTION DU PROGRAMME
Le programme ainsi dit s'appelle le programme source.
Il est recommand de le sauvegarder sur disquette avant la
phase d'assemblage. Il sera converti en langage machine par la
commande A (assemblage).
Un assemblage en mmoire permet de le tester. Pour cela
quitter l'diteur et passer en mode moniteur par la touche X.
Une fois dans l'environnement du moniteur le programme se
lance par la commande GO, celle-ci sera tape aprs le
prompt >, sous cette forme: G$8000 (cela signifie lancer le
programme commenant l'adresse &H8000)
Le programme est interrompu ds qu'il rencontre
l'instruction SWI.