COURS 4.TXT/fr: Difference between revisions

From Atari Wiki
Jump to navigation Jump to search
No edit summary
m (Olivier.jan moved page COURS 4.TXT to COURS 4.TXT/fr: Renaming for language version)
 
(11 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  +
{{Languages|COURS 4.TXT}}
 
<pre>
 
<pre>
 
******************************************************************
 
******************************************************************
Line 4: Line 5:
 
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
 
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST *
 
* *
 
* *
* par Le F�roce Lapin (from 44E) *
+
* par Le Féroce Lapin (from 44E) *
 
* *
 
* *
* Cours num�ro 4 *
+
* Cours numéro 4 *
 
* *
 
* *
 
******************************************************************
 
******************************************************************
   
 
Nous allons aborder maintenant les registres d'adresse. Tout comme
 
Nous allons aborder maintenant les registres d'adresse. Tout comme
les registres de donn�es, ces registres sont cod�s sur 32 bits (un
+
les registres de données, ces registres sont codés sur 32 bits (un
long mot). Donc priori aucune diff�rence, puisque le micro-pro-
+
long mot). Donc à priori aucune différence, puisque le micro-pro-
cesseur ne conna�t que des chiffres, que ceux-ci repr�sentent des
+
cesseur ne connaît que des chiffres, que ceux-ci représentent des
donn�es ou des adresses, peu lui importe. C'est vrai en grande
+
données ou des adresses, peu lui importe. C'est vrai en grande
 
partie et d'ailleurs sur certains micro-processeurs, il n'y a
 
partie et d'ailleurs sur certains micro-processeurs, il n'y a
qu'un ou deux registres, qui peuvent contenir indiff�remment
+
qu'un ou deux registres, qui peuvent contenir indifféremment
adresse ou donn�es.
+
adresse ou données.
   
Voyons, gr�ce un exemple, les diff�rences en ce qui concerne le
+
Voyons, grâce à un exemple, les différences en ce qui concerne le
 
68000 MOTOROLA.
 
68000 MOTOROLA.
   
Tapons donc le programme suivant, apr�s avoir, bien s�r, effac�
+
Tapons donc le programme suivant, après avoir, bien sûr, effacé
 
l'ancien, et assemblons.
 
l'ancien, et assemblons.
   
Line 33: Line 34:
   
 
L'assembleur note 2 erreurs et nous les annonce par 'invalid size
 
L'assembleur note 2 erreurs et nous les annonce par 'invalid size
at line 4' et la m�me chose pour 'line 6'. Puisque c'est la taille
+
at line 4' et la même chose pour 'line 6'. Puisque c'est la taille
et non l'op�ration elle-m�me qui semble poser probl�me, nous en
+
et non l'opération elle-même qui semble poser problème, nous en
d�duisons que le MOVE vers ou partir d'un registre d'adresse,
+
déduisons que le MOVE vers ou à partir d'un registre d'adresse,
 
n'est pas possible sur un byte. Rectifions donc la ligne 4 et la
 
n'est pas possible sur un byte. Rectifions donc la ligne 4 et la
ligne 6 en rempla�ant les MOVE.B par des MOVE.W et r�-assemblons.
+
ligne 6 en remplaçant les MOVE.B par des MOVE.W et -assemblons.
   
Note: Lorsque l'assembleur note une erreur, il donne la ligne o�
+
Note: Lorsque l'assembleur note une erreur, il donne la ligne
se situe celle-ci. Dans cette num�rotation les lignes vides sont
+
se situe celle-ci. Dans cette numérotation les lignes vides sont
compt�es.
+
comptées.
   
Ainsi si vous aviez pass� une ligne apr�s MOVE.L #$12345678,D0 les
+
Ainsi si vous aviez passé une ligne après MOVE.L #$12345678,D0 les
erreurs auraient �t� annonc�es ligne 5 et 7.
+
erreurs auraient été annoncées ligne 5 et 7.
   
Cela fait d�j� une diff�rence puisque si vous regardez bien le
+
Cela fait déjà une différence puisque si vous regardez bien le
programme, nous voulions r�aliser une op�ration avec D0: Le
+
programme, nous voulions réaliser une opération avec D0: Le
remplir au maximum de sa taille, puis v�rifier que le MOVE de la
+
remplir au maximum de sa taille, puis vérifier que le MOVE de la
ligne 2, n'affecterait que le byte de poids faible, puis r�aliser
+
ligne 2, n'affecterait que le byte de poids faible, puis réaliser
la m�me op�ration sur A0.
+
la même opération sur A0.
   
Impossible priori. Tant pis, suite notre modification,
+
Impossible à priori. Tant pis, suite à notre modification,
l'op�ration se d�roulera donc sur un word au lieu d'un byte.
+
l'opération se déroulera donc sur un word au lieu d'un byte.
   
D�buggons notre programme. Premi�re constatation: l'assembleur,
+
Débuggons notre programme. Première constatation: l'assembleur,
voyant que les op�rations ont lieu avec des registres d'adresse et
+
voyant que les opérations ont lieu avec des registres d'adresse et
non pas des registres de donn�es, a automatiquement modifi� les
+
non pas des registres de données, a automatiquement modifié les
 
MOVE vers A0 et A1, pour les transformer en MOVEA, ce qui se lit
 
MOVE vers A0 et A1, pour les transformer en MOVEA, ce qui se lit
 
MOVE ADDRESS
 
MOVE ADDRESS
   
Ex�cutons le programme pas--pas. D0 prend la valeur $12345678,
+
Exécutons le programme pas-à-pas. D0 prend la valeur $12345678,
puis seul son byte de poids faible est modifi�, D0 prenant alors
+
puis seul son byte de poids faible est modifié, D0 prenant alors
la valeur $123456AA. Ensuite A0 prend la valeur $12345678. Apr�s
+
la valeur $123456AA. Ensuite A0 prend la valeur $12345678. Après
la ligne suivante, l'op�ration affectant le word, nous devrions
+
la ligne suivante, l'opération affectant le word, nous devrions
 
avoir $123400AA. Et bien pas du tout! Nous obtenons $000000AA.
 
avoir $123400AA. Et bien pas du tout! Nous obtenons $000000AA.
   
 
Nous venons donc de voir qu'un registre d'adresse est totalement
 
Nous venons donc de voir qu'un registre d'adresse est totalement
influenc� (donc sur un long mot) lorsqu'il est la destination de
+
influencé (donc sur un long mot) lorsqu'il est la destination de
l'op�ration. Qu'en est-il donc lorsqu'il en est la source ?
+
l'opération. Qu'en est-il donc lorsqu'il en est la source ?
   
 
Continuons donc notre programme, avec le remplissage de A1 et de
 
Continuons donc notre programme, avec le remplissage de A1 et de
 
D1. Nous constatons par la suite que seul le word de poids faible
 
D1. Nous constatons par la suite que seul le word de poids faible
de A1 vient �craser celui de D1.
+
de A1 vient écraser celui de D1.
   
NOTE: $AA est bien en chiffre en hexad�cimal. Si vous pensiez
+
NOTE: $AA est bien en chiffre en hexadécimal. Si vous pensiez
 
qu'il s'agissait de simples lettres de l'alphabet, dormez 1 ou 2
 
qu'il s'agissait de simples lettres de l'alphabet, dormez 1 ou 2
jours, et reprenez le cours la premi�re le�on!
+
jours, et reprenez le cours à la première leçon!
   
De tout ceci nous d�duisons 2 d�finitions:
+
De tout ceci nous déduisons 2 définitions:
   
REGISTRES DE DONN�ES: Chaque registre de donn�es a une longueur de
+
REGISTRES DE DONNÉES: Chaque registre de données a une longueur de
32 bits. Les op�randes sous forme d'octet occupent les 8 bits de
+
32 bits. Les opérandes sous forme d'octet occupent les 8 bits de
poids faible, les op�randes sous forme de mot, les 16 bits de
+
poids faible, les opérandes sous forme de mot, les 16 bits de
poids faible et les op�randes longs, la totalit� des 32 bits.
+
poids faible et les opérandes longs, la totalité des 32 bits.
   
Le bit de poids le plus faible est adress� comme bit 0, le bit de
+
Le bit de poids le plus faible est adressé comme bit 0, le bit de
poids le plus fort est adress� comme bit 31.
+
poids le plus fort est adressé comme bit 31.
   
Lorsqu'un registre de donn�es est utilis� soit comme op�rande
+
Lorsqu'un registre de données est utilisé soit comme opérande
source, soit comme op�rande destination, seule la partie appro-
+
source, soit comme opérande destination, seule la partie appro-
pri�e de poids faible est chang�e. La partie restante de poids
+
priée de poids faible est changée. La partie restante de poids
fort n'est ni utilis�e, ni modifi�e.
+
fort n'est ni utilisée, ni modifiée.
   
 
REGISTRES D'ADRESSE: Chaque registre a une longueur de 32 bits, et
 
REGISTRES D'ADRESSE: Chaque registre a une longueur de 32 bits, et
 
contient une adresse sur 32 bits. Les registres d'adresse
 
contient une adresse sur 32 bits. Les registres d'adresse
n'acceptent pas une op�rande dont la taille est l'octet. Par
+
n'acceptent pas une opérande dont la taille est l'octet. Par
cons�quent lorsqu'un registre d'adresse est utilis� comme op�rande
+
conséquent lorsqu'un registre d'adresse est utilisé comme opérande
source, soit le mot de poids faible, soit l'op�rande long dans sa
+
source, soit le mot de poids faible, soit l'opérande long dans sa
totalit� est utilis�, en fonction de la taille de l'op�ration.
+
totalité est utilisé, en fonction de la taille de l'opération.
   
Lorsqu'un registre d'adresse est utilis� comme destination
+
Lorsqu'un registre d'adresse est utilisé comme destination
d'op�rande le registre entier est concern�, ind�pendamment de la
+
d'opérande le registre entier est concerné, indépendamment de la
taille de l'op�ration. Si l'op�ration porte sur un mot, tous les
+
taille de l'opération. Si l'opération porte sur un mot, tous les
autres op�randes subissent une extension de signe sur 32 bits,
+
autres opérandes subissent une extension de signe sur 32 bits,
avant que l'op�ration ne soit effectu�e.
+
avant que l'opération ne soit effectuée.
   
D�finitions extraites du document r�f EF68000 (circuit int�gr�s
+
Définitions extraites du document réf EF68000 (circuit intégrés
 
MOS THOMSON EFCIS), 45 avenue de l'Europe 78140 Velizy.
 
MOS THOMSON EFCIS), 45 avenue de l'Europe 78140 Velizy.
   
Dans ces d�finitions, nous remarquons un nouveau terme: op�rande.
+
Dans ces définitions, nous remarquons un nouveau terme: opérande.
C'est le terme qui d�signe la valeur utilis�e dans l'op�ration.
+
C'est le terme qui désigne la valeur utilisée dans l'opération.
Ainsi dans MOVE.W D0,D1 l'op�rande source, c'est le word de poids
+
Ainsi dans MOVE.W D0,D1 l'opérande source, c'est le word de poids
faible de D0 alors que l'op�rande destination, c'est le word de
+
faible de D0 alors que l'opérande destination, c'est le word de
 
poids faible de D1.
 
poids faible de D1.
   
Nous savons maintenant ce qu'est le PC, un registre de donn�es, un
+
Nous savons maintenant ce qu'est le PC, un registre de données, un
registre d'adresse, nous avons un peu id�e de ce que nous montre
+
registre d'adresse, nous avons un peu idée de ce que nous montre
les fen�tre de MONST, continuons donc d�cortiquer ce fabuleux
+
les fenêtre de MONST, continuons donc à décortiquer ce fabuleux
 
outil !
 
outil !
   
Pour observer la fen�tre de MONST, si vous n'avez pas assembl� de
+
Pour observer la fenêtre de MONST, si vous n'avez pas assemblé de
programme, impossible d'utiliser Alternate+D. Il vous sera r�pondu
+
programme, impossible d'utiliser Alternate+D. Il vous sera répondu
qu'il n'y a pas de programme en m�moire. Tapez donc Alternate+M,
+
qu'il n'y a pas de programme en mémoire. Tapez donc Alternate+M,
vous voyez MONST appara�tre, mais vous demandant quel fichier
+
vous voyez MONST apparaître, mais vous demandant quel fichier
 
charger. Tapez ESC et nous voici tranquille pour une observation.
 
charger. Tapez ESC et nous voici tranquille pour une observation.
   
Nous voyons bien dans la fen�tre du haut nos registres de donn�es
+
Nous voyons bien dans la fenêtre du haut nos registres de données
et droite nos registres d'adresse. Sous les registres de donn�es
+
et à droite nos registres d'adresse. Sous les registres de données
 
SR puis PC. Le PC (program counter), nous savons ce que c'est,
 
SR puis PC. Le PC (program counter), nous savons ce que c'est,
 
mais le SR ?
 
mais le SR ?
Line 135: Line 136:
 
LE STATUS REGISTER
 
LE STATUS REGISTER
   
Le SR (prononcer Status Register, ce qui veut dire en Fran�ais
+
Le SR (prononcer Status Register, ce qui veut dire en Français
registre d'�tat), est un registre cod� sur un word (16 bits) et
+
registre d'état), est un registre codé sur un word (16 bits) et
qui, comme son nom l'indique, nous renseigne sur l'�tat du
+
qui, comme son nom l'indique, nous renseigne sur l'état du
 
micro-processeur.
 
micro-processeur.
   
 
Il est l'exemple frappant de ce que nous avons vu dans l'introduc-
 
Il est l'exemple frappant de ce que nous avons vu dans l'introduc-
tion du cours 3, savoir qu'il est bien dangereux de traiter un
+
tion du cours 3, à savoir qu'il est bien dangereux de traiter un
 
ensemble de bits comme un simple chiffre, plus ou moins grand.
 
ensemble de bits comme un simple chiffre, plus ou moins grand.
Voyons la d�composition du Status Register.
+
Voyons la décomposition du Status Register.
   
num�ro des bits 15----------------------------------0
+
numéro des bits 15----------------------------------0
 
appellation T . S . . . I2 I1 I0 . . . X N Z V C
 
appellation T . S . . . I2 I1 I0 . . . X N Z V C
   
 
Tout d'abord il faut savoir que certains bits du SR ne sont pas
 
Tout d'abord il faut savoir que certains bits du SR ne sont pas
utilis�s. Ils sont ici symbolis�s par un point chacun.
+
utilisés. Ils sont ici symbolisés par un point chacun.
   
Commen�ons par la description des bits de droite, en commen�ant
+
Commençons par la description des bits de droite, en commençant
 
par le 0.
 
par le 0.
   
Le bit C (C signifie Carry donc retenue en Fran�ais).
+
Le bit C (C signifie Carry donc retenue en Français).
Ce bit est mis 1 lorsqu'il y a une retenue dans le bit le plus
+
Ce bit est mis à 1 lorsqu'il y a une retenue dans le bit le plus
�lev� (donc de poids le plus fort) de l'op�rande objet, dans une
+
élevé (donc de poids le plus fort) de l'opérande objet, dans une
  +
opération arithmétique.
op�ration arithm�tique.
 
   
Le bit V (V signifie oVerflow donc d�passement en Fran�ais).
+
Le bit V (V signifie oVerflow donc dépassement en Français).
Imaginons une addition de 2 nombres positifs, lorsque le r�sultat
+
Imaginons une addition de 2 nombres positifs, lorsque le résultat
va d�border les limites du registres, on obtiendra en fait un
+
va déborder les limites du registres, on obtiendra en fait un
nombre n�gatif compl�mente 2. En effet le fait de mettre le
+
nombre négatif à complémente à 2. En effet le fait de mettre le
bit de poids le plus fort 1 indique que le nombre est n�gatif.
+
bit de poids le plus fort à 1 indique que le nombre est négatif.
Comme ce n'est pas,dans le cas pr�sent, le r�sultat recherch�, on
+
Comme ce n'est pas,dans le cas présent, le résultat recherché, on
est pr�venu du d�passement par le fait que le bit V est mis 1.
+
est prévenu du dépassement par le fait que le bit V est mis à 1.
Il indique �galement, lors de divisions, que le quotient est plus
+
Il indique également, lors de divisions, que le quotient est plus
 
grand qu'un word ou bien que nous avons un dividende trop grand.
 
grand qu'un word ou bien que nous avons un dividende trop grand.
   
Le bit Z (Z signifie Z�ro). Il n'indique pas que le r�sultat est
+
Le bit Z (Z signifie Zéro). Il n'indique pas que le résultat est
�gal 0, mais plut�t que le r�sultat est pass� de l'autre cot�
+
égal à 0, mais plutôt que le résultat est passé de l'autre coté
de 0. En effet, ce bit est 1 lorsqu'apr�s une op�ration le bit
+
de 0. En effet, ce bit est à 1 lorsqu'après une opération le bit
de poids le plus fort du r�sultat est mis 1, ce qui signifie que
+
de poids le plus fort du résultat est mis à 1, ce qui signifie que
nous sommes en pr�sence d'un nombre n�gatif en compl�ment 2. Le
+
nous sommes en présence d'un nombre négatif en complément à 2. Le
bit N (N signifie Negate ) signifie que nous sommes en pr�sence
+
bit N (N signifie Negate ) signifie que nous sommes en présence
d'un nombre n�gatif.
+
d'un nombre négatif.
   
 
Le bit X (X signifie eXtend donc extension). C'est un bit bien
 
Le bit X (X signifie eXtend donc extension). C'est un bit bien
sp�cial qui se comporte un peu comme une retenue. Les instructions
+
spécial qui se comporte un peu comme une retenue. Les instructions
qui utilisent ce bit le pr�cisent dans leur nom. Par exemple ADDX
+
qui utilisent ce bit le précisent dans leur nom. Par exemple ADDX
qui se lit add with extend est une op�ration d'addition prenant en
+
qui se lit add with extend est une opération d'addition prenant en
compte ce bit X. Ce bit X est g�n�ralement le reflet du bit C,
+
compte ce bit X. Ce bit X est généralement le reflet du bit C,
mais, contrairement, celui-ci, certaines instructions ne le mo-
+
mais, contrairement, à celui-ci, certaines instructions ne le mo-
 
difient pas.
 
difient pas.
   
Lorsque nous �tudierons de plus pr�s les instructions du 68000, le
+
Lorsque nous étudierons de plus prés les instructions du 68000, le
 
fait que l'instruction affecte ou non tel ou tel bit sera parfois
 
fait que l'instruction affecte ou non tel ou tel bit sera parfois
tr�s important.
+
très important.
   
Le bit T (T signifie Trace donc suivre en Fran�ais).
+
Le bit T (T signifie Trace donc suivre en Français).
Lorsque ce bit est 1, le 68000 se trouve en mode Trace.
+
Lorsque ce bit est à 1, le 68000 se trouve en mode Trace.
   
Alors l�, soyez bien attentif, ce qui va suivre est primordial
+
Alors , soyez bien attentif, ce qui va suivre est primordial
 
pour la suite des cours!!!
 
pour la suite des cours!!!
   
 
Le mode Trace est un mode de mise au point pour les programmes. Et
 
Le mode Trace est un mode de mise au point pour les programmes. Et
oui, c'est carr�ment DANS le microprocesseur qu'une telle commande
+
oui, c'est carrément DANS le microprocesseur qu'une telle commande
est ins�r�e. A chaque fois que le 68000 ex�cute une instruction,
+
est insérée. A chaque fois que le 68000 exécute une instruction,
il va voir dans quel �tat se trouve le bit T. S'il trouve ce bit
+
il va voir dans quel état se trouve le bit T. S'il trouve ce bit à
0, il passe la prochaine instruction. Par contre, si ce bit est
+
0, il passe à la prochaine instruction. Par contre, si ce bit est
1, le 68000 laisse de c�t� (temporairement) le programme
+
à 1, le 68000 laisse de côté (temporairement) le programme
principal pour se d�tourner vers une routine (un 'bout' de pro-
+
principal pour se détourner vers une routine (un 'bout' de pro-
 
gramme) qui affichera par exemple la valeur de tous les registres
 
gramme) qui affichera par exemple la valeur de tous les registres
(D0 D7 et A0 A7). Imaginons qu'il faille appuyer sur une
+
(D0 à D7 et A0 à A7). Imaginons qu'il faille appuyer sur une
 
touche pour sortir de cette routine: Nous avons donc tout le temps
 
touche pour sortir de cette routine: Nous avons donc tout le temps
 
de consulter ces valeurs. Nous appuyons sur une touche: fin de
 
de consulter ces valeurs. Nous appuyons sur une touche: fin de
 
notre routine, le 68000 retourne donc au programme principal,
 
notre routine, le 68000 retourne donc au programme principal,
ex�cute l'instruction suivante, teste le bit T, le trouve nou-
+
exécute l'instruction suivante, teste le bit T, le trouve à nou-
veau 1, se branche donc sur notre routine, etc... Nous avons
+
veau à 1, se branche donc sur notre routine, etc... Nous avons
donc un mode pas--pas. Or, vous avez d�j� utilis� cette parti-
+
donc un mode pas-à-pas. Or, vous avez déjà utilisé cette parti-
cularit� en visualisant le d�roulement des instructions avec
+
cularité en visualisant le déroulement des instructions avec
 
MONST!
 
MONST!
   
Line 219: Line 220:
 
Assemblez et faites Alternate+D pour passer sous MONST. Appuyez
 
Assemblez et faites Alternate+D pour passer sous MONST. Appuyez
 
une fois sur Control+Z et observez le Status Register. MONST a
 
une fois sur Control+Z et observez le Status Register. MONST a
affich� T, indiquant ainsi que ce bit est 1. Nous sommes donc
+
affiché T, indiquant ainsi que ce bit est à 1. Nous sommes donc
 
bien en mode Trace. Quittez le programme par Control+C.
 
bien en mode Trace. Quittez le programme par Control+C.
   
Nous arrivons maintenant nous poser une question: Le 68000 a
+
Nous arrivons maintenant à nous poser une question: Le 68000 a
trouv� le bit T 1. D'accord, il sait o� est son Status register
+
trouvé le bit T à 1. D'accord, il sait est son Status register
et il sait que le bit T c'est le 15�me. Mais apr�s ? Le 68000
+
et il sait que le bit T c'est le 15ème. Mais après ? Le 68000
s'est d�tourn� vers une routine qui dans le cas pr�sent se trouve
+
s'est détourné vers une routine qui dans le cas présent se trouve
�tre une partie de MONST.
+
être une partie de MONST.
   
Mais comment a-t-il trouv� cette routine ? MONST est en effet un
+
Mais comment a-t-il trouvé cette routine ? MONST est en effet un
programme tout fait ordinaire, qui a �t� charg� en m�moire
+
programme tout à fait ordinaire, qui a été chargé en mémoire à
partir de la disquette, et qui peut �tre plac� n'importe o� dans
+
partir de la disquette, et qui peut être placé n'importe dans
cette m�moire.
+
cette mémoire.
   
Une premi�re solution consisterait toujours placer ce programme
+
Une première solution consisterait à toujours placer ce programme
au m�me endroit. MOTOROLA aurait ainsi pu concevoir le 68000 en
+
au même endroit. MOTOROLA aurait ainsi pu concevoir le 68000 en
pr�cisant: Les programmes de mise au point qui seront appel�s
+
précisant: Les programmes de mise au point qui seront appelés
gr�ce la mise 1 du bit T, devront commencer l'adresse $5000.
+
grâce à la mise à 1 du bit T, devront commencer à l'adresse $5000.
Simple, mais tr�s g�nant car il devient pratiquement impossible de
+
Simple, mais très gênant car il devient pratiquement impossible de
faire r�sider plusieurs programmes en m�moire simultan�ment, sans
+
faire résider plusieurs programmes en mémoire simultanément, sans
 
courir le risque qu'ils se marchent sur les pieds!!!
 
courir le risque qu'ils se marchent sur les pieds!!!
   
 
Il y a pourtant une autre solution, un peu plus tordue mais en re-
 
Il y a pourtant une autre solution, un peu plus tordue mais en re-
vanche beaucoup plus souple, qui consiste charger le programme
+
vanche beaucoup plus souple, qui consiste à charger le programme
de mise au point n'importe o� en m�moire, de noter l'adresse la-
+
de mise au point n'importe en mémoire, de noter l'adresse à la-
quelle il se trouve, et de noter cette adresse un endroit pr�-
+
quelle il se trouve, et de noter cette adresse à un endroit pré-
cis. Lorsque le 68000 trouvera le bit T 1, il foncera cet en-
+
cis. Lorsque le 68000 trouvera le bit T à 1, il foncera à cet en-
droit pr�vu l'avance par MOTOROLA, il y trouvera non pas la
+
droit prévu à l'avance par MOTOROLA, il y trouvera non pas la
routine mais un long mot, adresse de cette routine, laquelle il
+
routine mais un long mot, adresse de cette routine, à laquelle il
n'aura plus qu' se rendre.
+
n'aura plus qu'à se rendre.
   
Cet endroit pr�cis, o� sera stock� l'adresse de la routine
+
Cet endroit précis, sera stocké l'adresse de la routine à
ex�cuter lorsque le bit T sera trouv� 1, c'est un endroit qui se
+
exécuter lorsque le bit T sera trouvé à 1, c'est un endroit qui se
situe dans le premier kilo de m�moire (donc dans les 1024 premiers
+
situe dans le premier kilo de mémoire (donc dans les 1024 premiers
 
bytes). En l'occurrence pour le mode trace il s'agit de l'adresse
 
bytes). En l'occurrence pour le mode trace il s'agit de l'adresse
 
$24.
 
$24.
   
R�sumons: MONST se charge en m�moire. C'est un programme complet
+
Résumons: MONST se charge en mémoire. C'est un programme complet
 
dont certaines routines permettent l'affichage des registres.
 
dont certaines routines permettent l'affichage des registres.
MONST regarde l'adresse laquelle commencent ces routines, note
+
MONST regarde l'adresse à laquelle commencent ces routines, note
cette adresse puis va la mettre l'adresse $24. Ce long mot est
+
cette adresse puis va la mettre à l'adresse $24. Ce long mot est
donc plac� l'adresse $24, $25, $26 et $27 puisque nous savons
+
donc placé à l'adresse $24, $25, $26 et $27 puisque nous savons
que le 'diam�tre' du 'tube' m�moire n'est que d'un octet (byte).
+
que le 'diamètre' du 'tube' mémoire n'est que d'un octet (byte).
Lorsque le microprocesseur trouve le bit T 1, il va l'adresse
+
Lorsque le microprocesseur trouve le bit T à 1, il va à l'adresse
$24, il y pr�l�ve un long mot qui se trouve �tre l'adresse des
+
$24, il y prélève un long mot qui se trouve être l'adresse des
routines de MONST, et il fonce cette adresse. ok?
+
routines de MONST, et il fonce à cette adresse. ok?
   
Nous allons maintenant r�aliser un petit programme et nous allons
+
Nous allons maintenant réaliser un petit programme et nous allons
 
'planter' votre ATARI!
 
'planter' votre ATARI!
 
Tapez ce qui suit:
 
Tapez ce qui suit:
Line 275: Line 276:
   
 
Assemblez puis taper Alternate+D pour passer sous MONST. Faites
 
Assemblez puis taper Alternate+D pour passer sous MONST. Faites
une fois Control+Z. Le bit T du Status register est mis 1, indi-
+
une fois Control+Z. Le bit T du Status register est mis à 1, indi-
quant que nous sommes en mode Trace. Comme nous avons ex�cut� une
+
quant que nous sommes en mode Trace. Comme nous avons exécuté une
 
instruction, D1 se trouve rempli avec $1234. Appuyons maintenant
 
instruction, D1 se trouve rempli avec $1234. Appuyons maintenant
 
sur Alternate + 3.
 
sur Alternate + 3.
   
Nous venons d'activer la fen�tre de droite (la num�ro 3).
+
Nous venons d'activer la fenêtre de droite (la numéro 3).
 
Appuyons sur Alternate+A. Une demande s'affiche: nous devons
 
Appuyons sur Alternate+A. Une demande s'affiche: nous devons
indiquer quelle adresse sera la premi�re visible dans la fen�tre.
+
indiquer quelle adresse sera la première visible dans la fenêtre.
Il faut taper cette adresse en hexad�cimal. Nous tapons donc...24.
+
Il faut taper cette adresse en hexadécimal. Nous tapons donc...24.
(pas de $ avant, MONST sait de lui-m�me que nous parlons en hexa)
+
(pas de $ avant, MONST sait de lui-même que nous parlons en hexa)
Nous voyons s'afficher l'adresse 24 en haut de la fen�tre et en
+
Nous voyons s'afficher l'adresse 24 en haut de la fenêtre et en
 
face un chiffre qui est l'adresse de notre routine de MONST!
 
face un chiffre qui est l'adresse de notre routine de MONST!
   
Pour moi c'est 00027086 mais comme je l'ai dit pr�c�demment cela
+
Pour moi c'est 00027086 mais comme je l'ai dit précédemment cela
d�pend des machines. Dans mon cas lorsque le 68000 trouve le bit T
+
dépend des machines. Dans mon cas lorsque le 68000 trouve le bit T
1, il fonce donc ex�cuter la routine qui se trouve en $00027086.
+
à 1, il fonce donc exécuter la routine qui se trouve en $00027086.
 
Je vais donc modifier cette adresse! Appuyons sur Alternate+E pour
 
Je vais donc modifier cette adresse! Appuyons sur Alternate+E pour
passer en mode �dition. Le curseur est plac� sur le premier nibble
+
passer en mode édition. Le curseur est placé sur le premier nibble
 
de l'adresse. Tapez par exemple 11112222 ou n'importe quel autre
 
de l'adresse. Tapez par exemple 11112222 ou n'importe quel autre
 
chiffre.
 
chiffre.
Repassez maintenant dans la fen�tre 1 en tapant Alternate+1.
+
Repassez maintenant dans la fenêtre 1 en tapant Alternate+1.
   
Maintenant r�fl�chissons: Nous allons refaire Control+Z. Le 68000
+
Maintenant réfléchissons: Nous allons refaire Control+Z. Le 68000
 
va foncer en $24, va maintenant y trouver $11112222, et va foncer
 
va foncer en $24, va maintenant y trouver $11112222, et va foncer
cette adresse pour y ex�cuter ce qu'il va y trouver c'est--dire
+
à cette adresse pour y exécuter ce qu'il va y trouver c'est-à-dire
n'importe quoi! Il y a tr�s peu de chance pour qu'il r�ussisse y
+
n'importe quoi! Il y a très peu de chance pour qu'il réussisse à y
lire des choses coh�rentes et vous indiquera une erreur.
+
lire des choses cohérentes et vous indiquera une erreur.
   
 
Allez y, n'ayez pas peur, vous ne risquez pas de casser votre
 
Allez y, n'ayez pas peur, vous ne risquez pas de casser votre
Line 312: Line 313:
 
RESET.
 
RESET.
   
J'esp�re que ce principe est TRES TRES BIEN COMPRIS. Si cela vous
+
J'espère que ce principe est TRES TRES BIEN COMPRIS. Si cela vous
semble peu pr�s clair, relisez tout car la suite va tr�s souvent
+
semble à peu près clair, relisez tout car la suite va très souvent
faire r�f�rence ce principe d'adresse dans le premier kilo,
+
faire référence à ce principe d'adresse dans le premier kilo,
 
contenant l'adresse d'une routine.
 
contenant l'adresse d'une routine.
   
La prochaine fois, nous finirons d'�tudier le Status Register, en
+
La prochaine fois, nous finirons d'étudier le Status Register, en
attendant je vais me prendre une petite vodka bien fra�che. A la
+
attendant je vais me prendre une petite vodka bien fraîche. A la
v�tre!
+
vôtre!
  +
 
</pre>
 
</pre>
 
Back to [[ASM_Tutorial]]
 
Back to [[ASM_Tutorial]]

Latest revision as of 14:49, 16 December 2023

   ******************************************************************
   *                                                                *
   *             COURS D'ASSEMBLEUR 68000 SUR ATARI ST              *
   *                                                                *
   *                 par Le Féroce Lapin (from 44E)                 *
   *                                                                *
   *                         Cours numéro 4                         *
   *                                                                *
   ******************************************************************

   Nous allons aborder maintenant les registres d'adresse. Tout comme
   les registres de données, ces registres sont codés sur 32 bits (un
   long  mot). Donc à priori aucune différence, puisque le micro-pro-
   cesseur  ne connaît que des chiffres, que ceux-ci représentent des
   données  ou  des  adresses, peu lui importe.  C'est vrai en grande
   partie  et  d'ailleurs  sur  certains  micro-processeurs, il n'y a
   qu'un  ou  deux  registres, qui  peuvent  contenir  indifféremment
   adresse ou données.

   Voyons, grâce  à un exemple, les différences en ce qui concerne le
   68000 MOTOROLA.

   Tapons  donc  le  programme suivant, après avoir, bien sûr, effacé
   l'ancien, et assemblons.

             MOVE.L     #$12345678,D0
             MOVE.B     #$AA,D0
             MOVE.L     #$12345678,A0
             MOVE.B     #$AA,A0 
             MOVE.L     #$12345678,A1
             MOVE.B     A1,D1

   L'assembleur  note 2 erreurs et nous les annonce par 'invalid size
   at line 4' et la même chose pour 'line 6'. Puisque c'est la taille
   et  non  l'opération  elle-même qui semble poser problème, nous en
   déduisons  que  le  MOVE vers ou à partir d'un registre d'adresse,
   n'est  pas  possible sur un byte. Rectifions donc la ligne 4 et la
   ligne 6 en remplaçant les MOVE.B par des MOVE.W et ré-assemblons.

   Note: Lorsque  l'assembleur  note une erreur, il donne la ligne où
   se  situe  celle-ci. Dans cette numérotation les lignes vides sont
   comptées.

   Ainsi si vous aviez passé une ligne après MOVE.L #$12345678,D0 les
   erreurs auraient été annoncées ligne 5 et 7.

   Cela  fait  déjà  une  différence puisque si vous regardez bien le
   programme, nous  voulions  réaliser  une  opération  avec  D0:  Le
   remplir  au  maximum de sa taille, puis vérifier que le MOVE de la
   ligne  2, n'affecterait que le byte de poids faible, puis réaliser
   la même opération sur A0.

   Impossible  à  priori.  Tant  pis,  suite  à  notre  modification,
   l'opération se déroulera donc sur un word au lieu d'un byte.

   Débuggons  notre  programme. Première  constatation: l'assembleur,
   voyant que les opérations ont lieu avec des registres d'adresse et
   non  pas  des  registres de données, a automatiquement modifié les
   MOVE  vers  A0 et A1, pour les transformer en MOVEA, ce qui se lit
   MOVE ADDRESS

   Exécutons  le  programme  pas-à-pas. D0 prend la valeur $12345678,
   puis  seul  son byte de poids faible est modifié, D0 prenant alors
   la  valeur  $123456AA. Ensuite A0 prend la valeur $12345678. Après
   la  ligne  suivante, l'opération  affectant le word, nous devrions
   avoir $123400AA. Et bien pas du tout! Nous obtenons $000000AA.

   Nous  venons  donc de voir qu'un registre d'adresse est totalement
   influencé  (donc  sur un long mot) lorsqu'il est la destination de
   l'opération. Qu'en est-il donc lorsqu'il en est la source ?

   Continuons  donc  notre programme, avec le remplissage de A1 et de
   D1. Nous  constatons par la suite que seul le word de poids faible
   de A1 vient écraser celui de D1.

   NOTE: $AA  est  bien  en  chiffre  en hexadécimal. Si vous pensiez
   qu'il  s'agissait  de simples lettres de l'alphabet, dormez 1 ou 2
   jours, et reprenez le cours à la première leçon!

   De tout ceci nous déduisons 2 définitions:

   REGISTRES DE DONNÉES: Chaque registre de données a une longueur de
   32 bits. Les  opérandes  sous forme d'octet occupent les 8 bits de
   poids  faible, les  opérandes  sous  forme  de mot, les 16 bits de
   poids faible et les opérandes longs, la totalité des 32 bits.

   Le  bit de poids le plus faible est adressé comme bit 0, le bit de
   poids le plus fort est adressé comme bit 31.

   Lorsqu'un  registre  de  données  est  utilisé soit comme opérande
   source, soit  comme  opérande  destination, seule la partie appro-
   priée  de  poids  faible est changée.  La partie restante de poids
   fort n'est ni utilisée, ni modifiée.

   REGISTRES D'ADRESSE: Chaque registre a une longueur de 32 bits, et
   contient   une  adresse  sur  32  bits.  Les  registres  d'adresse
   n'acceptent  pas  une  opérande  dont  la  taille est l'octet. Par
   conséquent lorsqu'un registre d'adresse est utilisé comme opérande
   source, soit  le mot de poids faible, soit l'opérande long dans sa
   totalité est utilisé, en fonction de la taille de l'opération.

   Lorsqu'un   registre   d'adresse  est  utilisé  comme  destination
   d'opérande  le  registre entier est concerné, indépendamment de la
   taille  de  l'opération. Si l'opération porte sur un mot, tous les
   autres  opérandes  subissent  une  extension de signe sur 32 bits,
   avant que l'opération ne soit effectuée.

   Définitions  extraites  du  document réf EF68000 (circuit intégrés
   MOS THOMSON EFCIS), 45 avenue de l'Europe 78140 Velizy.

   Dans  ces définitions, nous remarquons un nouveau terme: opérande.
   C'est  le  terme  qui désigne la valeur utilisée dans l'opération.
   Ainsi  dans MOVE.W D0,D1 l'opérande source, c'est le word de poids
   faible  de  D0 alors  que l'opérande destination, c'est le word de
   poids faible de D1.

   Nous savons maintenant ce qu'est le PC, un registre de données, un
   registre  d'adresse, nous  avons un peu idée de ce que nous montre
   les  fenêtre  de  MONST, continuons donc à décortiquer ce fabuleux
   outil !

   Pour  observer la fenêtre de MONST, si vous n'avez pas assemblé de
   programme, impossible d'utiliser Alternate+D. Il vous sera répondu
   qu'il  n'y  a pas de programme en mémoire. Tapez donc Alternate+M,
   vous  voyez  MONST  apparaître, mais  vous  demandant quel fichier
   charger. Tapez ESC et nous voici tranquille pour une observation.

   Nous  voyons bien dans la fenêtre du haut nos registres de données
   et à droite nos registres d'adresse. Sous les registres de données
   SR  puis  PC. Le  PC  (program counter), nous savons ce que c'est,
   mais le SR ?


   LE STATUS REGISTER

   Le  SR  (prononcer  Status  Register, ce qui veut dire en Français
   registre  d'état), est  un  registre codé sur un word (16 bits) et
   qui, comme  son  nom  l'indique,  nous  renseigne  sur  l'état  du
   micro-processeur.

   Il est l'exemple frappant de ce que nous avons vu dans l'introduc-
   tion  du  cours 3, à savoir qu'il est bien dangereux de traiter un
   ensemble  de  bits  comme  un simple chiffre, plus ou moins grand.
   Voyons la décomposition du Status Register.

   numéro des bits 15----------------------------------0
   appellation       T . S . . . I2 I1 I0 . . . X N Z V C

   Tout  d'abord  il  faut savoir que certains bits du SR ne sont pas
   utilisés. Ils sont ici symbolisés par un point chacun.

   Commençons  par  la  description des bits de droite, en commençant
   par le 0.

   Le bit C (C signifie Carry donc retenue en Français).
   Ce  bit  est mis à 1 lorsqu'il y a une retenue dans le bit le plus
   élevé  (donc  de poids le plus fort) de l'opérande objet, dans une
   opération arithmétique.

   Le bit V (V signifie oVerflow donc dépassement en Français).
   Imaginons  une addition de 2 nombres positifs, lorsque le résultat
   va  déborder  les  limites  du  registres, on obtiendra en fait un
   nombre  négatif  à  complémente à 2. En effet le fait de mettre le
   bit  de  poids le plus fort à 1 indique que le nombre est négatif.
   Comme ce n'est pas,dans le cas présent,  le résultat recherché, on
   est  prévenu  du dépassement par le fait que le bit V est mis à 1.
   Il indique également, lors de divisions,  que le quotient est plus
   grand qu'un word ou bien que nous avons un dividende trop grand.

   Le  bit  Z (Z signifie Zéro). Il n'indique pas que le résultat est
   égal  à  0, mais  plutôt que le résultat est passé de l'autre coté
   de 0. En  effet, ce  bit est à 1 lorsqu'après une opération le bit
   de poids le plus fort du résultat est mis à 1, ce qui signifie que
   nous  sommes en présence d'un nombre négatif en complément à 2. Le
   bit N  (N  signifie Negate )  signifie que nous sommes en présence
   d'un nombre négatif.

   Le  bit  X  (X  signifie eXtend donc extension). C'est un bit bien
   spécial qui se comporte un peu comme une retenue. Les instructions
   qui utilisent ce bit le précisent dans leur nom.  Par exemple ADDX
   qui se lit add with extend est une opération d'addition prenant en
   compte  ce  bit  X. Ce  bit X est généralement le reflet du bit C,
   mais, contrairement, à  celui-ci, certaines instructions ne le mo-
   difient pas.

   Lorsque nous étudierons de plus prés les instructions du 68000, le
   fait  que l'instruction affecte ou non tel ou tel bit sera parfois
   très important.

   Le bit T (T signifie Trace donc suivre en Français).
   Lorsque ce bit est à 1, le 68000 se trouve en mode Trace.

   Alors  là, soyez  bien  attentif, ce  qui va suivre est primordial
   pour la suite des cours!!!

   Le mode Trace est un mode de mise au point pour les programmes. Et
   oui, c'est carrément DANS le microprocesseur qu'une telle commande
   est  insérée. A  chaque fois que le 68000 exécute une instruction,
   il va voir dans quel état se trouve le bit T. S'il trouve ce bit à
   0, il  passe à la prochaine instruction. Par contre, si ce bit est
   à  1, le  68000  laisse  de  côté  (temporairement)  le  programme
   principal  pour  se  détourner vers une routine (un 'bout' de pro-
   gramme) qui  affichera par exemple la valeur de tous les registres
   (D0 à  D7 et  A0 à  A7). Imaginons  qu'il  faille  appuyer sur une
   touche pour sortir de cette routine: Nous avons donc tout le temps
   de  consulter  ces  valeurs. Nous  appuyons sur une touche: fin de
   notre  routine, le  68000 retourne  donc  au  programme principal,
   exécute  l'instruction  suivante, teste le bit T, le trouve à nou-
   veau  à  1, se  branche  donc sur notre routine, etc... Nous avons
   donc  un  mode  pas-à-pas. Or, vous avez déjà utilisé cette parti-
   cularité  en  visualisant  le  déroulement  des  instructions avec
   MONST!

   Tapez le programme suivant:
             MOVE.W     #$23,D0
             MOVE.W     #$15,D1

   Assemblez  et  faites  Alternate+D pour passer sous MONST. Appuyez
   une  fois  sur  Control+Z  et observez le Status Register. MONST a
   affiché  T, indiquant  ainsi  que ce bit est à 1. Nous sommes donc
   bien en mode Trace. Quittez le programme par Control+C.

   Nous  arrivons  maintenant  à  nous poser une question: Le 68000 a
   trouvé  le bit T à 1. D'accord, il sait où est son Status register
   et  il  sait  que  le  bit T c'est le 15ème. Mais après ? Le 68000
   s'est  détourné vers une routine qui dans le cas présent se trouve
   être une partie de MONST.

   Mais  comment  a-t-il trouvé cette routine ? MONST est en effet un
   programme  tout à fait  ordinaire, qui  a  été chargé en mémoire à
   partir  de  la disquette, et qui peut être placé n'importe où dans
   cette mémoire.

   Une  première solution consisterait à toujours placer ce programme
   au  même  endroit. MOTOROLA  aurait ainsi pu concevoir le 68000 en
   précisant: Les  programmes  de  mise  au  point qui seront appelés
   grâce à la mise à 1 du bit T, devront commencer à l'adresse $5000.
   Simple, mais très gênant car il devient pratiquement impossible de
   faire  résider plusieurs programmes en mémoire simultanément, sans
   courir le risque qu'ils se marchent sur les pieds!!!

   Il y a pourtant une autre solution, un peu plus tordue mais en re-
   vanche  beaucoup  plus souple, qui consiste à charger le programme
   de mise au point n'importe où en mémoire, de noter l'adresse à la-
   quelle  il  se trouve, et de noter cette adresse à un endroit pré-
   cis. Lorsque  le 68000 trouvera le bit T à 1, il foncera à cet en-
   droit  prévu  à  l'avance  par  MOTOROLA, il y trouvera non pas la
   routine  mais un long mot, adresse de cette routine, à laquelle il
   n'aura plus qu'à se rendre.

   Cet  endroit  précis, où  sera  stocké  l'adresse  de la routine à
   exécuter lorsque le bit T sera trouvé à 1, c'est un endroit qui se
   situe dans le premier kilo de mémoire (donc dans les 1024 premiers
   bytes). En  l'occurrence pour le mode trace il s'agit de l'adresse
   $24.

   Résumons: MONST  se  charge en mémoire. C'est un programme complet
   dont  certaines  routines  permettent  l'affichage  des registres.
   MONST  regarde  l'adresse à laquelle commencent ces routines, note
   cette  adresse  puis va la mettre à l'adresse $24. Ce long mot est
   donc  placé  à  l'adresse $24, $25, $26 et $27 puisque nous savons
   que  le  'diamètre' du 'tube' mémoire n'est que d'un octet (byte).
   Lorsque  le microprocesseur trouve le bit T à 1, il va à l'adresse
   $24, il  y  prélève  un  long mot qui se trouve être l'adresse des
   routines de MONST, et il fonce à cette adresse. ok?

   Nous  allons maintenant réaliser un petit programme et nous allons
   'planter' votre ATARI!
   Tapez ce qui suit:

             MOVE.W     #$1234,D1
             MOVE.W     #$6789,D2
             MOVE.W     #$1122,D3

   Assemblez  puis  taper  Alternate+D pour passer sous MONST. Faites
   une fois Control+Z. Le bit T du Status register est mis à 1, indi-
   quant  que nous sommes en mode Trace. Comme nous avons exécuté une
   instruction, D1 se  trouve  rempli avec $1234. Appuyons maintenant
   sur Alternate + 3.

   Nous venons d'activer la fenêtre de droite (la numéro 3).
   Appuyons  sur  Alternate+A. Une  demande  s'affiche:  nous  devons
   indiquer  quelle adresse sera la première visible dans la fenêtre.
   Il faut taper cette adresse en hexadécimal. Nous tapons donc...24.
   (pas  de $ avant, MONST sait de lui-même que nous parlons en hexa)
   Nous  voyons  s'afficher  l'adresse 24 en haut de la fenêtre et en
   face un chiffre qui est l'adresse de notre routine de MONST!

   Pour  moi  c'est 00027086 mais comme je l'ai dit précédemment cela
   dépend des machines. Dans mon cas lorsque le 68000 trouve le bit T
   à 1, il fonce donc exécuter la routine qui se trouve en $00027086.
   Je vais donc modifier cette adresse! Appuyons sur Alternate+E pour
   passer en mode édition. Le curseur est placé sur le premier nibble
   de  l'adresse. Tapez  par exemple 11112222 ou n'importe quel autre
   chiffre. 
   Repassez maintenant dans la fenêtre 1 en tapant Alternate+1.

   Maintenant  réfléchissons: Nous allons refaire Control+Z. Le 68000
   va  foncer en $24, va maintenant y trouver $11112222, et va foncer
   à cette adresse pour y exécuter ce qu'il va y trouver c'est-à-dire
   n'importe quoi! Il y a très peu de chance pour qu'il réussisse à y
   lire des choses cohérentes et vous indiquera une erreur.

   Allez  y, n'ayez  pas  peur, vous  ne  risquez pas de casser votre
   machine!

   Hop  Control+Z  et, suivant  les cas, vous obtenez divers messages
   (Illegal exception, Bus Error etc...). 

   Quittez  en faisant Control+C ou bien en dernier ressort faites un
   RESET.

   J'espère  que ce principe est TRES TRES BIEN COMPRIS. Si cela vous
   semble à peu près clair, relisez tout car la suite va très souvent
   faire  référence  à  ce  principe  d'adresse dans le premier kilo,
   contenant l'adresse d'une routine.

   La  prochaine fois, nous finirons d'étudier le Status Register, en
   attendant  je  vais me prendre une petite vodka bien fraîche. A la
   vôtre!

Back to ASM_Tutorial