AstroLang/docs/docs/asx.md

3.5 KiB

sidebar_position description
5 Az ASX fájl leírása

ASX (Astro Lang Executable) fájl


:::info

ASX Verzió: 0.2.0

:::

:::info

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
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:

:::info

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)

:::tip

Ha az ENV-ből szeretnénk lekérni valamit akkor a GET-et kell használni, úgy, hogy R(A) = 0!

:::