| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| referencepcode [2026/02/22 09:36] – 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'' | |
| |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | | |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'' | |
| |104|INSS| |1 |insert(var, chaine, field, subfield)| ''INSS'' | | |104|INSS| |1 |insert(var, chaine, field, subfield)| ''INSS'' | |
| |105|REMS| |1 |remove(var, field, subfield)| ''REMS'' | | |105|REMS| |1 |remove(var, field, subfield)| ''REMS'' | |
| |106|DEXH|lg nom |2+lg|ad_var_hash.nom<pile1, pile2> = pile3 (suite PHDE)| ''DEXH'' | | |106|DEXH|d1 string |2+lg|ad_var_hash.string<pile1, pile2> = pile3 (suite PHDE)| ''DEXH'' | |
| |107|DEXI|lg nom |2+lg|ad_var_hash!nom<pile1, pile2> = pile3 (suite PIDE)| ''DEXI'' | | |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'' | | |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'' | | |109|DESV| |1 |ad_var[pile1, pile2] = pile3 (suite PVAR)| ''DESV'' | |
| |110|DESH|lg nom |2+lg|ad_var_hash.nom[pile1, pile2] = pile3 (suite PHDE/PIDE)| ''DESH'' | | |110|DESH|d1 string |2+lg|ad_var_hash.string[pile1, pile2] = pile3 (suite PHDE/PIDE)| ''DESH'' | |
| |111|DESI|lg nom |2+lg|ad_var_hash!nom[pile1, pile2] = pile3 (suite PHDE/PIDE)| 'DESI''' | | |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'' | | |112|DEZV| |1 |ad_var<pile1, pile2>[pile3, pile4] = pile5 (suite PVAR)| ''DEZV'' | |
| |113|DEZH|lg nom |2+lg|ad_var_hash.nom<pile1, pile2>[pile3, pile4] = pile5 (suite PHDE/PIDE)| ''DEZH'' | | |113|DEZH|d1 string |2+lg|ad_var_hash.string<pile1, pile2>[pile3, pile4] = pile5 (suite PHDE/PIDE)| ''DEZH'' | |
| |114|DEZI|lg nom |2+lg|ad_var_hash!nom<pile1, pile2>[pile3, pile4] = pile5 (suite PHDE/PIDE)| ''DEZI'' | | |114|DEZI|d1 string |2+lg|ad_var_hash!string<pile1, pile2>[pile3, pile4] = pile5 (suite PHDE/PIDE)| ''DEZI'' | |
| |115|SDBG|d3 chaine |4+d3|liste des fichiers sources + num lignes (pour debugger)| ''SDBG'' | | |115|SDBG|d3 string |4+d3|liste des fichiers sources + num lignes (pour debugger)| ''SDBG <string>'' | |
| |116|PHDN|lg nom |2+lg|enchainement PVAH/PVAI, en dernier cree/remplace dans la hash <ad_var_hash> la var <nom> qui sera utilisée ensuite par NLET (mis dans <ad_var>)| ''PHDN'' | | |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|lg nom |2+lg|enchainement PVAH/PVAI, en dernier cree/remplace dans la hash <ad_var_hash> (avec indirection) la var <nom> qui sera utilisée ensuite par NLET (mis dans <ad_var>)| ''PIDN'' | | |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'' | | |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'' | | |119|VLET| |1 |affectation de variable sans expression, traite tous les types. Correspond a : ad_var = ad_var_sav (copie)| ''VLET'' | |
| |120|PHDV|lg nom |2+lg| idem VLET mais en fin de chaine de vars hash| ''PHDV'' | | |120|PHDV|d1 string |2+lg| idem VLET mais en fin de chaine de vars hash pour la var <string>| ''PHDV <string>'' | |
| |121|PIDV|lg nom |2+lg| idem VLET mais en fin de chaine de vars hash avec indirection| ''PIDV'' | | |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'' | | |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'' | |