![]() ![]() ![]() |
La variable x est un octet, donc 8 bits.
La variable y est un mot, donc 16 bits.
La variable z est un double mot, donc 32 bits.
La variable xyz est au choix un octet (8 bits), un mot (16 bits) ou un double mot (32 bits).
Les registres de données D0, D1, D2, D3, D4, D5, D6 et D7 seront appelé Dn quand nous pourrons les utiliser indifféremment pour une tâche.
Les registres d'adresse A0, A1, A2, A3, A4, A5, A6 et A7 seront appelés An quand nous pourrons les utiliser indifféremment pour une tache.
Attention, le registre A7 est le pointeur de pile.
Les registres de données et d'adresses seront appelés Xn quand nous pourrons les utiliser indifféremment pour une tâche.
Puis il y a le compteur ordinal 32 bits nommé PC (program counter), qui pointe en permanence sur la prochaine instruction a exécuter.
Seuls les 24 premiers bits sont utilisés, ce qui est largement suffisant pour accéder à toute la mémoire des TI-92, c'est pour cela que la plupart des adresses données sont du type $xxxxxx au lieu de $00xxxxxx.
Enfin le registre de status 16 bits nommé SR, pouvant être décomposé en deux registres 8 bits. L'octet de poids faible est le registre de status utilisateur nommé CCR et l'octet de poids fort et l'octet système. Vous aurez besoins d'en savoir plus sur le registre de status utilisateur pour les instruction. Le registre de status est totalement expliqué par ailleurs.
![]() ![]() ![]() |
![]() ![]() |
![]() ![]() ![]() |
Si la taille des données est un octet ou un mot, seul le premier octet ou mot du registre source est copié à la place du premier octet ou mot du registre de destination.
SYNTAXE
Dn
EXEMPLE
MOVE.b D0,D1 | ; copie le premier octet de D0 dans D1 |
MOVE.w D0,D1 | ; copie le premier mot de D0 dans D1 |
MOVE.l D0,D1 | ; copie le contenu de D0 dans D1 |
![]() ![]() ![]() |
Attention, si vous transférez un mot dans un registre de d'adresse, le bit de poids fort (bit 15) qui est le bit de signe est copié dans les bits 16 à 31 de ce même registre d'adresse, ceci pour ne pas perdre le signe d'un nombre car le nouveau bit de poids fort (bit 31) du registre d'adresse est alors le même que celui du mot copié.
SYNTAXE
An
EXEMPLES
MOVE.w D0,A0 | ; copie le premier mot de D0 dans A0 |
MOVE.l D0,A0 | ; copie le contenu de D0 dans A0 |
MOVE.w A0,D0 | ; copie le premier mot de A0 dans D0 |
MOVE.l A0,D0 | ; copie le contenu de A0 dans D0 |
![]() ![]() ![]() |
![]() ![]() ![]() ![]() ![]() |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que l'adresse du registre d'adresse soit paire.
SYNTAXE
(An)
EXEMPLES
MOVE.w (A0),A1 | ; copie le premier mot à l'adresse de A0 dans A1 |
MOVE.l (A0),D0 | ; copie le double mot contenu à l'adresse de A0 dans D0 |
MOVE.w D0,(A0) | ; copie le premier mot de D0 à l'adresse contenue dans A0 |
MOVE.l A1,(A0) | ; copie le contenu de A1 à l'adresse contenue dans A0 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un octet, le registre d'adresse A7 qui est le pointeur de la pile sera pré-décrementé de 2 et non de 1, ceci pour avoir en permanance un pointeur de pile dont l'adresse est paire.
SYNTAXE
-(An)
EXEMPLES
MOVE.b -(A0),A1 | ; décrémente A0 de 1 puis copie le premier octet contenu à l'adresse de A0 dans A1 |
MOVE.w -(A0),A1 | ; décrémente A0 de 2 puis copie le premier mot contenu à l'adresse de A0 dans A1 |
MOVE.l -(A0),D0 | ; décrémente A0 de 4 puis copie le double mot contenu à l'adresse de A0 dans D0 |
MOVE.b D0,-(A7) | ; décrémente A7 de 2 puis copie le premier octet de D0 à l'adresse contenue dans A7 |
MOVE.w D0,-(A0) | ; décrémente A0 de 2 puis copie le premier mot de D0 à l'adresse contenue dans A0 |
MOVE.l A1,-(A0) | ; décrémente A0 de 4 puis copie le contenu de A1 à l'adresse contenue dans A0 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un octet, le registre d'adresse A7 qui est le pointeur de la pile sera post-incrementé de 2 et non de 1, ceci pour avoir en permanance un pointeur de pile dont l'adresse est paire.
SYNTAXE
(An)+
EXEMPLES
MOVE.b (A0)+,A1 | ; copie le premier octet à l'adresse de A0 dans A1 puis incrémente A0 de 1 |
MOVE.w (A0)+,A1 | ; copie le premier mot à l'adresse de A0 dans A1 puis incrémente A0 de 2 |
MOVE.l (A0)+,D0 | ; copie le double mot contenu à l'adresse de A0 dans D0 puis incrémente A0 de 4 |
MOVE.b D0,(A7)+ | ; copie le premier octet de D0 à l'adresse contenue dans A7 puis incrémente A7 de 2 |
MOVE.w D0,(A0)+ | ; copie le premier mot de D0 à l'adresse contenue dans A0 puis incrémente A0 de 2 |
MOVE.l A1,(A0)+ | ; copie le contenu de A1 à l'adresse contenue dans A0 puis incrémente A0 de 4 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que l'adresse finale soit paire.
SYNTAXE
y(An)
EXEMPLES
MOVE.w $1998(A0),A1 | ; copie le premier mot à l'adresse de $1000+A0 dans A1 |
MOVE.l #1000(A0),D0 | ; copie le double mot contenu à l'adresse de #1000+A0 dans D0 |
MOVE.w D0,#%01100111011011011(A0) | ; copie le premier mot de D0 à l'adresse contenue dans #%01100111011011011+A0 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que l'adresse finale du registre d'adresse soit paire.
SYNTAXES
x(An, Xn.w)
x(An, Xn.l)
EXEMPLES
MOVE.w 65(A0, D0.l),A1 | ; copie le premier mot à l'adresse 4+A0+D0 dans A1 |
![]() ![]() ![]() |
![]() ![]() |
![]() ![]() ![]() |
Le mot de poids fort de y est ignoré, donc nous pouvons copier une valeur dont l'adresse peut se trouver 32768 octet avant ou 32767 octets après notre position actuelle.
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que la valeur de y soit paire.
SYNTAXE
y
EXEMPLES
MOVE.b $1998,D0 | ; copie le premier octet à l'adresse $1998 dans D0 |
MOVE.w #1000,A0 | ; copie le premier mot à l'adresse #1000 dans A0 |
MOVE.l #%0100111011011011,D0 | ; copie le double mot à l'adresse #%01100111011011011 dans D0 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que la valeur de z soit paire.
SYNTAXE
z
EXEMPLES
MOVE.b $100000,D0 | ; copie le premier octet à l'adresse $100000 dans D0 |
MOVE.w #250798,A0 | ; copie le premier mot à l'adresse #250798 dans A0 |
MOVE.l #%001101100110111011011011,D0 | ; copie le double mot à l'adresse #%001101100110111011011011 dans D0 |
![]() ![]() ![]() |
![]() ![]() |
![]() ![]() ![]() |
Le bit de poids fort de y est ignoré, donc nous pouvons copier une valeur dont l'adresse peut se trouver 32768 octet avant ou 32767 octets après de notre position actuelle.
SYNTAXE
y(PC)
EXEMPLES
MOVE.b $1998(PC),D0 | ; copie le premier octet à l'adresse $1998+PC+2 dans D0 |
MOVE.w #1000(PC),A0 | ; copie le premier mot à l'adresse #1000+PC+2 dans A0 |
MOVE.l #%01100111011011011(PC),D0 | ; copie le double mot à l'adresse #%01100111011011011+PC+2 dans D0 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que la valeur de x soit paire.
SYNTAXES
x(PC,Xn.w)
x(PC,Xn.l)
EXEMPLES
MOVE.b $B2(PC, A0.w),D0 | ; copie le premier octet à l'adresse $B2+PC+A0 dans D0 |
MOVE.w #65(PC, D0.l),A0 | ; copie le double mot à l'adresse #65+PC+D0+2 dans A0 |
MOVE.l #%01110101(PC, A0.l),D0 | ; copie le double mot à l'adresse #%01110101+PC+A0 dans D0 |
![]() ![]() ![]() |
Attention, si la taille des données copiées est un mot ou un double mot, il faut que que la valeur de xyz soit paire.
SYNTAXE
#xyz
EXEMPLES
MOVE.b #$A7,D0 | ; copie la valeur #$A7 dans le premier octet de D0 |
MOVE.l #10021994,A0 | ; copie la valeur #10021994 dans le premier mot de A0 |
MOVE.l #%0110001111010010010101000010100111(PC, A0),D0 | ; copie la valeur #%0110001111010010010101000010100111 dans D0 |
![]() ![]() ![]() |
SYNTAXE
SR
EXEMPLES EN MODE UTILISATEUR
ANDI #$2015,SR | ; effectue un ET logique entre #$2015 et SR |
EORI #8209,SR | ; effectue un OU EXCLUSIF logique entre #8209 et SR |
ORI #%1010000000001101,SR | ; effectue un OU logique entre #%1010000000001101 et SR |
MOVE.w #$2700,SR | ; modifie seulement l'octet système (octet de poids fort) |
![]() ![]() |
SYNTAXE
CCR
EXEMPLES EN MODE UTILISATEUR
ANDI #$3,CCR | ; effectue un ET logique entre #$3 et CCR |
EORI #5,CCR | ; effectue un OU EXCLUSIF logique entre #5 et CCR |
ORI #%000011001,CCR | ; effectue un OU logique entre #%000011001 et CCR |
MOVE.w #%00000110,CCR | ; modifie seulement l'octet utilisateur (octet de poids faible) |
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés