COURS 2.TXT/fr: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
<pre> |
<pre> |
||
− | ****************************************************************** |
+ | ****************************************************************** |
* * |
* * |
||
* 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 2 * |
* * |
* * |
||
****************************************************************** |
****************************************************************** |
||
Line 12: | Line 12: | ||
LES CHIFFRES 'MAGIQUES' |
LES CHIFFRES 'MAGIQUES' |
||
− | Voyons d'abord d'une |
+ | Voyons d'abord d'une façon simple comment marche un ordinateur, en |
− | nous |
+ | nous plaçant dans la situation suivante: nous devons fournir des |
− | messages |
+ | messages à une personne dont nous sommes séparés (par exemple, |
− | message de nuit entre des gens |
+ | message de nuit entre des gens éloignés). |
Nous avons une lampe de poche, que nous pouvons donc allumer, ou |
Nous avons une lampe de poche, que nous pouvons donc allumer, ou |
||
− | + | éteindre, c'est tout. Nous pouvons donc donner 2 messages 1)la |
|
− | lampe est |
+ | lampe est éteinte (par ex. tout va bien) 2)la lampe est allumée |
(par ex. vla les flics!) |
(par ex. vla les flics!) |
||
− | Approfondissons les 2 |
+ | Approfondissons les 2 états de la lampe: |
− | + | Allumée Eteinte |
|
− | qui revient |
+ | qui revient à: du courant pas de courant |
ou: Du courant ? OUI NON |
ou: Du courant ? OUI NON |
||
Valeur du courant ? 1 0 |
Valeur du courant ? 1 0 |
||
− | Les tests seront donc |
+ | Les tests seront donc notés par 0 ou 1 suivant l'allumage ou non |
de la lampe. |
de la lampe. |
||
− | Comme nous sommes riches, nous achetons une 2 |
+ | Comme nous sommes riches, nous achetons une 2 ème lampe. |
− | Nous avons donc 4 |
+ | Nous avons donc 4 possibilités de message |
LAMPE 1 LAMPE2 |
LAMPE 1 LAMPE2 |
||
− | + | éteinte éteinte |
|
− | + | allumée éteinte |
|
− | + | éteinte allumée |
|
− | + | allumée allumée |
|
En comptant avec 3,4,5,6 ... lampes, nous nous rendons compte |
En comptant avec 3,4,5,6 ... lampes, nous nous rendons compte |
||
qu'il est possible de trouver une relation simple entre le nombre |
qu'il est possible de trouver une relation simple entre le nombre |
||
− | de lampes et le nombre de |
+ | de lampes et le nombre de possibilités. |
− | Nombre de |
+ | Nombre de possibilités = 2 à la puissance nombre de lampes. |
Nous obtenons donc le tableau suivant |
Nous obtenons donc le tableau suivant |
||
− | Les remarques sont justes |
+ | Les remarques sont justes là pour mettre la puce à l'oreille ! |
− | Lampes |
+ | Lampes Possibilités Remarques |
1 2 |
1 2 |
||
2 4 |
2 4 |
||
Line 60: | Line 60: | ||
6 64 Amstrad CPC... 64!! |
6 64 Amstrad CPC... 64!! |
||
7 128 ou Commodore 128 ? |
7 128 ou Commodore 128 ? |
||
− | 8 256 En informatique le codage des |
+ | 8 256 En informatique le codage des caractères |
− | (lettres chiffres.. |
+ | (lettres chiffres.. grâce au code ASCII) |
− | permet d'avoir 256 |
+ | permet d'avoir 256 caractères ! |
− | 9 512 Un 520 a 512 Ko de |
+ | 9 512 Un 520 a 512 Ko de mémoire et |
Amstrad vend un PC1 512 |
Amstrad vend un PC1 512 |
||
− | 10 1024 La taille |
+ | 10 1024 La taille mémoire de mon 1040! |
− | 11 2048 Celle du |
+ | 11 2048 Celle du méga 2 de mon frère |
− | 12 4096 Celle d'un |
+ | 12 4096 Celle d'un méga 4. Aussi le nbr de |
couleurs affichables avec un Amiga. |
couleurs affichables avec un Amiga. |
||
etc... |
etc... |
||
16 65536 Dans le GFA, un tableau |
16 65536 Dans le GFA, un tableau |
||
− | ne peut avoir plus de 65536 |
+ | ne peut avoir plus de 65536 éléments. |
− | Si mes 4 lampes sont |
+ | Si mes 4 lampes sont éteintes (0000) je suis donc à la possibilité |
− | 0. Si elles sont |
+ | 0. Si elles sont allumées (1111) je suis donc à la 15 (car de 0 à |
− | 15 |
+ | 15 ça fait bien 16) donc 0000 --> 0 et 1111 --> 15 |
− | J'ai donc un bouquin de 16 pages donnant les |
+ | J'ai donc un bouquin de 16 pages donnant les possibilités des 16 |
− | allumages possibles, et mon correspondant a le |
+ | allumages possibles, et mon correspondant a le même. Comment faire |
pour lui envoyer le message de la page 13 ? |
pour lui envoyer le message de la page 13 ? |
||
− | Le chiffre le plus petit |
+ | Le chiffre le plus petit étant à droite (on note les chiffre dans |
− | l'ordre centaines, dizaines, |
+ | l'ordre centaines, dizaines, unités), plaçons les lampes. |
− | Lampe |
+ | Lampe numéro: 4 3 2 1 |
− | a) je n'ai qu'une lampe (la 1) elle est |
+ | a) je n'ai qu'une lampe (la 1) elle est allumée donc j'obtiens la |
valeur 1. (je ne peut obtenir que 0 ou 1) |
valeur 1. (je ne peut obtenir que 0 ou 1) |
||
− | b)j'ai 2 lampes (1 et 2), |
+ | b)j'ai 2 lampes (1 et 2), allumées toutes les deux, j'obtiens la |
− | + | 4ème possibilité . J'ai donc la valeur 3 (puisque je compte les |
|
valeurs 0,1,2 et 3, ce qui en fait bien 4) Puisque la lampe 1 vaut |
valeurs 0,1,2 et 3, ce qui en fait bien 4) Puisque la lampe 1 vaut |
||
− | au maximum la valeur 1, j'en |
+ | au maximum la valeur 1, j'en déduis que la lampe 2 vaut à elle |
seule au maximum la valeur 2. |
seule au maximum la valeur 2. |
||
− | En effet lampe 1 |
+ | En effet lampe 1 allumée --> valeur 1 |
− | Lampe 2 |
+ | Lampe 2 allumée --> valeur 2 |
− | Donc les 2 |
+ | Donc les 2 allumées ensemble --> valeur 3 = 4 possibilités. |
La lampe 2 peut donc donner une 'augmentation' de 0 ou de 2. |
La lampe 2 peut donc donner une 'augmentation' de 0 ou de 2. |
||
− | Lampe |
+ | Lampe numéro 4 3 2 1 |
'augmentation' 8 4 2 1 |
'augmentation' 8 4 2 1 |
||
Line 111: | Line 111: | ||
Nous sommes donc en train de compter en binaire. |
Nous sommes donc en train de compter en binaire. |
||
− | En |
+ | En décimal : déc signifie 10, car un chiffre peut prendre 10 va- |
− | leurs (de 0 |
+ | leurs (de 0 à 9). |
En binaire :bi = deux car chaque chiffre ne peut prendre que 2 va- |
En binaire :bi = deux car chaque chiffre ne peut prendre que 2 va- |
||
Line 118: | Line 118: | ||
L'informatique est un domaine Anglo-saxon. Un 'chiffre binaire', |
L'informatique est un domaine Anglo-saxon. Un 'chiffre binaire', |
||
− | en Anglais, |
+ | en Anglais, ça se dit 'binary digit'. On garde la première lettre |
− | et les 2 |
+ | et les 2 dernières, et on dit qu'un chiffe binaire c'est un BIT |
− | !!! Un bit peut donc |
+ | !!! Un bit peut donc être à 0 ou 1. C'est la plus petite unité in- |
formatique, |
formatique, |
||
− | car, le correspondant |
+ | car, le correspondant à qui nous envoyons des messages, c'est en |
fait un ordinateur. Au lieu d'allumer des lampes, nous mettons du |
fait un ordinateur. Au lieu d'allumer des lampes, nous mettons du |
||
− | courant sur un fil ou non. Un ordinateur 8 bits |
+ | courant sur un fil ou non. Un ordinateur 8 bits à donc 8 fil sur |
lesquels on met ou non du courant ! |
lesquels on met ou non du courant ! |
||
− | Pour envoyer des messages nous allons donc |
+ | Pour envoyer des messages nous allons donc préparer des lampes |
− | avec des petits interrupteurs puis, quand nos lampes seront |
+ | avec des petits interrupteurs puis, quand nos lampes seront prê- |
tes, on actionnera l'interrupteur principal pour envoyer le cou- |
tes, on actionnera l'interrupteur principal pour envoyer le cou- |
||
− | rant et donc allumer d'un coup les lampes |
+ | rant et donc allumer d'un coup les lampes prévues. |
− | Nous allons donc, par l' |
+ | Nous allons donc, par l'intermédiaire de nos 'lampes', envoyer des |
messages au coeur de la machine (dans le cas du ST c'est un micro- |
messages au coeur de la machine (dans le cas du ST c'est un micro- |
||
− | processeur 68000 de chez MOTOROLA) qui a |
+ | processeur 68000 de chez MOTOROLA) qui a été fabriqué pour répon- |
− | dre d'une certaine |
+ | dre d'une certaine manière aux différents messages. |
− | On |
+ | On prépare donc nos lampes puis on allume. Nous, nous avons 16 |
lampes. En effet le 68000 Motorola |
lampes. En effet le 68000 Motorola |
||
est un micro-processeur 16 bits. |
est un micro-processeur 16 bits. |
||
− | Voici donc un 'programme' (c'est- |
+ | Voici donc un 'programme' (c'est-à-dire une succession d'ordres) |
tel qu'il est au niveau mise ou non de courant sur les 16 fils |
tel qu'il est au niveau mise ou non de courant sur les 16 fils |
||
− | Tout |
+ | Tout à gauche c'est la valeur du fil 16 et à droite celle du 1. 0 |
= pas de courant sur le fil, 1 du courant. Le microprocesseur est |
= pas de courant sur le fil, 1 du courant. Le microprocesseur est |
||
− | + | entouré de multiples tiroirs (les cases mémoire) et parmi les or- |
|
− | dres qu'il sait |
+ | dres qu'il sait exécuter il y a 'va chercher ce qu'il y a dans tel |
− | tiroir' ou bien 'va mettre |
+ | tiroir' ou bien 'va mettre ça dans tel tiroir'. Chaque tiroir est |
− | + | repéré par une adresse (comme chaque maison), c'est-à-dire par un |
|
− | + | numéro. |
|
Nous allons dire au microprocesseur: va chercher ce qu'il y a au |
Nous allons dire au microprocesseur: va chercher ce qu'il y a au |
||
− | + | numéro 24576, ajoutes-y ce qu'il y a au numéro 24578 et mets le |
|
− | + | résultat au numéro 24580. On pourrait remplacer 'au numéro' par 'à |
|
l'adresse'. |
l'adresse'. |
||
− | Allumons donc les 16 lampes en |
+ | Allumons donc les 16 lampes en conséquences, cela donne: |
0011000000111000 |
0011000000111000 |
||
Line 166: | Line 166: | ||
Une seule biarque s'impose, c'est la merde totale! Comment faire |
Une seule biarque s'impose, c'est la merde totale! Comment faire |
||
− | pour s'y retrouver avec un programme comme |
+ | pour s'y retrouver avec un programme comme ça, si on oublie d'al- |
− | lumer une seule lampe, |
+ | lumer une seule lampe, ça ne marche plus, et pour repérer l'erreur |
dans un listing pareil, bonjour ! |
dans un listing pareil, bonjour ! |
||
la merde !!!! |
la merde !!!! |
||
− | On a donc la |
+ | On a donc la possibilité de marquer ça non pas en binaire, mais en |
− | + | décimal. Malheureusement la conversion n'est pas commode et de |
|
− | toute |
+ | toute façon, on obtient quand même des grands chiffres (visuelle- |
− | ment car leur taille en tant que nombre ne change pas, bien |
+ | ment car leur taille en tant que nombre ne change pas, bien sûr!) |
− | Ainsi la |
+ | Ainsi la 3ème ligne donne 53368. On va donc convertir autrement, |
− | en |
+ | en séparant notre chiffres binaire en groupe de 4 bits. |
REMARQUE DE VOCABULAIRE: |
REMARQUE DE VOCABULAIRE: |
||
− | Nous ne parlerons qu'Anglais. Toutes les |
+ | Nous ne parlerons qu'Anglais. Toutes les abréviations en informa- |
− | tique sont des |
+ | tique sont des abréviations de mots ou d'expressions anglaises. |
− | Les lire |
+ | Les lire à la Française impose d'apprendre par coeur leur signifi- |
− | cation. En les lisant telles qu'elles DOIVENT |
+ | cation. En les lisant telles qu'elles DOIVENT être lues (en |
− | Anglais), ces expressions donnent d'elles |
+ | Anglais), ces expressions donnent d'elles mêmes leur définition. |
− | Un des exemples est T$ qui est lu |
+ | Un des exemples est T$ qui est lu systématiquement T dollar ! Or, |
− | $ n'est pas, dans le cas |
+ | $ n'est pas, dans le cas présent, l'abréviation de dollar mais |
celle de string. T$ doit donc se lire ET SE DIRE T string. String |
celle de string. T$ doit donc se lire ET SE DIRE T string. String |
||
− | signifiant ' |
+ | signifiant 'chaîne' en Anglais, T est donc une chaîne de carac- |
− | + | tère. Evident, alors que lire T dollar ne signifie absolument rien |
|
− | ! Le seul |
+ | ! Le seul intérêt c'est que ça fait marrer Douglas, le joyeux bri- |
tannique qui programme avec moi! |
tannique qui programme avec moi! |
||
− | Une |
+ | Une unité binaire se dit donc BIT (binary digit) |
− | 4 |
+ | 4 unités forment un NIBBLE |
− | 8 |
+ | 8 unités forment un octet (que nous appellerons par son nom an- |
− | glais c'est |
+ | glais c'est à dire BYTE) |
− | 16 |
+ | 16 unités forment un mot (WORD) |
− | 32 |
+ | 32 unités forment un mot long (LONG WORD) |
− | Revenons donc |
+ | Revenons donc à notre conversion en groupant nos 16 lampes (donc |
notre WORD) en groupes de 4 (donc en NIBBLE) |
notre WORD) en groupes de 4 (donc en NIBBLE) |
||
Line 213: | Line 213: | ||
Comptons dons les valeur possibles pour un seul nibble. |
Comptons dons les valeur possibles pour un seul nibble. |
||
− | + | état du nibble 0000 valeur 0 |
|
0001 valeur 1 |
0001 valeur 1 |
||
0010 valeur 2 |
0010 valeur 2 |
||
Line 221: | Line 221: | ||
etc.. |
etc.. |
||
1010 valeur 10 |
1010 valeur 10 |
||
− | STOP |
+ | STOP ça va plus ! 10 c'est 1 et 0 or on les a déjà uti- |
− | + | lisés! |
|
− | Ben oui mais |
+ | Ben oui mais à part 0,1,2,3,4,5,6,7,8,9 on n'a pas grand chose à |
notre disposition... Ben si, y'a l'alphabet ! |
notre disposition... Ben si, y'a l'alphabet ! |
||
− | On va donc |
+ | On va donc écrire 10 avec A, 11 avec B, 12 avec C, 13/D, 14/E et |
− | 15 avec F. Il y a donc 16 chiffres dans notre nouveau |
+ | 15 avec F. Il y a donc 16 chiffres dans notre nouveau système (de |
− | 0 |
+ | 0 à F). 'Déc' signifiant 10 et 'Hex' signifiant 6 (un hexagone) |
− | donc Hex + |
+ | donc Hex + Déc=16. Décimal = qui a 10 chiffres (0 à 9) hexadéci- |
− | mal= qui en |
+ | mal= qui en à 16!!! |
− | Notre programme devient donc en |
+ | Notre programme devient donc en hexadécimal: |
$3038 |
$3038 |
||
$6000 |
$6000 |
||
Line 239: | Line 239: | ||
$6004 |
$6004 |
||
− | Plus clair mais c'est pas encore |
+ | Plus clair mais c'est pas encore ça. |
− | NOTE: pour |
+ | NOTE: pour différencier un nombre binaire d'un nombre décimal ou |
− | d'un |
+ | d'un hexadécimal, par convention un nombre binaire sera précédé de |
− | %, un nombre |
+ | %, un nombre hexadécimal de $ et il n'y aura rien devant un nombre |
− | + | décimal. $11 ne vaut donc pas 11 en décimal, mais 17. |
|
− | + | Réfléchissons un peu. Nous avons en fait écrit: |
|
'Va chercher ce qu'il y a' |
'Va chercher ce qu'il y a' |
||
− | ' |
+ | 'à l'adresse $6000' |
− | 'ajoute y ce qu'il y a' ' |
+ | 'ajoute y ce qu'il y a' 'à l'adresse $6002' |
− | 'met le |
+ | 'met le résultat' |
− | ' |
+ | 'à l'adresse $6004' |
− | Le microprocesseur peut bien |
+ | Le microprocesseur peut bien sûr piocher dans les milliers de ca- |
− | ses |
+ | ses mémoire qu'il y a dans la machine, mais en plus il en a sur |
lui (des petites poches en quelque sorte, dans lesquelles il |
lui (des petites poches en quelque sorte, dans lesquelles il |
||
stocke temporairement des 'trucs' dont il aura besoin rapidement). |
stocke temporairement des 'trucs' dont il aura besoin rapidement). |
||
− | Il a 17 poches: 8 dans lesquelles il peut mettre des |
+ | Il a 17 poches: 8 dans lesquelles il peut mettre des données, et 9 |
− | dans lesquelles il peut mettre des adresses. |
+ | dans lesquelles il peut mettre des adresses. Donnée =DATA et |
− | adresse=ADRESS, ces poches seront donc |
+ | adresse=ADRESS, ces poches seront donc repérées par D0,D1,D2, |
...D7 et par A0,A1...A7 et A7' (nous verrons plus tard pourquoi |
...D7 et par A0,A1...A7 et A7' (nous verrons plus tard pourquoi |
||
− | c'est pas A8, et les |
+ | c'est pas A8, et les différences entre ces types de poches). |
− | NOTE: le |
+ | NOTE: le phénomène de courant/pas courant et le même pour TOUS les |
ordinateurs actuels. Le nombre de 'poche' est propre au 68000 |
ordinateurs actuels. Le nombre de 'poche' est propre au 68000 |
||
MOTOROLA . |
MOTOROLA . |
||
− | Il y a donc le |
+ | Il y a donc le même nombre de 'poches' sur un Amiga ou un Mac |
Intosh puisqu'ils ont eux aussi un 68000 Motorala. Sur un PC ou un |
Intosh puisqu'ils ont eux aussi un 68000 Motorala. Sur un PC ou un |
||
− | CPC, les |
+ | CPC, les caractéristiques (nombre de lampes allumables simultané- |
− | ment, nombre de 'poches'...)sont |
+ | ment, nombre de 'poches'...)sont différents, mais le principe est |
− | le |
+ | le même. C'est allumé OU c'est éteint. |
Modifions notre 'texte', qui devient donc. |
Modifions notre 'texte', qui devient donc. |
||
− | ' |
+ | 'déplace dans ta poche D0' |
− | 'ce que tu trouveras |
+ | 'ce que tu trouveras à l'adresse $6000' |
− | 'ajoute |
+ | 'ajoute à ce que tu as dans ta poche D0' |
− | 'ce que tu trouveras |
+ | 'ce que tu trouveras à l'adresse $6002' |
− | 'mets le |
+ | 'mets le résultat de l'opération' |
− | ' |
+ | 'à l'adresse $6004' |
− | La machine est |
+ | La machine est très limitée, puisque par conception, le résultat |
− | de l' |
+ | de l'opération de la 3 ème ligne ira lui même dans D0, écrasant |
donc ce qui s'y trouve. Pour garder la valeur qui s'y trouvait il |
donc ce qui s'y trouve. Pour garder la valeur qui s'y trouvait il |
||
− | faudrait au |
+ | faudrait au préalable la recopier par exemple dans la poche D1!!! |
− | + | Déplacer se dit en Anglais MOVE |
|
Ajoute se dit en Anglais ADD |
Ajoute se dit en Anglais ADD |
||
Line 293: | Line 293: | ||
MOVE ce qu'il y a en $6000 dans D0 |
MOVE ce qu'il y a en $6000 dans D0 |
||
− | ADD ce qu'il y a en $6002 |
+ | ADD ce qu'il y a en $6002 à D0 |
− | MOVE ce qu'il y a maintenant dans D0 |
+ | MOVE ce qu'il y a maintenant dans D0 à $6004 |
− | C'est |
+ | C'est à dire: |
MOVE $6000,D0 |
MOVE $6000,D0 |
||
ADD $6002,D0 |
ADD $6002,D0 |
||
MOVE D0,$6004 |
MOVE D0,$6004 |
||
− | Nous venons d' |
+ | Nous venons d'écrire en clair un programme en langage machine. |
− | La |
+ | La différence fondamentale avec un programme dans n'importe quel |
− | autre langage, c'est que |
+ | autre langage, c'est que là, chaque ligne ne correspond qu'à UNE |
− | SEULE |
+ | SEULE opération du microprocesseur, alors que PRINT "BONJOUR" va |
− | lui en faire faire beaucoup. Il est |
+ | lui en faire faire beaucoup. Il est évident que notre BASIC |
− | n' |
+ | n'étant qu'un traducteur 'mécanique' sa traduction a toutes les |
− | chances d' |
+ | chances d'être approximative, et, bien qu'elle soit efficace, elle |
utilise beaucoup plus d'instructions (pour le microprocesseur) |
utilise beaucoup plus d'instructions (pour le microprocesseur) |
||
− | qu'il n'en faut |
+ | qu'il n'en faut réellement. |
− | Il faut bien aussi avoir une |
+ | Il faut bien aussi avoir une pensée émue pour les premiers pro- |
grammeurs du 68000 qui ont d'abord fait un programme avec des 1 et |
grammeurs du 68000 qui ont d'abord fait un programme avec des 1 et |
||
− | des 0, programme qui ne faisait que traduire des chiffres |
+ | des 0, programme qui ne faisait que traduire des chiffres hexadé- |
− | cimaux en binaires avant de les transmettre |
+ | cimaux en binaires avant de les transmettre à la machine. Il ont |
− | ensuite |
+ | ensuite réalisé, en hexadécimal des programmes traduisant des ins- |
tructions du genre MOVE, ADD etc... en binaire... |
tructions du genre MOVE, ADD etc... en binaire... |
||
Il suffisait ensuite de regrouper plusieurs instructions de ce |
Il suffisait ensuite de regrouper plusieurs instructions de ce |
||
type sous une autre appellation (incomprise directement par la ma- |
type sous une autre appellation (incomprise directement par la ma- |
||
− | chine) et de faire les traducteurs correspondants, et |
+ | chine) et de faire les traducteurs correspondants, et créer ainsi |
− | les langages ' |
+ | les langages 'évolués' (PASCAL, C, BASIC ...) |
− | Nous allons donc nous |
+ | Nous allons donc nous intéresser à la programmation ou plutôt à la |
transmission d'ordre au 68000 Motorola. Combien d'ordres peut-il |
transmission d'ordre au 68000 Motorola. Combien d'ordres peut-il |
||
− | + | exécuter. Uniquement 56 !!!! (avec des variantes quand même mais |
|
− | + | ça fait pas beaucoup). Des recherches (à un niveau bien trop haut |
|
− | pour nous!) on en effet |
+ | pour nous!) on en effet montrées qu'il était plus rapide d'avoir |
− | peu d'instructions faisant peu de chose chacune et donc |
+ | peu d'instructions faisant peu de chose chacune et donc exécuta- |
− | bles rapidement les unes |
+ | bles rapidement les unes après les autres, plutôt que d'avoir |
beaucoup d'instructions (le microprocesseur perdant sans doute du |
beaucoup d'instructions (le microprocesseur perdant sans doute du |
||
− | temps |
+ | temps à chercher celle qu'on lui a demandé de faire) ou bien des |
instructions complexes. |
instructions complexes. |
||
− | Travail |
+ | Travail à faire: relire tout ça au moins 2 fois puis se reposer |
l'esprit avant de lire la suite. |
l'esprit avant de lire la suite. |
||
CONSEIL: ne commencez pas la suite tout de suite. |
CONSEIL: ne commencez pas la suite tout de suite. |
||
− | Avalez parfaitement TOUT ce qui est |
+ | Avalez parfaitement TOUT ce qui est marqué, car la compréhension |
− | du moindre |
+ | du moindre détail vous servira. |
− | Une lampe, ce n'est pas grand chose, mais une de |
+ | Une lampe, ce n'est pas grand chose, mais une de grillée et vous |
− | comprendrez la merde que |
+ | comprendrez la merde que ça amène. |
− | + | Là, c'est pareil. La plus petite chose incomprise et vous n'allez |
|
− | rien comprendre |
+ | rien comprendre à la suite. Par contre si tout est compris, la |
suite sera aussi facile, et surtout aussi logique. |
suite sera aussi facile, et surtout aussi logique. |
||
+ | |||
</pre> |
</pre> |
||
Back to [[ASM_Tutorial]] |
Back to [[ASM_Tutorial]] |
Revision as of 12:19, 24 November 2023
****************************************************************** * * * COURS D'ASSEMBLEUR 68000 SUR ATARI ST * * * * par Le Féroce Lapin (from 44E) * * * * Cours numéro 2 * * * ****************************************************************** LES CHIFFRES 'MAGIQUES' Voyons d'abord d'une façon simple comment marche un ordinateur, en nous plaçant dans la situation suivante: nous devons fournir des messages à une personne dont nous sommes séparés (par exemple, message de nuit entre des gens éloignés). Nous avons une lampe de poche, que nous pouvons donc allumer, ou éteindre, c'est tout. Nous pouvons donc donner 2 messages 1)la lampe est éteinte (par ex. tout va bien) 2)la lampe est allumée (par ex. vla les flics!) Approfondissons les 2 états de la lampe: Allumée Eteinte qui revient à: du courant pas de courant ou: Du courant ? OUI NON Valeur du courant ? 1 0 Les tests seront donc notés par 0 ou 1 suivant l'allumage ou non de la lampe. Comme nous sommes riches, nous achetons une 2 ème lampe. Nous avons donc 4 possibilités de message LAMPE 1 LAMPE2 éteinte éteinte allumée éteinte éteinte allumée allumée allumée En comptant avec 3,4,5,6 ... lampes, nous nous rendons compte qu'il est possible de trouver une relation simple entre le nombre de lampes et le nombre de possibilités. Nombre de possibilités = 2 à la puissance nombre de lampes. Nous obtenons donc le tableau suivant Les remarques sont justes là pour mettre la puce à l'oreille ! Lampes Possibilités Remarques 1 2 2 4 3 8 Il y a des ordinateurs 8 bits ... 4 16 et des 16 bits... 5 32 Le ST est un 16/32 bits 6 64 Amstrad CPC... 64!! 7 128 ou Commodore 128 ? 8 256 En informatique le codage des caractères (lettres chiffres.. grâce au code ASCII) permet d'avoir 256 caractères ! 9 512 Un 520 a 512 Ko de mémoire et Amstrad vend un PC1 512 10 1024 La taille mémoire de mon 1040! 11 2048 Celle du méga 2 de mon frère 12 4096 Celle d'un méga 4. Aussi le nbr de couleurs affichables avec un Amiga. etc... 16 65536 Dans le GFA, un tableau ne peut avoir plus de 65536 éléments. Si mes 4 lampes sont éteintes (0000) je suis donc à la possibilité 0. Si elles sont allumées (1111) je suis donc à la 15 (car de 0 à 15 ça fait bien 16) donc 0000 --> 0 et 1111 --> 15 J'ai donc un bouquin de 16 pages donnant les possibilités des 16 allumages possibles, et mon correspondant a le même. Comment faire pour lui envoyer le message de la page 13 ? Le chiffre le plus petit étant à droite (on note les chiffre dans l'ordre centaines, dizaines, unités), plaçons les lampes. Lampe numéro: 4 3 2 1 a) je n'ai qu'une lampe (la 1) elle est allumée donc j'obtiens la valeur 1. (je ne peut obtenir que 0 ou 1) b)j'ai 2 lampes (1 et 2), allumées toutes les deux, j'obtiens la 4ème possibilité . J'ai donc la valeur 3 (puisque je compte les valeurs 0,1,2 et 3, ce qui en fait bien 4) Puisque la lampe 1 vaut au maximum la valeur 1, j'en déduis que la lampe 2 vaut à elle seule au maximum la valeur 2. En effet lampe 1 allumée --> valeur 1 Lampe 2 allumée --> valeur 2 Donc les 2 allumées ensemble --> valeur 3 = 4 possibilités. La lampe 2 peut donc donner une 'augmentation' de 0 ou de 2. Lampe numéro 4 3 2 1 'augmentation' 8 4 2 1 Pour envoyer le message 13, il faut donc allumer la lampe 4 (valeur de 8), la lampe 3 (valeur de 4) et la 1 (valeur de 1) Lampe 4 3 2 1 Etat de la lampe 1 1 0 1 Valeur 8 + 4 + 0 + 1 = 13 Nous sommes donc en train de compter en binaire. En décimal : déc signifie 10, car un chiffre peut prendre 10 va- leurs (de 0 à 9). En binaire :bi = deux car chaque chiffre ne peut prendre que 2 va- leurs (0 ou 1). L'informatique est un domaine Anglo-saxon. Un 'chiffre binaire', en Anglais, ça se dit 'binary digit'. On garde la première lettre et les 2 dernières, et on dit qu'un chiffe binaire c'est un BIT !!! Un bit peut donc être à 0 ou 1. C'est la plus petite unité in- formatique, car, le correspondant à qui nous envoyons des messages, c'est en fait un ordinateur. Au lieu d'allumer des lampes, nous mettons du courant sur un fil ou non. Un ordinateur 8 bits à donc 8 fil sur lesquels on met ou non du courant ! Pour envoyer des messages nous allons donc préparer des lampes avec des petits interrupteurs puis, quand nos lampes seront prê- tes, on actionnera l'interrupteur principal pour envoyer le cou- rant et donc allumer d'un coup les lampes prévues. Nous allons donc, par l'intermédiaire de nos 'lampes', envoyer des messages au coeur de la machine (dans le cas du ST c'est un micro- processeur 68000 de chez MOTOROLA) qui a été fabriqué pour répon- dre d'une certaine manière aux différents messages. On prépare donc nos lampes puis on allume. Nous, nous avons 16 lampes. En effet le 68000 Motorola est un micro-processeur 16 bits. Voici donc un 'programme' (c'est-à-dire une succession d'ordres) tel qu'il est au niveau mise ou non de courant sur les 16 fils Tout à gauche c'est la valeur du fil 16 et à droite celle du 1. 0 = pas de courant sur le fil, 1 du courant. Le microprocesseur est entouré de multiples tiroirs (les cases mémoire) et parmi les or- dres qu'il sait exécuter il y a 'va chercher ce qu'il y a dans tel tiroir' ou bien 'va mettre ça dans tel tiroir'. Chaque tiroir est repéré par une adresse (comme chaque maison), c'est-à-dire par un numéro. Nous allons dire au microprocesseur: va chercher ce qu'il y a au numéro 24576, ajoutes-y ce qu'il y a au numéro 24578 et mets le résultat au numéro 24580. On pourrait remplacer 'au numéro' par 'à l'adresse'. Allumons donc les 16 lampes en conséquences, cela donne: 0011000000111000 0110000000000000 1101000001111000 0110000000000010 0011000111000000 0110000000000100 Une seule biarque s'impose, c'est la merde totale! Comment faire pour s'y retrouver avec un programme comme ça, si on oublie d'al- lumer une seule lampe, ça ne marche plus, et pour repérer l'erreur dans un listing pareil, bonjour ! la merde !!!! On a donc la possibilité de marquer ça non pas en binaire, mais en décimal. Malheureusement la conversion n'est pas commode et de toute façon, on obtient quand même des grands chiffres (visuelle- ment car leur taille en tant que nombre ne change pas, bien sûr!) Ainsi la 3ème ligne donne 53368. On va donc convertir autrement, en séparant notre chiffres binaire en groupe de 4 bits. REMARQUE DE VOCABULAIRE: Nous ne parlerons qu'Anglais. Toutes les abréviations en informa- tique sont des abréviations de mots ou d'expressions anglaises. Les lire à la Française impose d'apprendre par coeur leur signifi- cation. En les lisant telles qu'elles DOIVENT être lues (en Anglais), ces expressions donnent d'elles mêmes leur définition. Un des exemples est T$ qui est lu systématiquement T dollar ! Or, $ n'est pas, dans le cas présent, l'abréviation de dollar mais celle de string. T$ doit donc se lire ET SE DIRE T string. String signifiant 'chaîne' en Anglais, T est donc une chaîne de carac- tère. Evident, alors que lire T dollar ne signifie absolument rien ! Le seul intérêt c'est que ça fait marrer Douglas, le joyeux bri- tannique qui programme avec moi! Une unité binaire se dit donc BIT (binary digit) 4 unités forment un NIBBLE 8 unités forment un octet (que nous appellerons par son nom an- glais c'est à dire BYTE) 16 unités forment un mot (WORD) 32 unités forment un mot long (LONG WORD) Revenons donc à notre conversion en groupant nos 16 lampes (donc notre WORD) en groupes de 4 (donc en NIBBLE) 0011 0000 0011 1000 Ces 4 nibbles forment notre premier word. Comptons dons les valeur possibles pour un seul nibble. état du nibble 0000 valeur 0 0001 valeur 1 0010 valeur 2 0011 valeur 3 0100 valeur 4 0101 valeur 5 etc.. 1010 valeur 10 STOP ça va plus ! 10 c'est 1 et 0 or on les a déjà uti- lisés! Ben oui mais à part 0,1,2,3,4,5,6,7,8,9 on n'a pas grand chose à notre disposition... Ben si, y'a l'alphabet ! On va donc écrire 10 avec A, 11 avec B, 12 avec C, 13/D, 14/E et 15 avec F. Il y a donc 16 chiffres dans notre nouveau système (de 0 à F). 'Déc' signifiant 10 et 'Hex' signifiant 6 (un hexagone) donc Hex + Déc=16. Décimal = qui a 10 chiffres (0 à 9) hexadéci- mal= qui en à 16!!! Notre programme devient donc en hexadécimal: $3038 $6000 $D078 $6002 $31C0 $6004 Plus clair mais c'est pas encore ça. NOTE: pour différencier un nombre binaire d'un nombre décimal ou d'un hexadécimal, par convention un nombre binaire sera précédé de %, un nombre hexadécimal de $ et il n'y aura rien devant un nombre décimal. $11 ne vaut donc pas 11 en décimal, mais 17. Réfléchissons un peu. Nous avons en fait écrit: 'Va chercher ce qu'il y a' 'à l'adresse $6000' 'ajoute y ce qu'il y a' 'à l'adresse $6002' 'met le résultat' 'à l'adresse $6004' Le microprocesseur peut bien sûr piocher dans les milliers de ca- ses mémoire qu'il y a dans la machine, mais en plus il en a sur lui (des petites poches en quelque sorte, dans lesquelles il stocke temporairement des 'trucs' dont il aura besoin rapidement). Il a 17 poches: 8 dans lesquelles il peut mettre des données, et 9 dans lesquelles il peut mettre des adresses. Donnée =DATA et adresse=ADRESS, ces poches seront donc repérées par D0,D1,D2, ...D7 et par A0,A1...A7 et A7' (nous verrons plus tard pourquoi c'est pas A8, et les différences entre ces types de poches). NOTE: le phénomène de courant/pas courant et le même pour TOUS les ordinateurs actuels. Le nombre de 'poche' est propre au 68000 MOTOROLA . Il y a donc le même nombre de 'poches' sur un Amiga ou un Mac Intosh puisqu'ils ont eux aussi un 68000 Motorala. Sur un PC ou un CPC, les caractéristiques (nombre de lampes allumables simultané- ment, nombre de 'poches'...)sont différents, mais le principe est le même. C'est allumé OU c'est éteint. Modifions notre 'texte', qui devient donc. 'déplace dans ta poche D0' 'ce que tu trouveras à l'adresse $6000' 'ajoute à ce que tu as dans ta poche D0' 'ce que tu trouveras à l'adresse $6002' 'mets le résultat de l'opération' 'à l'adresse $6004' La machine est très limitée, puisque par conception, le résultat de l'opération de la 3 ème ligne ira lui même dans D0, écrasant donc ce qui s'y trouve. Pour garder la valeur qui s'y trouvait il faudrait au préalable la recopier par exemple dans la poche D1!!! Déplacer se dit en Anglais MOVE Ajoute se dit en Anglais ADD Notre programme devient donc MOVE ce qu'il y a en $6000 dans D0 ADD ce qu'il y a en $6002 à D0 MOVE ce qu'il y a maintenant dans D0 à $6004 C'est à dire: MOVE $6000,D0 ADD $6002,D0 MOVE D0,$6004 Nous venons d'écrire en clair un programme en langage machine. La différence fondamentale avec un programme dans n'importe quel autre langage, c'est que là, chaque ligne ne correspond qu'à UNE SEULE opération du microprocesseur, alors que PRINT "BONJOUR" va lui en faire faire beaucoup. Il est évident que notre BASIC n'étant qu'un traducteur 'mécanique' sa traduction a toutes les chances d'être approximative, et, bien qu'elle soit efficace, elle utilise beaucoup plus d'instructions (pour le microprocesseur) qu'il n'en faut réellement. Il faut bien aussi avoir une pensée émue pour les premiers pro- grammeurs du 68000 qui ont d'abord fait un programme avec des 1 et des 0, programme qui ne faisait que traduire des chiffres hexadé- cimaux en binaires avant de les transmettre à la machine. Il ont ensuite réalisé, en hexadécimal des programmes traduisant des ins- tructions du genre MOVE, ADD etc... en binaire... Il suffisait ensuite de regrouper plusieurs instructions de ce type sous une autre appellation (incomprise directement par la ma- chine) et de faire les traducteurs correspondants, et créer ainsi les langages 'évolués' (PASCAL, C, BASIC ...) Nous allons donc nous intéresser à la programmation ou plutôt à la transmission d'ordre au 68000 Motorola. Combien d'ordres peut-il exécuter. Uniquement 56 !!!! (avec des variantes quand même mais ça fait pas beaucoup). Des recherches (à un niveau bien trop haut pour nous!) on en effet montrées qu'il était plus rapide d'avoir peu d'instructions faisant peu de chose chacune et donc exécuta- bles rapidement les unes après les autres, plutôt que d'avoir beaucoup d'instructions (le microprocesseur perdant sans doute du temps à chercher celle qu'on lui a demandé de faire) ou bien des instructions complexes. Travail à faire: relire tout ça au moins 2 fois puis se reposer l'esprit avant de lire la suite. CONSEIL: ne commencez pas la suite tout de suite. Avalez parfaitement TOUT ce qui est marqué, car la compréhension du moindre détail vous servira. Une lampe, ce n'est pas grand chose, mais une de grillée et vous comprendrez la merde que ça amène. Là, c'est pareil. La plus petite chose incomprise et vous n'allez rien comprendre à la suite. Par contre si tout est compris, la suite sera aussi facile, et surtout aussi logique.
Back to ASM_Tutorial