ASX (Astro Lang Executable) fájl
információ
ASX Verzió: 0.2.0
információ
Ezt megtudod nézni a ASL viewx <fájl> parancs használatával.
Fájl felépítése:
| Név | Leírás | Méret | 
|---|---|---|
| Doctype: ASX | Elmondja a fájlról, hogy tényleg ASX. | 3 bytes | 
| Verzió | Elmondja a fájl ASX verzióját. (byte.byte.byte) | 3 bytes | 
| Funkciók száma | Elmondja, hogy mennyi funkció van a fájlban. | 4 bytes | 
| Funkciók | Lásd: Funkciók | 
Funkciók:
| Név | Leírás | Méret | 
|---|---|---|
| Változók száma | Elmondja, hogy a funkcióban mennyi változó van. | 4 bytes | 
| Változók | Lásd: Változók | |
| Szövegek száma | Elmondja, hogy a funkcióban mennyi szöveg van. | 4 bytes | 
| Szövegek | Lásd: Szövegek | |
| Funkciók száma | Elmondja, hogy a funkcióban mennyi funkció meghívás van. | 4 bytes | 
| Funkciók | Lásd: Funkció meghívások | |
| Catch pos | Megmutatja a catch funkció helyzetét, csak try-ban. Normál funkciók esetén 0 | 4 bytes | 
| Instrukciók száma | Elmondja, hogy a funkcióban mennyi instrukció van. | 4 bytes | 
| Instukciók | Lásd: Instrukciók | 
Változók:
| Név | Méret | 
|---|---|
| Változó nevének hossza | 4 bytes | 
| Változó neve | |
| Változó ID-je | 3 bytes | 
| Változó kezdő ponja | 4 bytes | 
| Változó végpontja | 4 bytes | 
Szövegek:
| Név | Méret | 
|---|---|
| Szöveg ID-je | 3 bytes | 
| A szöveg hossza | 4 bytes | 
| A szöveg | 
Funkció meghívások:
| Név | Méret | 
|---|---|
| A meghívás ID-je | 3 bytes | 
| A meghívott funkció pozíciója | 4 bytes | 
Instrukciók:
információ
Minden instrukció végére hozzáadunk még 3 bit-et, így összesen 10 byte-ba belefér minden instrukció.
| OP Code - 5 bits | Rövid név | Leírás | Arg1 - 4 bits | Arg2 - 64 bits | Arg3 - 4 bits | 
|---|---|---|---|---|---|
| 0 | HLT | Befejezi a program futtatását | |||
| 1 | LDS | Betölt egy szöveget a regiszterbe | R(A) | Szöveg ID | |
| 2 | LDM | Betölti a változót a memóriából | R(A) | Változó ID | |
| 3 | LDI | Betölt egy számot a regiszterbe | R(A) | Szám | |
| 4 | LDB | Betölt egy logikai értéket a regiszterbe | R(A) | Logikai érték | |
| 5 | LDF | Betölt egy funkciót a regiszterbe | R(A) | Funkció ID | |
| 6 | LDN | Betölt egy null-t/táblát a regiszterbe | R(A) | Ez egy tábla? | |
| 7 | ASS | Hozzáad egy változó ID-t a regiszerhez | R(A) | Változó ID | |
| 8 | UNB | Leválaszja a regiszterről a változót | R(A) | ||
| 9 | MOV | Átmásolja R(A) pointerjét R(B)-be | R(A) | R(B) | |
| 10 | ADD | R(C) = R(A) + R(B) | R(A) | R(B) | R(C) | 
| 11 | SUB | R(C) = R(A) - R(B) | R(A) | R(B) | R(C) | 
| 12 | MUL | R(C) = R(A) * R(B) | R(A) | R(B) | R(C) | 
| 13 | DIV | R(C) = R(A) / R(B) | R(A) | R(B) | R(C) | 
| 14 | POW | R(C) = R(A) ^ R(B) | R(A) | R(B) | R(C) | 
| 15 | MOD | R(C) = R(A) % R(B) | R(A) | R(B) | R(C) | 
| 16 | AND | R(C) = R(A) && R(B) | R(A) | R(B) | R(C) | 
| 17 | OR | R(C) = R(A) || R(B) | R(A) | R(B) | R(C) | 
| 18 | EQ | R(C) = R(A) == R(B) | R(A) | R(B) | R(C) | 
| 19 | NEQ | R(C) = R(A) != R(B) | R(A) | R(B) | R(C) | 
| 20 | GRE | R(C) = R(A) > R(B) | R(A) | R(B) | R(C) | 
| 21 | GRQ | R(C) = R(A) >= R(B) | R(A) | R(B) | R(C) | 
| 22 | LES | R(C) = R(A) < R(B) | R(A) | R(B) | R(C) | 
| 23 | LEQ | R(C) = R(A) <= R(B) | R(A) | R(B) | R(C) | 
| 24 | NOT | R(B) = !R(A) | R(A) | R(B) | |
| 25 | JMP | Oda ugrik a kódban | Hely | ||
| 26 | CJP | Oda ugrik a kódban, ha a regiszter igaz | R(A) | Hely | |
| 27 | CAL | Meghív egy funkciót, majd a kimenetet elmenti R(B)-be | R(A) | R(B) | |
| 28 | PSH | Egy értéket belerak a következő funkció bemeneteihez | R(A) | ||
| 29 | RET | Visszad egy értéket | R(A) | ||
| 30 | GET | Lekér egy értéket a táblából R(C) = R(A)[R(B)] | R(A) | R(B) | R(C) | 
| 31 | SET | Beállít egy értéket a táblának R(A)[R(B)] = R(C) | R(A) | R(B) | R(C) | 
tanács
Ha az ENV-ből szeretnénk lekérni valamit akkor a GET-et kell használni, úgy, hogy R(A) = 0!