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