Po drátě 2: Instrukční sada virtuální mašiny z úlohy č. 9
V následující tabulce n reprezentuje libovolné číslo, s libovolný řetězec, b boolean (logickou hodnotu), x cokoliv. V případě nekompatibilního typu dochází automaticky ke konverzi. Pokud je zásobník prázdný, je parametr chápán jako nula nebo prázdný řetězec.
n : | zduplikuje n-tou položku zásobníku na jeho vrchol |
. | zduplikuje položku na vrcholu zásobníku |
n ; | přesune n-tou položku zásobníku na jeho vrchol |
, | prohodí vrchní dvě položky zásobníku |
x _ | odstraní vrchní položku zásobníku |
n n - | vloží na zásobník rozdíl čísel |
n n + | vloží na zásobník součet čísel |
n n * | vloží na zásobník součin čísel |
n n / | vloží na zásobník podíl čísel |
n n % | vloží na zásobník zbytek po dělení dvou čísel |
( | dekrementuje (zmenší o 1) položku na vrcholu zásobníku |
) | inkrementuje (zvětší o 1) položku na vrcholu zásobníku |
n n < | porovná dvě čísla, vloží na zásobník 1, pokud je první menší, jinak vloží 0 |
n n > | porovná dvě čísla, vloží na zásobník 1, pokud je první větší, jinak vloží 0 |
n n = | porovná dvě čísla, vloží na zásobník 1, pokud jsou stejná, jinak vloží 0 |
n n ! | porovná dvě čísla, vloží na zásobník 1, pokud jsou různá, jinak vloží 0 |
b ~ | vloží na zásobník logický NOT booleanu |
b b | | vloží na zásobník logický OR dvou booleanů |
b b & | vloží na zásobník logický AND dvou booleanů |
b b ^ | vloží na zásobník logický XOR dvou booleanů |
s s " | vloží na zásobník zřetězení dvou řetězců |
@ | vloží na zsáobník prázdný řetězec |
' | vloží na zásobník znak mezera |
s n # | vloží na zásobník n-tý znak z řetězce |
s s { | porovná dva řetězce, vloží na zásobník 1, pokud je první lexikograficky menší, jinak vloží 0 |
s s } | porovná dva řetězce, vloží na zásobník 1, pokud je první lexikograficky větší, jinak vloží 0 |
s s $ | porovná dva řetězce, vloží na zásobník 1, pokud jsou stejné, jinak vloží 0 |
s s ` | porovná dva řetězce, vloží na zásobník 1, pokud jsou různé, jinak vloží 0 |
n b ? | skočí na adresu n, je-li daný boolean 1 |
n [ | call: vloží na zásobník aktuální adresu a skočí na adresu n |
n ] | ret/jump: skočí na adresu n |
s \ | spustí daný program |
Ostatní nealfanumerické znaky jsou NOP (operace, která nic nedělá).