Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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:43] – root | referencepcode [2026/08/02 12:31] (Version actuelle) – root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ===== Instructions p-code W ===== | ===== Instructions p-code W ===== | ||
| + | |||
| Toutes les instructions p-code ont une mnémonique de 4 caractères. D' | Toutes les instructions p-code ont une mnémonique de 4 caractères. D' | ||
| Les paramètres possibles sont : | Les paramètres possibles sont : | ||
| + | |||
| * d1 : nombre non signé sur 8 bits, de 0 à 255 | * d1 : nombre non signé sur 8 bits, de 0 à 255 | ||
| * 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 : | ||
| + | |||
| * < | * < | ||
| * < | * < | ||
| Ligne 13: | Ligne 17: | ||
| * < | * < | ||
| * < | * < | ||
| - | * < | + | * < |
| - | * < | + | * < |
| - | * < | + | * < |
| - | Gestion des [[w: | + | |
| - | \\ | + | Gestion des adresses et sauts : //en construction// |
| - | Dans l' | + | |
| - | ^ Code ^ Instruction ^ Paramètres ^ Taille ^ Libellé ^ Syntaxe assembleur | + | ^Code^Instruction^Paramètres^Taille^Libellé^Syntaxe assembleur| |
| - | | 000 | VERS | d1 | 2 | Ne fait rien, donne la version du compilé qui s' | + | |000|VERS|d1|2|Ne fait rien, donne la version du compilé qui s' |
| - | | 001 | JUMP | d3 | 4 | Saut a l' | + | |001|JUMP|d3|4|Saut a l' |
| - | | 002 | DECL | d1 string | 2+d1 | Déclare une variable dont le nom est < | + | |002|DECL|d1 string|2+d1|Déclare une variable dont le nom est < |
| - | | 003 | SRCL | d3 | 4| Indique le début du code correspondant à la ligne <d3> du code source W, pour le fichier en cours (principal / include). Sert de point d' | + | |003|SRCL|d3|4|Indique le début du code correspondant à la ligne <d3> du code source W, pour le fichier en cours (principal / include). Sert de point d' |
| - | | 004 | BEXC | d3 | 4 | Donne l' | + | |004|BEXC|d3|4|Donne l' |
| - | | 005 | EXCE | | 1 | Marque la fin du bloc de traitement et le début du bloc exception, du programme ou sous-programme en cours. Si l' | + | |005|EXCE| |1|Marque la fin du bloc de traitement et le début du bloc exception, du programme ou sous-programme en cours. Si l' |
| - | | 006 | CATC | | 1 | Efface l' | + | |006|CATC| |1|Efface l' |
| - | | 007 | THRW | d3 | 4 | Lève une exception de n° <d3>. Dans le bloc traitement, provoque le saut au début du bloc exception. Dans le bloc exception, remplace l' | + | |007|THRW|d3|4|Lève une exception de n° <d3>. Dans le bloc traitement, provoque le saut au début du bloc exception. Dans le bloc exception, remplace l' |
| - | | 008 | PART | d1 | 2 | Définit le numéro de la portion de code en cours | '' | + | |008|PART|d1|2|Définit le numéro de la portion de code en cours|'' |
| - | | 009 | RETN | | 1 | Force le retour à l' | + | |009|RETN| |1|Force le retour à l' |
| - | | 010 | CALL | d1 string | 2+d1 | Appelle la //sub// < | + | |010|CALL|d1 string|2+d1|Appelle la //sub// < |
| - | | 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' | + | |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' |
| - | | 012 | SUBR | d1 string d3 | 5+d1 | Déclaration d'une sub de nom < | + | |012|SUBR|d1 string d3|5+d1|Déclaration d'une sub de nom < |
| - | | 013 | COMP | d1 | 2 | Compare les 2 éléments de la pile, les dépile puis empile 1 si le résultat de la comparaison est vrai, 0 si faux. Les opérateurs de comparaisons sont, de 1 à 9 => '' | + | |013|COMP|d1|2|Compare les 2 éléments de la pile, les dépile puis empile 1 si le résultat de la comparaison est vrai, 0 si faux. Les opérateurs de comparaisons sont, de 1 à 9 ⇒ '' |
| - | | 014 | JMPF | d3 | 4 | Force un saut dans le code si la dernière comparaison était // | + | |014|JMPF|d3|4|Force un saut dans le code si la dernière comparaison était // |
| - | | 015 | JMPT | d3 | 4 | Force un saut dans le code si la dernière comparaison était // | + | |015|JMPT|d3|4|Force un saut dans le code si la dernière comparaison était // |
| - | | 016 | ADDN | | 1 | Additionne les 2 éléments de la pile, dépile les 2 éléments et empile le résultat. Si une valeur Dynamic est empilée, un conversion numérique est essayée, avec levée d' | + | |016|ADDN| |1|Additionne les 2 éléments de la pile, dépile les 2 éléments et empile le résultat. Si une valeur Dynamic est empilée, un conversion numérique est essayée, avec levée d' |
| - | | 017 | SBCN | | 1 | Soustrait les 2 éléments de la pile, comportement identique à ADDN | '' | + | |017|SBCN| |1|Soustrait les 2 éléments de la pile, comportement identique à ADDN|'' |
| - | | 018 | MULN | | 1 | Multiplie les 2 éléments de la pile, comportement identique à ADDN | '' | + | |018|MULN| |1|Multiplie les 2 éléments de la pile, comportement identique à ADDN|'' |
| - | | 019 | DIVN | | 1 | Divise les 2 éléments de la pile, comportement identique à ADDN, exception si diviseur nul | '' | + | |019|DIVN| |1|Divise les 2 éléments de la pile, comportement identique à ADDN, exception si diviseur nul|'' |
| - | | 020 | INTE | | 1 | Prend la valeur entière de la pile, dépile et empile le résultat, conversion essayée si la valeur est un Dynamic | '' | + | |020|INTE| |1|Prend la valeur entière de la pile, dépile et empile le résultat, conversion essayée si la valeur est un Dynamic|'' |
| - | | 021 | FRAC | | 1 | Prend la valeur fractionnaire de la pile, comportement identique à INTE | '' | + | |021|FRAC| |1|Prend la valeur fractionnaire de la pile, comportement identique à INTE|'' |
| - | | 022 | NEGN | | 1 | Prend la valeur entière de la pile, comportement identique à INTE | '' | + | |022|NEGN| |1|Prend la valeur entière de la pile, comportement identique à INTE|'' |
| - | | 023 | ABSN | | 1 | Prend la valeur entière de la pile, comportement identique à INTE | '' | + | |023|ABSN| |1|Prend la valeur entière de la pile, comportement identique à INTE|'' |
| - | | 024 | MODL | d1 string | 2+d1 | Appel d'un module externe (dlfcn.h module.o ayant un seul point d' | + | |024|MODL|d1 string|2+d1|Appel d'un module externe (dlfcn.h module.o ayant un seul point d' |
| - | | 025 | PSHC | d8 | 9 | Pousse sur la pile la constante sur 64 bits d8 (en big endian) | '' | + | |025|PSHC|d8|9|Pousse sur la pile la constante sur 64 bits d8 (en big endian)|'' |
| - | | 026 | PSHV | | 1 | Empile la variable en cours //ad_var// | '' | + | |026|PSHV| |1|Empile la variable en cours //ad_var// |'' |
| - | | 027 | POPV | | 1 | Dépile dans la variable en cours //ad_var// | '' | + | |027|POPV| |1|Dépile dans la variable en cours //ad_var// |'' |
| - | | 028 | PVAR | d1 string | 2+d1 | Met dans //ad_var// l' | + | |028|PVAR|d1 string|2+d1|Met dans //ad_var// l' |
| - | | 029 | PVAH | d1 string | 2+d1 | Met dans //ad_var// l' | + | |029|PVAH|d1 string|2+d1|Met dans //ad_var// l' |
| - | | 030 | WRIT | | 1 | Ecrit dans la console (sortie standard) le contenu de la variable pointée par //ad_var// (Number ou Dynamic), ne fait rien si programme //demon// | '' | + | |030|WRIT| |1|Ecrit dans la console (sortie standard) le contenu de la variable pointée par //ad_var// (Number ou Dynamic), ne fait rien si programme //demon// |'' |
| - | | 031 | WRLN | | 1 | Identique à WRIT avec de plus un saut de ligne écrit à la fin | '' | + | |031|WRLN| |1|Identique à WRIT avec de plus un saut de ligne écrit à la fin|'' |
| - | | 032 | DSET | d1 string | 2+d1 | Affecte la chaine < | + | |032|DSET|d1 string|2+d1|Affecte la chaine < |
| - | | 033 | DEXT | d1 string | + | |033|DEXV| |1|Correspond à < |
| - | | 034 | DCMP | op d1 string | 3+d1 | Compare la chaine de la variable pointée par //ad_var// avec le contenu de la variable de nom < | + | |034|DCMP|op d1 string|3+d1|Compare la chaine de la variable pointée par //ad_var// avec le contenu de la variable de nom < |
| - | | 035 | DSTO | d1 string | 2+d1 | Correspond à < | + | |035|DSTO|d1 string|2+d1|Correspond à < |
| - | | 036 | VLET | d1 string | 2+d1 | Affectation simple de variable. La variable de nom < | + | |036|LETV|d1 string|2+d1|Affectation simple de variable. La variable de nom < |
| - | | 037 | DCAT | d1 string | 2+d1 | Concaténation : à la variable de nom < | + | |037|DCAT|d1 string|2+d1|Concaténation : à la variable de nom < |
| - | | 038 | DTON | | 1 | Convertit la variable pointée par //ad_var// en numérique et l' | + | |038|DTON| |1|Convertit la variable pointée par //ad_var// en numérique et l' |
| - | | 039 | NTOD | | 1 | Dépile et convertit le nombre en chaine, mis dans //ad_var//. | '' | + | |039|NTOD| |1|Dépile et convertit le nombre en chaine, mis dans // |
| - | | 040 | DELE | d1 string | + | |040|DELE| |1|Supprime la variable <ad_var> de la hash locale/ |
| - | | 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. | '' | + | |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.|'' |
| - | | 042 | CLAS | d1 string | + | |042|CLAS|d1 |
| - | | 043 | NLET | d1 string | 2+d1 | Instancie un objet, global, de la classe de nom < | + | |043|NLET|d1 string|2+d1|Instancie un objet, global, de la classe de nom < |
| - | | 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' | + | |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' |
| - | | 045 | PNAM | d1 string | 2+d1 | Nom du programme principal (PROG ou BACK). | '' | + | |045|PNAM|d1 string|2+d1|Nom du programme principal (PROG ou BACK).|'' |
| - | | 046 | PSH0 | | 1 | Empile la constante 0 | '' | + | |046|PSH0| |1|Empile la constante 0|'' |
| - | | 047 | PSH1 | | 1 | Empile la constante 1 | '' | + | |047|PSH1| |1|Empile la constante 1|'' |
| - | | 048 | PSH2 | | 1 | Empile la constante 2 | '' | + | |048|PSH2| |1|Empile la constante 2|'' |
| - | | 049 | PSH3 | | 1 | Empile la constante 3 | '' | + | |049|PSH3| |1|Empile la constante 3|'' |
| - | | 050 | PSH4 | | 1 | Empile la constante 4 | '' | + | |050|PSH4| |1|Empile la constante 4|'' |
| - | | 051 | PSH5 | | 1 | Empile la constante 5 | '' | + | |051|PSH5| |1|Empile la constante 5|'' |
| - | | 052 | PSH6 | | 1 | Empile la constante 6 | '' | + | |052|PSH6| |1|Empile la constante 6|'' |
| - | | 053 | PSH7 | | 1 | Empile la constante 7 | '' | + | |053|PSH7| |1|Empile la constante 7|'' |
| - | | 054 | PSH8 | | 1 | Empile la constante 8 | '' | + | |054|PSH8| |1|Empile la constante 8|'' |
| - | | 055 | PSH9 | | 1 | Empile la constante 9 | '' | + | |055|PSH9| |1|Empile la constante 9|'' |
| - | | 056 | PSHA | d1 | 2 | Empile la @VARSYS de [[w:instr: | + | |056|PSHA|d1|2|Empile la @VARSYS de [[:reference#varsys|code]] d1|'' |
| - | | 057 | PROG | | 1 | Indique que le binaire est un programme, première instruction du binaire | + | |057|SQRT| |1|Calcule |
| - | | 058 | BACK | | 1 | Indique un binaire exécutable en mode //demon//, première instruction en alternative à PROG | '' | + | |058|IEXP| |1|Puissance entiere a partir des 2 elements de la pile, dépile les 2 nombres et empile le résultat|'' |
| - | | 059 | CLIB | d1 string | 2+d1 | Appel de la library de nom < | + | |059|CLIB|d1 string|2+d1|Appel de la library de nom < |
| - | | 060 | PVAI | d1 string | 2+d1 | Met dans //ad_var// l' | + | |060|PVAI|d1 string|2+d1|Met dans //ad_var// l' |
| - | | 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 | '' | + | |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|'' |
| - | | 062 | MODN | | 1 | Divise les 2 éléments de la pile en gardant le reste uniquement (modulo), comportement identique à ADDN, exception si diviseur nul | '' | + | |062|MODN| |1|Divise les 2 éléments de la pile en gardant le reste uniquement (modulo), comportement identique à ADDN, exception si diviseur nul|'' |
| - | | 063 | INPT | | 1 | Réalise une saisie au clavier (entrée standard) et met le résultat dans la variable pointée par //ad_var//, convertie en chaine | '' | + | |063|INPT| |1|Réalise une saisie au clavier (entrée standard) et met le résultat dans la variable pointée par //ad_var//, convertie en chaine|'' |
| - | | 064 | PVAT | | 1 | Met dans le pointeur de variable //ad_var// l' | + | |064|PVAT| |1|Met dans le pointeur de variable //ad_var// l' |
| - | | 065 | TYPO | | 1 | Fait passer le programme en cours en mode //typeof//, pour ne pas générer d' | + | |065|TYPO| |1|Fait passer le programme en cours en mode //typeof//, pour ne pas générer d' |
| - | | 066 | PSHT | | 1 | Empile le type de la variable pointée par //ad_var// (typeof), -1 si inconnu. Cette instruction //annule// le mode //typeof// (annulation a faire aussi quand exception autre que var inconnue) | '' | + | |066|PSHT| |1|Empile le type de la variable pointée par //ad_var// (typeof), -1 si inconnu. Cette instruction //annule// le mode //typeof// (annulation a faire aussi quand exception autre que var inconnue)|'' |
| - | | 067 | CRAZ | | 1 | Vide la //call stack// servant au passage des paramètres avant les instruction CALL CLIB MODL | '' | + | |067|CRAZ| |1|Vide la //call stack// servant au passage des paramètres avant les instruction CALL CLIB MODL|'' |
| - | | 068 | CPSH | d1 string | 2+d1 | Empile dans la call stack la variable de nom < | + | |068|CPAN|d1 string|2+d1|Empile dans la call stack la var < |
| - | | 069 | RETT | | 1 | Dépile et si la valeur est # 0 (vrai), force le retour à l' | + | |069|RETT| |1|Dépile et si la valeur est # 0 (vrai), force le retour à l' |
| - | |070|SELE| | + | |070|SELE| |
| - | |071|RNXT| | + | |071|RNXT| |
| - | |072|CPHA| | + | |072|CPHA| |
| - | |073|PHDE|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/ | + | |073|PHDE|d1 string|2+d1|enchainement PVAH/PVAI, en dernier crée/ |
| - | |074|PIDE|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/ | + | |074|PIDE|d1 string|2+d1|enchainement PVAH/PVAI, en dernier crée/ |
| - | |075|PHDH|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/ | + | |075|PHDH|d1 string|2+d1|enchainement PVAH/PVAI, en dernier crée/ |
| - | |076|PIDH|d1 string |2+d1|enchainement PVAH/PVAI, en dernier crée/ | + | |076|PIDH|d1 string|2+d1|enchainement PVAH/PVAI, en dernier crée/ |
| - | |077|PHDO|d1 string |2+d1|enchainement PVAH/PVAI, en dernier cherche la sub < | + | |077|PHDO|d1 string|2+d1|enchainement PVAH/PVAI, en dernier cherche la sub < |
| - | |078|PIDO|d1 string | + | |078|PIDO|d1 string |
| - | |079|PHDS|d1 string d3 | + | |079|PHDS|d1 string d3 |5+d1|enchainement PVAH/PVAI, en dernier crée/ |
| - | |080|PIDS|d1 string d3 | + | |080|PIDS|d1 string d3 |5+d1|enchainement PVAH/PVAI, en dernier crée/ |
| - | |081|TYPE| | + | |081|TYPE| |
| - | |082|ROUN| | + | |082|ROUN| |
| - | |083|LENG| | + | |083|LENG| |
| - | |084|COUN| | + | |084|COUN| |
| - | |085|DCOF| | + | |085|DCOF| |
| - | |086|FIEL| | + | |086|FIEL| |
| - | |087|INDX| | + | |087|INDX| |
| - | |088|SRCH| | + | |088|SRCH| |
| - | |089|CHNG| | + | |089|CHNG| |
| - | |090|FMTA| | + | |090|FMTA| |
| - | |091|INSE| | + | |091|INSE| |
| - | |092|REMV| | + | |092|REMV| |
| - | |093|TONU| | + | |093|TONU| |
| - | |094|TOST| | + | |094|TOST| |
| - | |095|CCAT| | + | |095|CCAT| |
| - | |096|SSTR| | + | |096|SSTR| |
| - | |097|SSEP| | + | |097|SSEP| |
| - | |098|FLDF| | + | |098|FLDF| |
| - | |099|FLDS| | + | |099|FLDS| |
| - | |100|DCOS| | + | |100|DCOS| |
| - | |101|FMTT| | + | |101|FMTT| |
| - | |102|FMTS| | + | |102|FMTS| |
| - | |103|SCHS| | + | |103|SCHS| |
| - | |104|INSS| | + | |104|INSS| |
| - | |105|REMS| | + | |105|REMS| |
| - | |106|DEXH|d1 string |2+lg|ad_var_hash.string< | + | |106|DEXH|d1 string|2+d1|ad_var_hash.string< |
| - | |107|DEXI|d1 string |2+lg|ad_var_hash!string< | + | |107|DEXI|d1 string|2+d1|ad_var_hash!string< |
| - | |108|PREC|d1 | + | |108|PREC|d1 |
| - | |109|DESV| | + | |109|DESV| |
| - | |110|DESH|d1 string |2+lg|ad_var_hash.string[pile1, | + | |110|DESH|d1 string|2+d1|ad_var_hash.string[pile1, |
| - | |111|DESI|d1 string |2+lg|ad_var_hash!string[pile1, | + | |111|DESI|d1 string|2+d1|ad_var_hash!string[pile1, |
| - | |112|DEZV| | + | |112|DEZV| |
| - | |113|DEZH|d1 string |2+lg|ad_var_hash.string< | + | |113|DEZH|d1 string|2+d1|ad_var_hash.string< |
| - | |114|DEZI|d1 string |2+lg|ad_var_hash!string< | + | |114|DEZI|d1 string|2+d1|ad_var_hash!string< |
| - | |115|SDBG|d3 string |4+d3|liste des fichiers sources + num lignes (pour debugger)| '' | + | |115|SDBG|d3 string|4+d3|liste des fichiers sources + num lignes (pour debugger)|'' |
| - | |116|PHDN|d1 string |2+lg|enchainement PVAH/PVAI, en dernier cree/ | + | |116|PHDN|d1 string|2+d1|enchainement PVAH/PVAI, en dernier cree/ |
| - | |117|PIDN|d1 string |2+lg|enchainement PVAH/PVAI, en dernier cree/ | + | |117|PIDN|d1 string|2+d1|enchainement PVAH/PVAI, en dernier cree/ |
| - | |118|SADV| | + | |118|SADV| |
| - | |119|VLET| | + | |119|VLET| |
| - | |120|PHDV|d1 string |2+lg| idem VLET mais en fin de chaine de vars hash pour la var < | + | |120|PHDV|d1 string|2+d1|idem VLET mais en fin de chaine de vars hash pour la var < |
| - | |121|PIDV|d1 string |2+lg| idem VLET mais en fin de chaine de vars hash pour la var < | + | |121|PIDV|d1 string|2+d1|idem VLET mais en fin de chaine de vars hash pour la var < |
| - | |122|HCOU| | + | |122|HCOU| |
| - | | 251 | LIBR | | 1 | Indique que le binaire est une library, pas un programme exécutable directement. Première instruction du binaire. | '' | + | |123|PVHD|d1 string|2+d1|enchainement PVAH/PVAI, en dernier supprime dans la hash < |
| - | | 252 | ENDL | | 1 | Fin de library, avec libération des éléments locaux à la library uniquement | '' | + | |124|PVID|d1 string|2+d1|enchainement PVAH/PVAI, en dernier supprime dans la hash < |
| - | | 253 | TEST | | 1 | Instruction permettant d' | + | |125|SSRC| |1|sortedsearch(var) search sorted string in field|'' |
| - | | 254 | ENDS | | 1 | Fin du sous-programme en cours, avec libération des éléments locaux à la sub uniquement | '' | + | |126|SSCS| |1|search(var, |
| - | | 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' | + | |127|CPHH| |1|idem CPHA mais avec flag positionne indiquant l' |
| + | |128|CPHN|d1 string|2+d1|empile dans la call stack la var ad_var en nommant le parametre <nom> (idem CPAN) et avec flag positionne indiquant l' | ||
| + | |250|PROG| |1|Indique que le binaire est un programme, premiere instruction du binaire sinon endp|'' | ||
| + | |251|LIBR| |1|Indique que le binaire est une library, pas un programme exécutable directement. Première instruction du binaire.|'' | ||
| + | |252|ENDL| |1|Fin de library, avec libération des éléments locaux à la library uniquement|'' | ||
| + | |253|BACK| |1|Indique un binaire executable en mode demon, premiere instruction|'' | ||
| + | |254|ENDS| |1|Fin du sous-programme en cours, avec libération des éléments locaux à la sub uniquement|'' | ||
| + | |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' | ||
| + | |||