| Prochaine révision | Révision précédente |
| referencepcode [2025/12/19 19:38] – créée root | referencepcode [2026/04/03 14:33] (Version actuelle) – root |
|---|
| * d3 : nombre non signé sur 24 bits, de 0 à 16777215 (en big-endian) | * d3 : nombre non signé sur 24 bits, de 0 à 16777215 (en big-endian) |
| * d8 : nombre non signé sur 64 bits (en big-endian) | * d8 : nombre non signé sur 64 bits (en big-endian) |
| * string : chaîne de caractères (mono-octet) | * string : chaîne de caractères (mono-octet), précédée de sa longueur, soit sur 1 octet (d1), soit sur 3 octets (d3) |
| Concernant la syntaxe assembleur, les paramètres ont la signification suivante : | Concernant la syntaxe assembleur, les paramètres ont la signification suivante : |
| * <num3> : numérique non signé sur 3 chiffres | * <num3> : numérique non signé sur 3 chiffres |
| * <oper> : chaîne valant ''EQ'' ''NE'' ''LT'' ''GT'' ''LE'' ''GE'' ''AND'' ''OR'' ''NOT'' | * <oper> : chaîne valant ''EQ'' ''NE'' ''LT'' ''GT'' ''LE'' ''GE'' ''AND'' ''OR'' ''NOT'' |
| * <operdyn> : chaîne valant ''EQ'' ''NE'' ''LT'' ''GT'' ''LE'' ''GE'' | * <operdyn> : chaîne valant ''EQ'' ''NE'' ''LT'' ''GT'' ''LE'' ''GE'' |
| * <varsys> : chaîne de caractères contenant le nom d'une [[w:instr:varsys|variable système]] | * <varsys> : chaîne de caractères contenant le nom d'une [[reference#varsys|variable système]] |
| Gestion des [[w:pcode:addr|adresses et sauts]].\\ | Gestion des adresses et sauts : //en construction//.\\ |
| \\ | \\ |
| Dans l'ordre de la traduction numérique de chaque instruction. La taille donne le nombre d'octets pris par chaque instruction. | Dans l'ordre de la traduction numérique de chaque instruction. La taille donne le nombre d'octets pris par chaque instruction. |
| | 008 | PART | d1 | 2 | Définit le numéro de la portion de code en cours | ''PART <num3>'' | | | 008 | PART | d1 | 2 | Définit le numéro de la portion de code en cours | ''PART <num3>'' | |
| | 009 | RETN | | 1 | Force le retour à l'appelant, valide dans le bloc de traitement et le bloc exception | ''RETN'' | | | 009 | RETN | | 1 | Force le retour à l'appelant, valide dans le bloc de traitement et le bloc exception | ''RETN'' | |
| | 010 | CALL | d1 string | 2+d1 | TODO | | | | 010 | CALL | d1 string | 2+d1 | Appelle la //sub// <string> | ''CALL _''\\ ''CALL <string>'' | |
| | 011 | PARM | d1 string | 2+d1 | Dépile dans la call stack un pointeur et créé la variable PARAM correspondante dans la hash locale sur ce nom pour ce pointeur. A utiliser avec l'instruction de déclaration d'une sub SUBR | ''PARM <string>'' | | | 011 | PARM | d1 string | 2+d1 | Dépile dans la call stack un pointeur et créé la variable PARAM correspondante dans la hash locale sur ce nom pour ce pointeur. A utiliser avec l'instruction de déclaration d'une sub SUBR | ''PARM <string>'' | |
| | 012 | SUBR | d1 string d3 | 5+d1 | Déclaration d'une sub de nom <string> (remplace DECL pour les sub) et force un saut dans le code après le ENDS, en relatif par rapport à l'instruction SUBR | ''SUBR <string>'' | | | 012 | SUBR | d1 string d3 | 5+d1 | Déclaration d'une sub de nom <string> (remplace DECL pour les sub) et force un saut dans le code après le ENDS, en relatif par rapport à l'instruction SUBR | ''SUBR <string>'' | |
| | 040 | DELE | d1 string | 2+d1 | Supprime la variable de nom <string> de la hash locale/globale et effectue les libérations associées (sauf si objet/sub) | ''DELE <string>'' | | | 040 | DELE | d1 string | 2+d1 | Supprime la variable de nom <string> de la hash locale/globale et effectue les libérations associées (sauf si objet/sub) | ''DELE <string>'' | |
| | 041 | HLET | | 1 | Affecte à la variable pointée par //ad_var// une hashtable vierge. Le modulo et séparateur sont dans la pile, si 0 une valeur par défaut est utilisée. | ''HLET'' | | | 041 | HLET | | 1 | Affecte à la variable pointée par //ad_var// une hashtable vierge. Le modulo et séparateur sont dans la pile, si 0 une valeur par défaut est utilisée. | ''HLET'' | |
| | 042 | CLAS | d1 string | 2+d1 | Créé une classe globale de nom <string> héritée de la classe trouvée sur la pile (avec dépilage). <color #ed1c24>TODO</color> | | | | 042 | CLAS | d1 string | 2+d1 | Créé une classe globale de nom <string> héritée de la classe trouvée sur la pile (avec dépilage). | ''CLAS <string>'' | |
| | 043 | NLET | d1 string | 2+d1 | Instancie un objet, global, de la classe de nom <string>. La variable pointée par //ad_var// prend le type VAR_PARAM et pointe sur l'objet créé. | ''NLET <string>'' | | | 043 | NLET | d1 string | 2+d1 | Instancie un objet, global, de la classe de nom <string>. La variable pointée par //ad_var// prend le type VAR_PARAM et pointe sur l'objet créé. | ''NLET <string>'' | |
| | 044 | INCL | d1 string | 2+d1 | Include dans le source W : indique un changement de fichier source en cours (utile au debugger). Si <d1> = 0, correspond à un retour d'include. | ''INCL <string>''\\ ''INCL'' | | | 044 | INCL | d1 string | 2+d1 | Include dans le source W : indique un changement de fichier source en cours (utile au debugger). Si <d1> = 0, correspond à un retour d'include. | ''INCL <string>''\\ ''INCL'' | |
| | 054 | PSH8 | | 1 | Empile la constante 8 | ''PSH8'' | | | 054 | PSH8 | | 1 | Empile la constante 8 | ''PSH8'' | |
| | 055 | PSH9 | | 1 | Empile la constante 9 | ''PSH9'' | | | 055 | PSH9 | | 1 | Empile la constante 9 | ''PSH9'' | |
| | 056 | PSHA | d1 | 2 | Empile la @VARSYS de [[w:instr:varsys|code]] d1 | ''PSHA <varsys>'' | | | 056 | PSHA | d1 | 2 | Empile la @VARSYS de [[reference#varsys|code]] d1 | ''PSHA <varsys>'' | |
| | 057 | PROG | | 1 | Indique que le binaire est un programme, première instruction du binaire | ''PROG'' | | | 057 | PROG | | 1 | Indique que le binaire est un programme, première instruction du binaire | ''PROG'' | |
| | 058 | BACK | | 1 | Indique un binaire exécutable en mode //demon//, première instruction en alternative à PROG | ''BACK'' | | | 058 | BACK | | 1 | Indique un binaire exécutable en mode //demon//, première instruction en alternative à PROG | ''BACK'' | |
| | 059 | CLIB | d1 string | 2+d1 | Appel de la library de nom <string>. Les paramètres sont pris de la call stack. ''<string>.wp'' est le nom du fichier binaire qui est chargé en mémoire (binaire W) <color #ed1c24>TODO</color> | | | | 059 | CLIB | d1 string | 2+d1 | Appel de la library de nom <string>. Les paramètres sont pris de la call stack. ''<string>.wp'' est le nom du fichier binaire qui est chargé en mémoire (binaire W) | ''CLIB <string>'' | |
| | 060 | PVAI | d1 string | 2+d1 | Met dans //ad_var// l'adresse de la variable lue de la hashtable pointée elle aussi par //ad_var//, mais via une indirection : la variable de nom <string> donne le //vrai// nom de la variable à chercher (+ gestion mode "typeof") | ''PVAI <string>'' | | | 060 | PVAI | d1 string | 2+d1 | Met dans //ad_var// l'adresse de la variable lue de la hashtable pointée elle aussi par //ad_var//, mais via une indirection : la variable de nom <string> donne le //vrai// nom de la variable à chercher (+ gestion mode "typeof") | ''PVAI <string>'' | |
| | 061 | DIVE | | 1 | Divise les 2 éléments de la pile en gardant la partie entière uniquement, comportement identique à ADDN, exception si diviseur nul | ''DIVE'' | | | 061 | DIVE | | 1 | Divise les 2 éléments de la pile en gardant la partie entière uniquement, comportement identique à ADDN, exception si diviseur nul | ''DIVE'' | |
| | 068 | CPSH | d1 string | 2+d1 | Empile dans la call stack la variable de nom <string>. A utiliser avant les instructions CALL CLIB MODL | ''CPSH <string>'' | | | 068 | CPSH | d1 string | 2+d1 | Empile dans la call stack la variable de nom <string>. A utiliser avant les instructions CALL CLIB MODL | ''CPSH <string>'' | |
| | 069 | RETT | | 1 | Dépile et si la valeur est # 0 (vrai), force le retour à l'appelant, valide dans le bloc de traitement et le bloc exception | ''RETT'' | | | 069 | RETT | | 1 | Dépile et si la valeur est # 0 (vrai), force le retour à l'appelant, valide dans le bloc de traitement et le bloc exception | ''RETT'' | |
| | | | | | | | | |070|SELE| |1 |initialise la var de ad_var pour foreach dynamic/hashtable| ''SELE'' | |
| | |071|RNXT| |1 |lit l'item suivant de ad_var et met le résultat dans la var empilée dans la call stak (dépilage au passage)| ''RNXT'' | |
| | |072|CPHA| |1 |empile dans la call stack la var ad_var en param| ''CPHA'' | |
| | |073|PHDE|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/remplace dans la hash la var <string> avec le contenu de la pile (number/dynamic) - let| ''PHDE <string>'' | |
| | |074|PIDE|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/remplace dans la hash (avec indirection) la var <string> avec le contenu de la pile (number/dynamic) - let| ''PIDE <string>'' | |
| | |075|PHDH|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/remplace dans la hash la var hash <string> (la pile contient modulo/séparateur) - let| ''PHDH <string>'' | |
| | |076|PIDH|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/remplace dans la hash (avec indirection) la var hash <string> (la pile contient modulo/séparateur) - let| ''PIDH <string>'' | |
| | |077|PHDO|d1 string |2+d1|enchainement PVAH/PVAI, en dernier cherche la sub <string> dans la classe, si pas trouve dans les classes mères| ''PJDO <string>'' | |
| | |078|PIDO|d1 string |2+d1|enchainement PVAH/PVAI, en dernier cherche la sub <string> (avec indirection) dans la classe, si pas trouve dans les classes mères| ''PIDO <string>'' | |
| | |079|PHDS|d1 string d3 |5+d1|enchainement PVAH/PVAI, en dernier crée/remplace dans la hash la sub <string>| ''PHDS <string> <d3>'' | |
| | |080|PIDS|d1 string d3 |5+d1|enchainement PVAH/PVAI, en dernier crée/remplace dans la hash (avec indirection) la sub <string>| ''PIDS <string> <d3>'' | |
| | |081|TYPE| |1 |trouve le type de l'élément de la pile num/str/vide, dépile + met le résultat| ''TYPE'' | |
| | |082|ROUN| |1 |arrondi l'élément pile2 sur le nombre de décimales pile1, dépile et arrondi l'élément de la pile\\ si nb décimales n'est pas 0 1 2 3 4 5, utilise la précision courante| ''ROUN'' | |
| | |083|LENG| |1 |calcule la longueur de l'élément de la pile (comme si chaine), dépile + met le résultat| ''LENG'' | |
| | |084|COUN| |1 |compte le nombre de caractère (1er de pile2) trouve dans pile1, dépile + met le résultat| ''COUN'' | |
| | |085|DCOF| |1 |dcount(var), comme le nombre de champs, en prenant le séparateur courant| ''DCOF'' | |
| | |086|FIEL| |1 |"fonction ""field"" : chercher dans la chaine pile1, avec le caractère pile2 (1er car), le champ no pile3, dépile + met le résultat| ''FIEL'' | |
| | |087|INDX| |1 |index(var, search, occ)| ''INDX'' | |
| | |088|SRCH| |1 |search(var) search string in field| ''SRCH'' | |
| | |089|CHNG| |1 |change(var, cherche, remplace)| ''CHNG'' | |
| | |090|FMTA| |1 |format - alignment (left right center)| ''FMTA'' | |
| | |091|INSE| |1 |insert(var, chaine, field)| ''INSE'' | |
| | |092|REMV| |1 |remove(var, field)| ''REMV'' | |
| | |093|TONU| |1 |tonum : force la conversion de l'élément de la pile en numérique, exception si non numérique| ''TONU'' | |
| | |094|TOST| |1 |tostring : force la conversion de l'élément de la pile en chaine| ''TOST'' | |
| | |095|CCAT| |1 |concat '':'' : concatène pile1 et pile2, dépile 2 fois + met le résultat"| ''CCAT'' | |
| | |096|SSTR| |1 |substring ou notation [9,9] : prend la substring de la pile + met le résultat (base 0 pour début, longueur ; si 1 seul param : part de la fin (que longueur))| ''SSTR'' | |
| | |097|SSEP| |1 |set sep : prend les séparateur de la pile + dépile les 2 + maj séparateur| ''SSEP'' | |
| | |098|FLDF| |1 |idem FIEL mais utilise le séparateur @currfm (pour faire x{1})| ''FLDF'' | |
| | |099|FLDS| |1 |idem FIEL mais utilise le séparateur @currfm et @currvm (pour faire x{1,2})| ''FLDS'' | |
| | |100|DCOS| |1 |dcount(var, numchamp)| ''DCOS'' | |
| | |101|FMTT| |1 |"format ""trim"""| ''FMTT'' | |
| | |102|FMTS| |1 |"format ""surround"""| ''FMTS'' | |
| | |103|SCHS| |1 |search(var, numField) search string in subfield of the field given| ''SCHS'' | |
| | |104|INSS| |1 |insert(var, chaine, field, subfield)| ''INSS'' | |
| | |105|REMS| |1 |remove(var, field, subfield)| ''REMS'' | |
| | |106|DEXH|d1 string |2+lg|ad_var_hash.string<pile1, pile2> = pile3 (suite PHDE)| ''DEXH'' | |
| | |107|DEXI|d1 string |2+lg|ad_var_hash!string<pile1, pile2> = pile3 (suite PIDE)| ''DEXI'' | |
| | |108|PREC|d1 |2 |force la précision a <d1> décimales (de 0 a 5)| ''PREC <d1>'' | |
| | |109|DESV| |1 |ad_var[pile1, pile2] = pile3 (suite PVAR)| ''DESV'' | |
| | |110|DESH|d1 string |2+lg|ad_var_hash.string[pile1, pile2] = pile3 (suite PHDE/PIDE)| ''DESH'' | |
| | |111|DESI|d1 string |2+lg|ad_var_hash!string[pile1, pile2] = pile3 (suite PHDE/PIDE)| ''DESI'' | |
| | |112|DEZV| |1 |ad_var<pile1, pile2>[pile3, pile4] = pile5 (suite PVAR)| ''DEZV'' | |
| | |113|DEZH|d1 string |2+lg|ad_var_hash.string<pile1, pile2>[pile3, pile4] = pile5 (suite PHDE/PIDE)| ''DEZH'' | |
| | |114|DEZI|d1 string |2+lg|ad_var_hash!string<pile1, pile2>[pile3, pile4] = pile5 (suite PHDE/PIDE)| ''DEZI'' | |
| | |115|SDBG|d3 string |4+d3|liste des fichiers sources + num lignes (pour debugger)| ''SDBG <string>'' | |
| | |116|PHDN|d1 string |2+lg|enchainement PVAH/PVAI, en dernier cree/remplace dans la hash <ad_var_hash> la var <string > qui sera utilisée ensuite par NLET (mis dans <ad_var>)| ''PHDN <string>'' | |
| | |117|PIDN|d1 string |2+lg|enchainement PVAH/PVAI, en dernier cree/remplace dans la hash <ad_var_hash> (avec indirection) la var <string > qui sera utilisée ensuite par NLET (mis dans <ad_var>)| ''PIDN <string>'' | |
| | |118|SADV| |1 |sauvegarde ad_var dans ad_var_sav (suite enchainement PVAR/PVAH/PVAI)| ''SADV'' | |
| | |119|VLET| |1 |affectation de variable sans expression, traite tous les types. Correspond a : ad_var = ad_var_sav (copie)| ''VLET'' | |
| | |120|PHDV|d1 string |2+lg| idem VLET mais en fin de chaine de vars hash pour la var <string>| ''PHDV <string>'' | |
| | |121|PIDV|d1 string |2+lg| idem VLET mais en fin de chaine de vars hash pour la var <string>, avec indirection| ''PIDV <string>'' | |
| | |122|HCOU| |1 |idem PVAH/PVAI mais renvoi le nombre d'élément de la hash/objet en cours (dans ad_var = e->int_number)| ''HCOU'' | |
| | 251 | LIBR | | 1 | Indique que le binaire est une library, pas un programme exécutable directement. Première instruction du binaire. | ''LIBR'' | | | 251 | LIBR | | 1 | Indique que le binaire est une library, pas un programme exécutable directement. Première instruction du binaire. | ''LIBR'' | |
| | 252 | ENDL | | 1 | Fin de library, avec libération des éléments locaux à la library uniquement <color #ed1c24>TODO</color> | ''ENDL'' | | | 252 | ENDL | | 1 | Fin de library, avec libération des éléments locaux à la library uniquement | ''ENDL'' | |
| | 253 | TEST | | 1 | Instruction permettant d'exécuter du code, utilisé dans le cadre du développement de W. Ne fait rien en fonctionnement normal | ''TEST'' | | | 253 | TEST | | 1 | Instruction permettant d'exécuter du code, utilisé dans le cadre du développement de W. Ne fait rien en fonctionnement normal | ''TEST'' | |
| | 254 | ENDS | | 1 | Fin du sous-programme en cours, avec libération des éléments locaux à la sub uniquement | ''ENDS'' | | | 254 | ENDS | | 1 | Fin du sous-programme en cours, avec libération des éléments locaux à la sub uniquement | ''ENDS'' | |
| | 255 | ENDP | | 1 | Fin du programme principale en cours, en effectuant toutes les libérations mémoires. Instruction appelée de manière forcée en cas d'erreur non gérable par une exception | ''ENDP'' | | | 255 | ENDP | | 1 | Fin du programme principale en cours, en effectuant toutes les libérations mémoires. Instruction appelée de manière forcée en cas d'erreur non gérable par une exception | ''ENDP'' | |