108 lines
No EOL
3.5 KiB
Markdown
108 lines
No EOL
3.5 KiB
Markdown
---
|
|
sidebar_position: 5
|
|
description: 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)||
|
|
|
|
## 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](#változók)||
|
|
|Szövegek száma|Elmondja, hogy a funkcióban mennyi szöveg van.|4 bytes|
|
|
|Szövegek|Lásd: [Szövegek](#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](#funkció-meghívások)||
|
|
|Instukciók|Lásd: [Instrukciók](#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`!
|
|
|
|
::: |