!. Exemple:
VARIABLE DRAPEAU DRAPEAU ON
DRAPEAU ? affiche '-1'
Constante délivrant la valeur 0. Pour des raisons de rapidité d'exécution,
sa définition est en code machine. Ce mot sert essentiellement à rendre
certains tests plus explicites dans leur libellé. Ainsi, la séquence 0= IF TRUE
ELSE FALSE THEN est plus claire que 0= IF -1 ELSE 0 THEN.
Constante délivrant le flag booléen vrai.
Opérateur à l'échelle du bit. Force à 0 les bits de l'octet pointé
par adr selon les bits à un du masque oct. Les autres bits sont inchangés.
Exemple:
VARIABLE OCTET
6 OCTET C! ( 00000110)
3 OCTET CRESET ( 00000011)
OCTET C@ . affiche 4 ( 00000100)
Le mot CRESET équivaut à la séquence DUP C@ ROT NOT AND SWAP C!.
Opérateur à l'échelle du bit. Force à 1 les bits de l'octet pointé
par adr selon les bits à un du masque oct. Les autres bits sont inchangés.
Exemple:
VARIABLE OCTET
6 OCTET C! ( 00000110)
3 OCTET CSET ( 00000011)
OCTET C@ . affiche 7 ( 00000111)
Le mot CSET équivaut à la séquence DUP C@ ROT OR SWAP C!.
Opérateur à l'échelle du bit. Inverse les bits de l'octet pointé par
adr selon les bits à un du masque oct. Les autres bits sont inchangés.
Exemple:
VARIABLE OCTET
6 OCTET C! ( 00000110)
3 OCTET CTOGGLE ( 00000011)
OCTET C@ . affiche 5 ( 00000101)
Le mot CTOGGLE équivaut à la séquence DUP C@ ROT XOR SWAP C!.
C. Opérateurs de comparaison 16 bits.
Parmis les opérateurs de comparaison, on distinguera les opérateurs monadiques
des opérateurs diadiques. Les opérateurs monadiques ne traitent qu'une seule
donnée, alors que les opérateurs diadiques traitent deux données. Exemple d'opérateurs
monadiques:
Exemple d'opérateurs diadiques:
Toutes les règles de la logique s'appliquent à ces opérateurs, notamment
lorsqu'ils sont combinés avant exécution d'une action conditionnelle. Exemple,
soit à exécuter une séquence si la valeur n est comprise entre 5 et 10
ou inférieure à -5:
: TEST ( n --- fl)
DUP 5 > OVER 10 < AND OVER -5 < OR ;
Une connaissance approfondie de la logique est nécessaire pour combiner sans
risque d'erreur les opérateurs et les opérateurs de comparaison.
Délivre un flag booléen vrai si n est négatif. Exemple:
10 0< . affiche 0
-5 0< . affiche -1
Délivre un flag booléen vrai si n est négatif ou nul. Inverse de 0>. Exemple:
5 0<= . affiche 0
0 0<= . affiche -1
-5 0<= . affiche -1
Délivre un flag booléen vrai si n est différent de zéro. Inverse de 0=.
Délivre un flag booléen vrai si n est égal à zéro.
Délivre un flag booléen vrai si n est strictement positif.
Délivre un flag booléen vrai si n est positif ou nul. Inverse de 0<.
Délivre un flag booléen vrai si n1 est inférieur à n2.
Exemple:
10000 1 < . affiche 0 (10000 n'est pas inférieur à 1)
50000 1 < . affiche -1 (faux car nombres signés !)
Délivre un flag booléen vrai si n1 est inférieur ou égal à n2.
Inverse de >.
Délivre un flag booléen vrai si n1 différent de n2. Inverse de
=.
Délivre un flag booléen vrai si n1 est égal à n2.
Délivre un flag booléen vrai si n1 est supérieur à n2.
Délivre un flag booléen vrai si n1 est supérieur ou égal à n2.
Inverse de <.
Délivre un flag booléen vrai si le nombre entier non signé u1 est inférieur
au nombre entier non signé u2.
Délivre un flag booléen vrai si le nombre entier non signé u1 est inférieur
ou égal au nombre entier non signé u2.
Délivre un flag booléen vrai si le nombre entier non signé u1 est supérieur
au nombre entier non signé u2.
Délivre un flag booléen vrai si le nombre entier non signé u1 est supérieur
ou égal au nombre entier non signé u2.
MAX |
n1 n2 --- n1 ou n2 |
F83 |
Délivre le plus grand de n1 ou n2. Exemple:
5 7 MAX . affiche 7
7 5 MAX . affiche 7
Ce mot, associé au mot MIN permet d'encadrer dans un domaine borné l'exécution
d'une fonction. Pour exemple, si vous désirez qu'une entrée numérique soit filtrée
avec deux valeurs servant de bornes dans un domaine de définition précis (en
graphisme pour exemple, pour que les coordonnées d'un point ne sortent pas de
l'écran vidéo), on définit:
: FILTRE-X ( x --- x')
0 MAX 319 MIN ;
et à l'exécution:
-5 FILTRE-X . affiche 0
0 FILTRE-X . affiche 0
25 FILTRE-X . affiche 25
319 FILTRE-X . affiche 319
450 FILTRE-X . affiche 319
MIN |
n1 n2 --- n1 ou n2 |
F83 |
Laisse sur la pile le plus petit de n1 ou n2.
Délivre un flag booléen vrai si n1 est compris entre n2 et n3,
bornes comprises, c'est à dire si n2<=n1<=n3. A
noter que si n2 est supérieur à n3, BETWEEN n'a plus de
sens et le flag booléen est toujours faux. Exemple:
2 3 1 BETWEEN . affiche 0
Renvoie un flag booléen vrai (f = -1) si min <= n1 < max.
D. Manipulation de pile 16 bits.
Duplique le nombre entier situé au sommet de la pile de données. Exemple:
: E2 ( n --- nE2)
DUP * ;
5 E2 . affiche 25
10 E2 . affiche 100
Duplique le nombre entier situé au sommet de la pile de données si sa valeur
n'est pas nulle. Ce mot peut, pour exemple, être utilisé avant IF si la valeur
n est utilisée à la fois comme drapeau logique et dans la structure de
contrôle de type IF..THEN ou IF..ELSE..THEN. Exemple: pour éviter la division
d'un nombre par zéro, on peut définir:
: DIV ( n1 n2 --- q)
?DUP IF / THEN ( n1=dividende, n2=diviseur) ;
22 7 DIV . affiche 3
22 0 DIV . affiche 22
alors que 22 0 / délivre 0, ce qui est une erreur.
Duplique le second élément de la pile de données. Exemple:
3 5 OVER . . . affiche 3 5 3
PICK |
n1 n2..nx n --- n1 n2..nx nn |
F83 |
Met sur la pile de données le nième élément contenu dans la pile de données.
Exemple:
22 25 28 34 27 3 PICK . affiche 25
L'opération 0 PICK est équivalente à DUP, 1 PICK à OVER. Attention:
si vous avez travaillé avec d'anciennes versions du langage FORTH, notamment
en 79-Standard, le mot PICK a comme base de départ 1 et non 0. Par conséquent,
si vous adaptez des programmes écrits dans ce standard, il faudra systématiquement
soustraire 1 unité au paramètre de pointage de donné traité par PICK.
Enlève du sommet de la pile de données le nombre entier qui s'y trouvait.
Supprime le second élément de la pile. Equivaut à la séquence SWAP
DROP. Exemple:
2 3 5 NIP . . affiche 5 2
Les deux valeurs situées au sommet de la pile de données sont permutées.
ROT |
n1 n2 n3 --- n2 n3 n1 |
F83 |
Effectue une opération de rotation sur les trois premiers éléments situés au
sommet de la pile de données, mettant le troisième au sommet de la pile.
-ROT |
n1 n2 n3 --- n3 n1 n2 |
|
Réalise une rotation inverse sur les trois nombres entiers situés au sommet
de la pile de données. Le fonctionnement de ce mot est équivalent à la
séquence ROT ROT.
La nième valeur de la pile, n non incluse, est mise au sommet de la pile de
données. Les autres valeurs sont déplacées vers le bas. 2 ROLL est équivalent
à ROT.
Inverse les parties poids faible et poids fort de la valeur 16 bits déposée
au sommet de la pile de données. Exemple:
HEX 3FC6 U. affiche C63F
Duplique le premier élément de la pile sous le second. Equivaut à la
séquence SWAP OVER.
Transfère la valeur n du sommet de la pile de données vers le sommet de la
pile de retour. Ce mot est utilisé notamment pour ranger temporairement certaines
valeurs difficiles à manipuler autrement. Il faut cependant veiller à
remettre la pile de retour dans son état initial à l'aide du mot R>,
ceci avant de quitter une définition ou avant la fin d'une boucle de type DO..LOOP,
DO..+LOOP. Exemple:
: TEST1 5 7 3 >R + R> . . ;
L'exécution de TEST1 affiche la somme de 5 et 7, c'est à dire 12 et
le nombre 3.
: TEST2 5 7 3 >R + . . ;
plantera votre système lors de son exécution. De même:
: BOUCLE 5 0 DO >R LOOP R> ;
est également peu recommandé, plantage garanti.
Le nombre entier n est enlevé de la pile de retour pour être déposé sur la
pile de données.
Copie la valeur n située au sommet de la pile de retour sur le sommet de la
pile de données. Son action est équivalente à la séquence R> DUP >R.
Met le pointeur de pile de retour à la valeur spécifiée par le contenu du sommet
de la pile de données.
Renvoie l'adresse de la prochaine entrée dans la pile de retour.
Met le pointeur de pile à la valeur spécifiée par le contenu du sommet de la
pile de données. Exemple:
SP@ 6 + SP!
incrémente le pointeur de pile de trois unités.
Renvoie l'adresse de la prochaine entrée dans la pile de données.
E. Opérateurs arithmetiques 32 bits signés.
Le nombre double précision d3 est le résultat de la somme des deux nombres
double précision d1 et d2, correspondant à l'opération algébrique d3=d1+d2.
Le nombre double précision d3 est le résultat de la différence des deux nombres
double précision d2 par d1, correspondant à l'opération algébrique d3=d1-d2.
Renvoie sur la pile de données la valeur absolue d'un nombre double précision
signé. Exemple:
55. DABS D. affiche 55
-55. DABS D. affiche 55
Inverse le signe du nombre double précision signé d. Exemple:
3. DNEGATE D. affiche -3
-3. DNEGATE D. affiche 3
Rend négatif le nombre double précision situé au sommet de la pile de données
s'il ne l'est pas.
Multiplie par 2 le sommet de la pile en double précision.Exemple:
55000. D2* D. affiche 110000
Divise le nombre double précision d par deux. Le résultat est un nombre double
précision représentant le quotient de d/2, reste non compris. Exemple:
34. D2/ D. affiche 17
35. D2/ D. affiche aussi 17, il n'y a pas de reste
Transforme un nombre simple précision signé en nombre double précision signé.
Exemple:
3 S>D D. affiche 3
-7 S>D D. affiche -7
F. Opérateurs de comparaison 32 bits.
Délivre un flag booléen vrai si le nombre double précision d est nul.
Délivre un flag booléen vrai si le nombre double précision d1 est inférieur
au nombre double précision d2. Exemple:
57. 105. D< . affiche -1 ( f=vrai)
105. 57. D< . affiche 0 ( f=faux)
Délivre un flag booléen vrai si le nombre double précision d1 est égal au nombre
double précision d2. Exemple:
35. 35. D= . affiche -1 ( f=vrai)
35. 36. D= . affiche 0 ( f=faux)
Délivre un flag booléen vrai si le nombre double précision d1 est supérieur
au nombre double précision d2. Exemple:
57. 105. D< . affiche 0 ( f=faux)
105. 57. D< . affiche -1 ( f=vrai)
Laisse sur la pile le plus grand des deux nombres double précision signés d1
ou d2.
Laisse sur la pile le plus petit des deux nombres double précision signés d1
ou d2.
Compare deux nombres double précision non signés.
G. Manipulations de pile 32 bits.
Supprime les deux dernières cellules de la pile. Les mots manipulant les nombres
double précision (32 bits) sont souvent utilisés pour des paires de nombres
16 bits. Ainsi, 2DROP équivaut à DROP DROP. Exemple:
1 2 3 2DROP . affiche 1
Copie le nombre double précision situé au sommet de la pile de données. Equivaut
à n1 n2 --- n1 n2 n1 n2.
Fait une copie de l'avant-dernière paire de cellules de la pile. Equivaut à
n1 n2 n3 n4 --- n1 n2 n3 n4 n1 n2.
2ROT |
d1 d2 d3 --- d2 d3 d1 |
|
Opère une rotation des trois dernières paires de cellules de la pile. Equivaut
à n1 n2 n3 n4 n5 n6 --- n3 n4 n5 n6 n1 n2.
Permute les deux dernières paires de cellules de la pile. Equivaut à la manipulation
de la pile n1 n2 n3 n4 --- n3 n4 n1 n2.
3DUP |
n1 n2 n3 --- n1 n2 n3 n1 n2 n3 |
|
Fait une copie des trois dernières cellules de la pile.
4DUP |
n1 n2 n3 n4 --- n1 n2 n3 n4 n1 n2 n3 n4 |
|
Fait une copie des quatre dernières cellules de la pile. Equivaut aussi à d1
d2 --- d1 d2 d1 d2.
H. Opérateurs arithmétiques mixtes.
Multiplie deux nombres entiers, n1 et n2, et dépose le résultat
d, qui est un nombre double précision (32 bits) sur la pile de données. Les
valeurs n1 et n2 sont perdues. Les règles des signes appliquées
à n1 et n2 sont identiques à celles du mot *.
Division d'un nombre entier double précision d par un nombre entier simple
précision n. Le quotient q et le reste r sont des entiers simple précision signés.
Exemple:
100000. 25 M/MOD . . affiche 4000 0
MU/MOD |
d n1 --- nreste dquot |
|
Divise un nombre double précision par un nombre entier. Délivre un quotient
en double précision et un reste entier.
Synonyme de UM*.
Réalise le produit de deux nombres entiers u1 et u2 non signés. Le résultat
est un nombre double précision non signé.
Correspond à la division primitive en FORTH. Ce mot réalise la division d'un
nombre double précision non signé avec un nombre entier non signé. Le quotient
u2 et le reste u3 sont des nombres entiers non signés.
-- hautdepage -- sommaire
-- page d'accueil --