Assembleur SATURN : Registres
La programmation est un art,au même titre que la peinture ou le bricolage,et qui
comme lui se décompose en 2 phases.La création immatérielle de l'"oeuvre",c'est à dire
sa conception ou réalisation immatérielle,puis sa réalisation matérielle.Pour réaliser cette
oeuvre,il faut se servir sur quels établis,apprendre à choisir l'établi adapté à la pièce
à réaliser,etc...
En assembleur HP48,l'atelier (au sens pièce du terme) s'appelle le SATURN
c'est le processeur.Les établis sont les registres,et les outils sont les instructions
Le SATURN possède 18 registres répartis en 9 types
Ce sont des registres 64 bits et Le SATURN en possède 4
Ils sont généralement nommés A,B,C et D
Ils ne sont pas équivalents.C'est à dire que certaines instructions ne marchent
qu'avec certains registres et pas avec d'autres.Pour reprendre mon superbe parallèle
avec le bricolage,certains sont trop loin de la prise électrique pour que l'on puisse
se servir de la perceuse dessus
Le SATURN possède 2 registres de 20 bits appelés pointeurs : D0 et D1
Ces registres contiennent une adresse (bien que l'on puisse s'en servir comme
compteur ou comme registre de sauvegarde)
Ces registres servent à faire des accès mémoire,c'est à dire à lire et à écrire
des données en mémoire
Ils sont au nombre de 5.Ce sont des registres 64 bits comme les registres de calcul
ils sont nommés R0,R1,R2,R3 et R4
Toutefois on ne peut pas faire de calcul dessus.Les seules instructions opérant sur eux
sont des affectations et des lectures
Ce n'est pas exactement un registre.C'est plutô“t 8 bits d'états du processeur
CARRY : Modifiée par toute opération mathématique (indique si une opération
a généré ou non une retenue ou qu'un test a provoqué un saut).On peut la tester
par programme
INTON : Ce bit interdit ou permet les interruptions clavier masquables
SHUTDN : Ce bit indique que le SATURN est en mode SHUTDOWN,c'est à dire
en mode veille.Ce bit n'est pas testable,on ne peut que le mettre à 1
INT : Ce bit indique que le SATURN est en train de traiter les interruptions.
On peut le mettre à 0 par un RTI mais cela effectue aussi un retour de sous programme.
On ne peut pas le tester
SB : Signifiant Bit,indique qu'un décalage à droite a provoqué la perte
d'un bit.On peut le tester et le mettre à 0
MP : Module Pulled (carte enfichée),mis à 1 par la mise d'une carte dans
la machine.On peut le tester et le mettre à 0
SR : Service Request,mis à 1 en cas de panne détectable par un chip de la HP
(on ne s'en sert pas).On peut le tester et le mettre à 0
XM : Carte retirée.On peut le tester et le mettre à 0
La HP possède 16 bits nommés ST 0 à ST 15 .Ils sont testables et affectables séparément.
Ils sont appelés bits de flag ou drapeaux.Ils servent au programmeur pour sauvegarder
non pas une valeur mais un état par exemple qu'une touche était déjà appuyée
au passage précédent
Les flags 12,13,14 et 15 sont utilisés par les interruptions.Entre autres,le flag 15
autorise les interruptions
Le registre OUT est un registre de 12 bits.Seuls les bits 0 à 8 et 11 sont utilisés
Les bits 0 à 8 servent pour les tests clavier,le bit 11 sert pour le beeper
Le registre IN est un registre de 16 bits.Toutefois seuls les bits 0 à 5 et le bit 15
sont utilisés pour le test du clavier
La pile ou RSTK (Return STacK) est un registre à décalage de 8 fois 20 bits.Elle est faite pour contenir les adresses de retour de sous programme.On en déduit que l'on ne peut emboŚîter plus de 8 sous programmes
Ce registre appelé P est un registre 4 bits qui sert principalement à définir la taille des champs P et PW.Il peut aussi servir de registre de transfert ou de compteur
Ce registre 20 bits très particulier contient l'adresse d'exécution de la prochaine
instruction.Il se nomme PC
Il contient l'adresse o—ù le SATURN va lire la prochaine instruction à exécuter
Sa modification conduit à continuer le programme en un autre lieu
Voyons donc le détail d'un des types d'établis à notre disposition,les registres
64 bits.
Le SATURN dispose de 9 registres 64 bits c'est à dire encore 9 registres de 16 quartets.
Ces registres sont,de plus,divisés en 9 champs.C'est à dire que chaque registre est divisé
en 9 zones de tailles distinctes se recouvrant plus ou moins
Voici le petit schéma qui vaut mieux que ce long discours
Dans l'exemple,on a P=9
F
E
D
C
B
A
9
8
7
6
5
4
3
2
1
0
P
WP
WP
WP
WP
WP
WP
WP
WP
WP
WP
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
W
M
M
M
M
M
M
M
M
M
M
M
M
M
X
X
X
X
A
A
A
A
A
XS
B
B
Le registre est représenté en première ligne,sous la forme de ses 16 quartets numérotés
de 0 à 15 en hexadécimal
Ensuite vient le champ P .Sa position est variable.Il couvre le quartet de valeur P.Ce qui
explique son appelation (pointeur de registre)
Il y a le champ WP qui s'étend du quartet 0 au quartet P.Pour P=9,il couvre les quartets
de 0 à 9
Puis le champ W ( Wide ) qui couvre tout le registre.Il est surtout utilisé
lors de copie de mémoire ou d'affichage graphique
Le champ S ( Sign ) qui couvre le dernier quartet du registre.On l'utilise
comme compteur ou comme indicateur de signe lors de travail sur les réels
Le champ M ( Mantisse ) rarement utilisé,qui sert à stocker la mantisse
d'un réel ou un réel en virgule fixe
Le champ X ( Xposent ) est utilisé principalement pour optimisation ou affichage
graphique
Le champ A ( Adresse ) est le plus utilisé de tous,comme compteur,adresse ...
Le champ XS ( Xposent Sign ) utilisé sur HP71 pour stocker le signe de l'exposant
est généralement utilisé comme compteur,comme le champ S
Et enfin le champ B ( Byte ) de 2 quartets,c'est à dire un octet,le deuxième
en fréquence d'utilisation après le champ A,il sert de compteur et pour le travail
sur des chaŚînes de caractères
Ces utilisations sont bien s–ûr données à titre d'exemple,on peut si l'on veut
utiliser le champ W comme compteur,mais c'est aberrant car cela veut dire que l'on a à boucler près de 10^18
fois,ce qui prendrait près d'un an sur HP.Il faut choisir le champ le plus adapté
au calcul à effectuer,de manière à gagner en temps et en registres utilisés.Utiliser les registres
à bon escient permet de faire jusqu'à quatre (ou plus) calculs en même temps (enfin
dans un même registre) sans avoir sans cesse à faire de lents échanges avec la mémoire
Lorsque l'on utilise une instruction assembleur travaillant sur un champ particulier
d'un registre 64 bits,il faut le préciser à l'assembleur,ceci ce fait en indiquant
à la suite de l'instruction le champ de travail (exemple : A=A+A A ,lire
A égale A plus A champ A).Lorsqu'on veut parler du contenu d'un champ d'un registre
64 bits,on dit "A champ M contient" ...