Cette deuxième leçon sera assez théorique (voire même imbuvable pour certains hpistes qui débuteraient) et avec ce que vous allez découvrir, vous ne serez toujours pas en mesure de programmer l'assembleur. Mais une fois ces notions assimilées, vous comprendrez mieux la suite de notre petit cours dans les prochains numéros de votre E-zine préférée.
Qu'est ce qu'un registre de façon générale ?
C'est une zone mémoire d'une taille fixe de 16 quartets (ou 64 bits) découpée en parties fictives de grandeurs différentes qu'on appellera champ. Chaque champ sera utilisé selon notre besoin, et pour s'en servir il suffit de l'appeler par son nom (les différents champs : A, B, M, P, S, W, WP, X, XS). La seule particularité est le champ P qui ne prend qu'un bit et qui est mobile. La conséquence est que la taille du champ WP évolue en fonction de la position de P. Tous les registres ont la même structure et sont présentés selon cette figure :
En langage machine, le champ le plus utilisé est le champ A, car il correspond exactement à la taille d'une adresse (5 quartets).
Selon les instructions (ou mnémoniques) qu'il faudra appeler, elles seront codées de différentes façons en fonction du champ que nous allons utiliser. Soit un exemple : si nous prenons l'instruction A=0 X (qui se traduit par A=0 champ X), elle se codera "AB0", tandis que l'instruction A=0 B (qui se traduit par A=0 champ B) se codera "AEO". Pour avoir ces différences, on se fait aider par le tableau suivant :
En reprenant notre exemple, on coderait A=0 b (avec b=B pour le champ X et b=E pour le champ B).
Il existe quatre registres de calcul : A, B, C et D. Ce sont des registres sur lesquels on peut réaliser des opérations mathématiques simples et des opérations logiques.
Parmi ces quatre registres de calcul, A et C sont les plus complets puisqu'ils permettent de faire le maximum d'opérations, tandis que les registres de calcul B et D sont considérés comme des registres annexes (car moins complets) qui assistent les registres A et C pour certaines opérations délicates.
Comme l'indique le titre, les registres de sauvegarde sont utilisés uniquement pour sauvegarder des valeurs calculées avec les registres de calcul. Il existe cinq registres de sauvegarde : R0, R1, R2, R3 et R4 qui ont chacun une taille de 16 quartets.
Nous avons à notre disposition un registre d'entrée de 16 bits : IN, et un registre de sortie de 12 bits : OUT.
Comment cela fonctionne-t-il ?
Pour le buzzer de la machine, on utilise OUT.
Pour le clavier (test d'une touche), on envoie du cou-rant électrique sur une ligne avec OUT, et on regarde le retour sur la colonne correspondant à la touche par l'intermédiaire de IN.
(Pour beaucoup plus de détails, il faudra se référer à l'un des prochains chapitres.)
Un pointeur est utilisé pour pointer sur (ou indiquer) une zone mémoire. Pour pointer sur un objet ou sur un emplacement précis en mémoire, il suffit de déplacer les pointeurs dessus. Il existe deux sortes de pointeurs :
La pile des retours (Return STacK) est plus couramment appelée RSTK. C'est une pile de 8 étages comprenant chacun 5 quartets, soit la place d'une adresse. Cette pile peut servir pour sauvegarder directement des adresses, les valeurs s'empilant comme sur la pile que vous voyez à l'écran, mais on s'en sert surtout pour sauvegarder les adresses de retours lors de l'appel de sous-programmes (ou sous-routines). Toutefois, il faut faire très attention quant à l'utilisation de cette pile, car elle ne fait que 8 étages, et la machine en utilise jusqu'à deux, donc il faut éviter de faire appel à "50 sous-programmes" en même temps, vous auriez quelques petits problèmes !!!
Quand la pile RSTK est vide, elle est remplie uniquement de zéros.
Nous avons à notre disposition 3 types de drapeaux (ou flags) qui prennent chacun la valeur 0 ou 1 (vrai ou faux). Chaque drapeau est réservé à une application différente :
Voilà, j'espère que cette deuxième leçon vous aura plu. Dans la prochaine leçon nous nous pencherons sur les instructions (ou mnémoniques).