![]() ![]() ![]() |
N'oubliez jamais que les indicateurs étudiés sont liés à la plupart des instructions car celles-ci les modifient. Mais nous pourront aussi les modifier directement dans certaines conditions.
Il y a plusieurs indicateurs, ceux-ci sont enregistrés dans le registre de statut nommé SR, la taille de ce registre est de 16 bits (mot).
Ce registre SR est constitué de deux type d'indicateurs, chaque type étant défini sur un octet.
Une deuxième partie que nous utiliserons est constituée des bit 7 à 0, elle contient les indicateurs utilisateurs, elle est appelée registre de flags, ou encore octet-utilisateur mais surtout retenez que cet octet est reconnu par l'assembleur part le nom CCR. Octet car les bit 7 à 0 forment l'octet inférieur de SR.
bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
indicateur | T | - | S | - | - | masque | - | - | - | X | N | Z | V | C | ||
octet système | octet utilisateur |
![]() ![]() ![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
![]() ![]() indicateur de retenue |
Ceci se produit si le résultat ne peut pas être stocké dans la taille d'une mémoire, donc si le résultat dépasse 8, 16 ou 32 (selon la taille de la variable en question)
![]() |
![]() ![]() indicateur de débordement |
Pour un registre la taille est 32 bits, mais pour une variable dans un programme elle peut être 16 bits ou 8 bits.
![]() |
![]() ![]() indicateur de nullité |
![]() |
![]() ![]() indicateur de signe |
Si ce bit est armé alors l'indicateur N est armé lui aussi, inversement si ce bit est desarmé l'indicateur N est desarmé.
![]() |
![]() ![]() indicateur de retenue auxiliaire |
En effet, l'incateur X ne changera pas à chaque fois que l'indicateur C changera, ceci vous permet de faire tout d'abord un contrôle (C et X sont alors armés), puis les instructions suivantes ne changeront que l'indicateur C mais pas l'indicateur X.
Vous pouvez alors faire des sauts selon l'état des deux indicateurs, ce qui veut dire qu'il faudra utiliser l'indicateur X.
![]() ![]() ![]() |
Nous ne pourrons qu'utiliser les instructions ANDI, EORI et ORI.
Il est inutile de spécifier la longueur des données car l'assembleur fait la diférence entre les registre CCR et SR.
PROBLÈME 1 :
On veut désarmer (=0) tout les indicateurs sauf l'indicateur Z qui devra garder sa valeur, pour cela il faut utiliser l'instruction ANDI.
PROGRAMMATION :
ANDI #%00000100,CCR | ; seul l'indicateur Z garde sa valeur |
PROBLÈME 2 :
Les indicateurs X et N doivent être inversés, les autre gardent leurs valeurs, il faut utiliser l'instruction EORI.
PROGRAMMATION :
EORI #%00011000,CCR | ; les indicateur X et N sont inversés |
PROBLÈME 3 :
On veut armer (=1) tous les indicateurs sauf l'indicateur V qui devra garder sa valeur, il faut utiliser l'instruction ORI.
PROGRAMMATION :
ORI #%00011101,CCR | ; seul l'indicateur V garde sa valeur |
![]() ![]() ![]() |
![]() ![]() ![]() |
![]() |
![]() ![]() masque d'interruption |
Plus la valeur codée est petite (0 est le minimum), plus d'interruptions peuvent executer leur programme. Et inversement plus la valeur codée est grande (7 est le maximum), plus d'interruption ne peuvent plus executer leur programme.
PROBLÈME :
On veut désactiver le programme associé aux interruptions automatiques 1, 2, 3 et 4, il faut donc coder la valeur 4 (#4=%100).
PROGRAMMATION :
MOVE.w #%0000010000000000,D0 | ; nouveau masque d'interruption (bits 8, 9 et 10 du registre SR) |
TRAP #1 | ; changement du masque d'interruption D0.l contient le precedent registre SR |
![]() |
![]() ![]() indicateur de supervision |
![]() |
![]() ![]() indicateur de localisation |
Ceci est très souvent utilisé dans les debuggeurs car il est possible d'exécuter le programme voulu instruction par instruction (mode pas à pas).
![]() ![]() |
La première peut être utilisée sans aucune contrainte avec l'instruction TRAP.
La deuxième utilise la méthode employées pour le registre CCR mais l'indicateur S doit être armé, ceci avec la première méthode.
PROBLÈME 1 :
On veut tout d'abord armer (=1) l'indicateur S pour pouvoir utiliser la deuxième méthode par la suite.
PROGRAMMATION :
MOVE.w #%0010000000000000,D0 | ; nouveau masque d'interruption (bits 8, 9, 10, 13 et 15 du registre SR) |
TRAP #1 | ; changement du masque d'interruption D0.l contient le precedent registre SR |
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés