Syntaxe de ASM flash 1) Généralités sur l'assembleur L'assembleur est le langage le plus proche de la machine car il est directement exécuté par le processeur. De ce fait, le système d'exploitation ne peut contrôler les agissements du programme et ne peut donc pas l'arrêter en cas de défaillance. Sur la HP 48 Gx, il n'y a pas de différence entre la mémoire vive et la mémoire de stockage des variables ce qui fait que tout erreur dans un programme assembleur peut provoquer la perte des données. L'assembleur est un langage propre au processeur de la machine utilisée, donc les connaissances acises sur la HP 48 Gx ne vous seront d'aucunes utilité sur une machine n'étant pas du même type. Toutefois les techniques de programmation elles n'ayant aucun rapport avec la machine ou le langage utilisé pourront elles être réutilisées ailleurs. 2) La syntaxe de ASM flash ASM flash prend une chaîne de characters comme argument. Cette chaîne de characters est constituée d'une suite d'instruction, de commentaires et de directives de compilation séparés par ces characters de séparations, et ce finie par un retour a la ligne et un arobas (@). ASM flash différencie les minuscules des majuscules, donc deux labels peuvent s'appeler Boucle et BOUCLE sans provoquer d'erreur ( mai cela n'est pas conseille car il sera plus dur de retrouver une éventuelle erreur). Les caracters de séparation sont les retours a la ligne (chr 13). Les commentaires peuvent ce placer n'importe ou sauf après le dernier character du source. Ils sont déclarés par un "%" et ce terminent a la fin de la ligne. Certaines instructions nécessitent un paramètre ou champ, ces instructions sont séparées de leurs paramètres par un ou plusieurs espace. ASM flash dispose d'un petit langage dont les instructions modifiant la manière dont ASM flash vas compiler. Ces instructions sont introduites par un ! et seront détaillées ultérieurement. Avec l'ASM FLASH, Est fourni un petit programme d'editions d'erreures destiner a coriger raîdement les erreures de syntaxes stupides. Apres une erreur, la pille est comme suit. 5:[Source initial] 4:[Nom du link dont proviend l'erreur si link il y a ] 3:[Link foireu, si link il y a] 2:Character ou a ete detecte l'erreur 1:Ligne foireuse Apres avoir lancer ER qui vous demanderat de coriger l'erreur, la pille serat comme tel. 1:Source modifie si il n'y a pas de link. ou 3:Source 2:'nom du link' 1:Link modifie. Dans le premier cas, il sufirat de relancer la compilation Dans le deuxiemme, il sufirat de faire un SWAP STO et de relancer la compilation. 3) Les labels Un label est un marqueur, il permet de marquer un endroit du programme de manière a pouvoir ensuite servir de destination a un saut. Un label est déclaré par un "*" immédiatement suivit par le nom du label ( sans caracters de séparation). Comme ce label servira a designer la destination d'un saut, il n'y doit pas y avoir d'ambiguïté donc deux labels ne peuvent porter le même nom. Exemple de label: *Grande_boucle. Attention a la différenciation faite entre les minuscules et les majuscules. 4) Les links Un link est un "sous source", c'est a dires un source ( chaîne de caracters finissant par un retour a la ligne et un arobas ou un retour a la ligne et un END stocké dans une variable. Il est possible d'appeler un link a partir d'un source. Des que ASM flash trouvera un appel a un link, il compilera celui ci avant de finir de compiler le source appelant. Il est utile de préciser qu'un link étant un source, on peut appeler un link a partir d'un link. Mais cet appel étant récursif, ( nécessitée d'une pille de retour ) ASM flash limite la récursivité de l'appel a 25 links en profondeur. Passer cette limite, il retournera dans l'environnement HP avec le message d'erreur "Too mutch Links". L'appel d'un link est réalisé par la séquence suivante: "'Nom.de.la.variable". Exemple: La séquence suivante "'INITIALISATION 'BOUCLE 'FIN" conduira à la compilation successive du link INITIALISATION puis du link BOUCLE et enfin FIN. Les links sont très pratique pour rendre un source plus lisible, plus compressible et donc plus facilement debugeable. Il est conseille d'utiliser au maximum les possibilités du linkeur. Toutefois, il est évident que quelquin tapant ses sources su la HP ( 8 lignes maximum ) ferrât des links beaucoup moins grands que sur un pc ou macintoch ( jusqu'à 50 lignes). 5) Les Macros On à souvent besoin d'inclure des data dans un programme assembleur, on peut le faire en tapant un $ suivit des codes ascii. Mais ce n'est pas pratique, et cela augmente la taille des sources qui deviennent de plus en plus long a éditer. La solution, c'est les Macros. Un macro, c'est un block de data quelconques qui seront inclut a la compilation dans le code compile. Le système d'exploitation de la HP 48 obligeant a stoker des objets en mémoire, il faut encapsuler les data dans une structure d'objet quelconque. J'ai choisit l'objet STRING. Il faut note que seules les donnes sont inclusre ( pas la longeure totale hors prologue ni le prologue.) Les macros doivent etre stoques dans un repertoir en HOME nome Macro La syntaxe d'inclusion d'un macro est la suivante /Nom.de.macro. 6) Les plus de ASM flash GOINC label Fait un LC de la différence entre l'emplacement du LC et le label sur 5 quartets. Si celle ci est négative, elle sera codée en complément a 2. GOINA label idem pour A champ A $Suite de nombre hexa Exemple: $12ACD545680B Place directement les codes hexa dans le compilé. Ascii Exemple: VIVE ASM flash Place directement les caracters compris entre le et le retour a la ligne suivant dans le compilé. GOIN5 label GOIN4 label GOIN3 label Place dans le compilé la différence entre l'endroit du GOIN et le label sur x quartets ( si la différence est négative, elle est codée en complément a 2). 7) Directives de compilation Une directive de compilation est en fait une instruction donnes au compilateur, c'est une espece de macro langage. Toute directive de compilation doit estr precedee d'un !. Liste des directives de compilation. OFF Eteind l'ecran. ON Alume l'ecran. 1-16 Passe en mode 1-16 pour les instruction sur P, sur le Status register ( ST ), sur le hardwarregister ( HST ) et sur les drapaux de compilation. 0-15 Passe en mode 0-15 pour les instruction sur P, sur le Status register ( ST ), sur le hardwarregister ( HST ) et sur les drapaux de compilation. HP Prend les chr HP comme character de comparaison ( superieur ou egal, inferieur ou egal et deifernent) PC Prend les characters PC pour les comparaisons ( >=, <=, # ) 8)Messages d'erreurs Liste des messages d'erreur generee par ASM flash avec leurs signification. CR Or @ Missing La chaine de characters de la pile ne finit pas par un CR END ou un CR @. Field Expected Instruction ne fonctionant pas sur le champ selectioné. 0-15 Expected notation 0 a 15 attendue. 1-16 Expected notation 1 a 16 attendue. Jump Too Big Saut trop long. Nonexistant Label Label non declare. HEXA Expected un chifre Hexadecimal etait attendu. Too Mutch reclusion Trop de links imbriques. Invalid Link Le link n'est pas une chaine de caracters ou le link ne se finit pas par un CR @. Nonexistant Macro ASM flash ne peut trouver la variable contennt le Macro. Invalid Macro le type de l'objet contenut dans la variable n'est pas une String.Need Bad size Taille invalide.