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
!