Quelques remarques concernant la
syntaxe :
Suited’instructions représente un
nombre quelconque (y compris zéro)
d’instructions d’assembleur SX et/ou
d’instructions SXp. Les instructions SXp
peuvent ensuite être imbriquées à
autant de niveaux que l’on veut.
THEN n’est utilisé qu’en combinaison
avec des instructions PAGE; elle peut
sinon être omise.
Condition sert aux comparaisons (un
registre SX au minimum), à l’examen
de bit de registre ou de d’indicateur
d’état (status flag).
Attributionderegistre rend le nombre
de passage par la boucle. Le registre
concerné peut avoir été chargé aupa-
ravant mais l’attribution peut faire par-
tie de l’instruction. Le registre de boucle
peut être chargé à l’aide d’une
constante, du contenu d’un autre
registre de fichier SX voire du registre W.
Adresse symbolise une adresse (non
locale) à un emplacement quel-
conque du programme SXp (attention
cependant aux sauts revenant de rou-
tines). EXITIF-TO est la seule
directive SXp non structurée; elle per-
met d’économiser du code et une
« sortie rapide » d’une structure SXp.
Un saut inconditionnel se fait tout sim-
plement par exécution de l’instruction
assembleur JMP Adresse.
Nous le disions, SXp ne se sert que du
registre W du SX et des registres de
boucle désignés. Seuls changent le
compteur ordinal le registre d’état (en
cas d’examen).
SXp tient compte, au choix, d’un
DEVICE CARRYX optionnel (et quelque-
fois secret).
SXp évite la collision avec des instruc-
tions d’assemblage conditionnelles :
on a, juste devant des instructions
entrant en collision (ce que ne
connaissent d’ailleurs que fort peu
d’assembleur tels que, par exemple,
le SX-KEY™ de Parallax), mise d’un « ? »
dans le code-source SXp, code que
SXp, sans la moindre activation de
cette ligne de code, éliminera auto-
matiquement de sorte que les instruc-
tions se trouvent, après le passage par
l’assembleur, à disposition comme si
de rien n’était.
L’écriture des instructions SXp peut se
faire tant en minuscules qu’en majus-
cules voire en utilisant une combinai-
son des deux corbeilles.
S’il devait se faire que des structures
SXp devaient sortir des limites de PAGE
du SX, SXp offre un moyen adéquat
pour contourner ce problème, tech-
nique que ne supporte pas la version
de démo de SXp (c’est d’ailleurs là la
seule différence par rapport à la ver-
sion complète).
Un exemple de SXp
Il serait bon, pour la compréhension de
l’ensemble, après autant de théorie, de
proposer un exemple de programme
source SXp. Il s’agit du calcul de la raci-
ne carrée d’un nombre de 16 bits.
La fonction exécutée s’appelle très
exactement : SQ ROOT =
INT(SQRT(ZAHL)).
Cela signifie que le résultat peut être,
à la suite de l’arrondi des entiers, trop
faible d’un maximum de 0,99, ce qui
est dû à la représentation du résultat
sous la forme d’un nombre à 8 bits (il
suffit de s’imaginer que la racine car-
rée de 65 535 soit égale à 255,998...).
Il serait bien entendu possible, en
compliquant quelque peu les choses,
de calculer un résultat sur 9 bits qui
aurait alors une précision de ±0,5.
Ce n’est que dans un but d’une
meilleure lisibilité que toutes les ins-
tructions SXp sont reproduites en gras
et en majuscules, les instructions d’as-
sembleur SX étant elles écrites en
minuscules (cf. listage 1).
Le source SXp sera saisi à l’aide d’un édi-
teur de texte quelconque avant d’être
sauvegardé avec l’extension « .SXP ».
Depuis l’environnement du SXp, le dit
fichier .SXP est, après sélection d’un cer-
tain nombre d’options (dans le cas pré-
sent avec l’option « use CARRYX », bien
que dans le présent exemple il n’y ait
pas d’instructions SXp à base de com-
paraison et qu’il n’y ait que des interro-
gations d’indicateurs (flag).
Lors de la compilation, SXp génère un
programme source en assembleur SX
doté de l’extension « .SRC », qui, le cas
échéant, comporte des messages d’er-
reur en clair reprenant le numéro d’ori-
gine de la ligne du programme-source
SXp de sorte que l’on peut plus facile-
ment cerner et corriger les erreurs.
Après compilation, le source en assem-
bleur SX produit peut être assemblé à
l’aide de l’assembleur SX-KEY™ ou de
tout autre assembleur SX (même sous
DOS) à condition qu’il reconnaisse les
mnémoniques et la syntaxe spécifiées
par la fiche de caractéristiques.
On pourra utiliser ce même program-
me source en assembleur SX pour le
débogage du code-source (à nou-
veau à l’aide, par exemple, du SX-
KEY™). On peut, optionnellement,
reprendre les instructions SXp au coeur
du programme-source en assembleur
SX sous la forme de commentaires, ce
qui simplifie sensiblement le déboga-
ge (la cartographie de la structure est
également indiquée pour une meilleu-
re vue d’ensemble et un contrôleur
plus aisé. De par WINDOWS® il n’est
pas nécessaire de fermer SXp, qui peut
PC-PLUS
——————————————————— Elektor EXTRA X-5 - 9/99
snc ; SKIP plus effectif ici qu’une structure IF
retp ; terminé, si Carry se trouve à 1
clrb root_mask.7
xor w,root_mask
stc ; arithmétique 16 bits(CARRYX)!
sub input2,w
or w,root_mask ; mettre le bit actuel à 1
ENDL
xor w,root_mask
UNTIL C ; fin de boucle si LSBit de root_mask
; est décalé vers Carry, sinon refaire
sub input2,w
IF C IF NZ ; si résultat <> 0 ...
xor w,#1 ; ... correction finale du bits LSB
ELSEIF input1.7 ; ... ou si = 0 et bit MSB mis à 1
xor w,#1 ; ... correction finale du bits LSB
ENDI
ENDI
retp ; terminé!
end ; fin du programme