COURS 4.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
(Created page with "<pre> ****************************************************************** * * * COURS D'ASSEMBL...") Â |
No edit summary |
||
Line 4: | Line 4: | ||
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST * |
* COURS D'ASSEMBLEUR 68000 SUR ATARI ST * |
||
* * |
* * |
||
− | * par Le |
+ | * par Le F�roce Lapin (from 44E) * |
* * |
* * |
||
− | * Cours |
+ | * 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 |
+ | les registres de donn�es, ces registres sont cod�s sur 32 bits (un |
− | long mot). Donc |
+ | long mot). Donc � priori aucune diff�rence, puisque le micro-pro- |
− | cesseur ne |
+ | 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 |
+ | qu'un ou deux registres, qui peuvent contenir indiff�remment |
− | adresse ou |
+ | 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, |
+ | Tapons donc le programme suivant, apr�s avoir, bien s�r, effac� |
l'ancien, et assemblons. |
l'ancien, et assemblons. |
||
Line 33: | Line 33: | ||
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 |
+ | 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 r‚-assemblons. |
||
− | Note: Lorsque l'assembleur note une erreur, il donne la ligne |
+ | Note: Lorsque l'assembleur note une erreur, il donne la ligne o� |
− | se situe celle-ci. Dans cette |
+ | se situe celle-ci. Dans cette num�rotation les lignes vides sont |
− | + | compt�es. |
|
− | Ainsi si vous aviez |
+ | Ainsi si vous aviez pass� une ligne apr�s MOVE.L #$12345678,D0 les |
− | erreurs auraient |
+ | 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 |
+ | programme, nous voulions r�aliser une op�ration avec D0: Le |
− | remplir au maximum de sa taille, puis |
+ | 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 |
+ | 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 |
+ | 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 |
+ | voyant que les op�rations ont lieu avec des registres d'adresse et |
− | non pas des registres de |
+ | 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 |
+ | puis seul son byte de poids faible est modifi�, D0 prenant alors |
− | la valeur $123456AA. Ensuite A0 prend la valeur $12345678. |
+ | la valeur $123456AA. Ensuite A0 prend la valeur $12345678. Apr�s |
− | la ligne suivante, l' |
+ | 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 |
+ | de A1 vient �craser celui de D1. |
− | NOTE: $AA est bien en chiffre en |
+ | 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 |
+ | jours, et reprenez le cours � la premi�re le�on! |
− | De tout ceci nous |
+ | De tout ceci nous d�duisons 2 d�finitions: |
− | REGISTRES DE |
+ | REGISTRES DE DONN�ES: Chaque registre de donn�es a une longueur de |
− | 32 bits. Les |
+ | 32 bits. Les op�randes sous forme d'octet occupent les 8 bits de |
− | poids faible, les |
+ | poids faible, les op�randes sous forme de mot, les 16 bits de |
− | poids faible et les |
+ | poids faible et les op�randes longs, la totalit� des 32 bits. |
− | Le bit de poids le plus faible est |
+ | Le bit de poids le plus faible est adress� comme bit 0, le bit de |
− | poids le plus fort est |
+ | poids le plus fort est adress� comme bit 31. |
− | Lorsqu'un registre de |
+ | Lorsqu'un registre de donn�es est utilis� soit comme op�rande |
− | source, soit comme |
+ | 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 |
+ | 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 |
+ | 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' |
+ | 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 |
+ | 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' |
+ | 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' |
+ | 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 |
+ | C'est le terme qui d�signe la valeur utilis�e dans l'op�ration. |
− | Ainsi dans MOVE.W D0,D1 l' |
+ | Ainsi dans MOVE.W D0,D1 l'op�rande source, c'est le word de poids |
− | faible de D0 alors que l' |
+ | 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 |
+ | Nous savons maintenant ce qu'est le PC, un registre de donn�es, un |
− | registre d'adresse, nous avons un peu |
+ | 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 |
+ | Pour observer la fen�tre de MONST, si vous n'avez pas assembl� de |
− | programme, impossible d'utiliser Alternate+D. Il vous sera |
+ | programme, impossible d'utiliser Alternate+D. Il vous sera r�pondu |
− | qu'il n'y a pas de programme en |
+ | qu'il n'y a pas de programme en m�moire. Tapez donc Alternate+M, |
− | vous voyez MONST |
+ | 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 |
+ | 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 135: | ||
LE STATUS REGISTER |
LE STATUS REGISTER |
||
− | Le SR (prononcer Status Register, ce qui veut dire en |
+ | Le SR (prononcer Status Register, ce qui veut dire en Fran�ais |
− | registre d' |
+ | registre d'�tat), est un registre cod� sur un word (16 bits) et |
− | qui, comme son nom l'indique, nous renseigne sur l' |
+ | 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, |
+ | 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 |
+ | 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 |
+ | Le bit C (C signifie Carry donc retenue en Fran�ais). |
− | Ce bit est mis |
+ | 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 |
+ | Le bit V (V signifie oVerflow donc d�passement en Fran�ais). |
− | Imaginons une addition de 2 nombres positifs, lorsque le |
+ | 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 |
+ | bit de poids le plus fort � 1 indique que le nombre est n�gatif. |
− | Comme ce n'est pas,dans le cas |
+ | 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 |
+ | 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 |
+ | de 0. En effet, ce bit est � 1 lorsqu'apr�s une op�ration le bit |
− | de poids le plus fort du |
+ | de poids le plus fort du r�sultat est mis � 1, ce qui signifie que |
− | nous sommes en |
+ | 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 |
+ | bit N (N signifie Negate ) signifie que nous sommes en pr�sence |
− | d'un nombre |
+ | 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 |
+ | qui utilisent ce bit le pr�cisent dans leur nom. Par exemple ADDX |
− | qui se lit add with extend est une |
+ | qui se lit add with extend est une op�ration d'addition prenant en |
− | compte ce bit X. Ce bit X est |
+ | compte ce bit X. Ce bit X est g�n�ralement le reflet du bit C, |
− | mais, contrairement, |
+ | mais, contrairement, � celui-ci, certaines instructions ne le mo- |
difient pas. |
difient pas. |
||
− | Lorsque nous |
+ | 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 |
+ | Le bit T (T signifie Trace donc suivre en Fran�ais). |
− | Lorsque ce bit est |
+ | Lorsque ce bit est � 1, le 68000 se trouve en mode Trace. |
+ | Alors l�, soyez bien attentif, ce qui va suivre est primordial |
||
− | Alors l…, 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 |
+ | il va voir dans quel �tat se trouve le bit T. S'il trouve ce bit � |
− | 0, il passe |
+ | 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 |
+ | 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- |
+ | 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 219: | ||
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 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 o— est son Status register |
||
− | et il sait que le bit T c'est le |
+ | 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 |
+ | Mais comment a-t-il trouv� cette routine ? MONST est en effet un |
− | programme tout |
+ | programme tout � fait ordinaire, qui a �t� charg� en m�moire � |
− | partir de la disquette, et qui peut |
+ | partir de la disquette, et qui peut �tre plac� n'importe o� dans |
− | cette |
+ | 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 |
+ | 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 |
+ | vanche beaucoup plus souple, qui consiste � charger le programme |
− | de mise au point n'importe |
+ | de mise au point n'importe o� en m�moire, de noter l'adresse � la- |
− | quelle il se trouve, et de noter cette adresse |
+ | quelle il se trouve, et de noter cette adresse � un endroit pr�- |
− | cis. Lorsque le 68000 trouvera le bit T |
+ | 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, |
+ | routine mais un long mot, adresse de cette routine, � laquelle il |
− | n'aura plus qu' |
+ | n'aura plus qu'� se rendre. |
− | Cet endroit |
+ | 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 |
||
− | ex‚cuter lorsque le bit T sera trouv‚ … 1, c'est un endroit qui se |
||
− | situe dans le premier kilo de |
+ | 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 |
+ | MONST regarde l'adresse � laquelle commencent ces routines, note |
− | cette adresse puis va la mettre |
+ | 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 |
+ | 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 |
+ | routines de MONST, et il fonce � cette adresse. ok? |
− | Nous allons maintenant |
+ | 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 275: | ||
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 |
+ | une fois Control+Z. Le bit T du Status register est mis � 1, indi- |
− | quant que nous sommes en mode Trace. Comme nous avons |
+ | 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 |
+ | 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 |
+ | indiquer quelle adresse sera la premi�re visible dans la fen�tre. |
− | Il faut taper cette adresse en |
+ | Il faut taper cette adresse en hexad�cimal. Nous tapons donc...24. |
− | (pas de $ avant, MONST sait de lui- |
+ | (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 |
+ | 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 |
+ | 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 |
+ | 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 |
+ | Repassez maintenant dans la fen�tre 1 en tapant Alternate+1. |
− | Maintenant |
+ | 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 |
+ | n'importe quoi! Il y a tr�s peu de chance pour qu'il r�ussisse � y |
− | lire des choses |
+ | 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 312: | ||
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' |
+ | La prochaine fois, nous finirons d'�tudier le Status Register, en |
− | attendant je vais me prendre une petite vodka bien |
+ | attendant je vais me prendre une petite vodka bien fra�che. A la |
− | + | v�tre! |
|
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
Revision as of 15:08, 23 November 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