Skip to content
valenj18 edited this page Nov 28, 2012 · 27 revisions

Instrukce pro virtuální stroj

  • +,-,*,/, ==, !=, +=, -= načte 2 hodnoty ze zásobníku a vrátí výsledek, bez parametrů.
  • ++, -- načte 1 hodnotu ze zásobníků a vrátí výsledek, bez parametrů.
  • new - vytvoří objekt a referenci dá na zásobník, parametr je jméno třídy
  • new_array - vytvoří pole a referenci dá na zásobník, délku pole načte ze zásobníku.
  • jmp - relativní skok, nepoužívá zásobník, parametr offset.
  • call - volání funkce, vytvoří rámec zásobníku, parametr jméno třídy a ukazatel na funkci - parametry jsou řazené pozadu (na vrcholu zásobníku je 1. parametr)
  • return, return_void - návrat z funkce, zruší rámec zásobníku, bez parametrů.
  • if, if_gt, if_lt, if_ge, if_le, if_ne - podmíněný skok, parametr offset, načte hodnotu ze zásobníku.
  • push - nahraje konstantu na zásobník, parametr konstanta.
  • load - nahraje na zásobník hodnotu instanční proměnné, parametr číslo slotu, ze zásobníku načte referenci na objekt.
  • store - uloží hodnotu instanční proměnné, parametr číslo slotu, ze zásobníku načte referenci na objekt a hodnotu (reference je na vrcholu zásobníku).
  • load_local - nahraje hodnotu ze slotu na zásobník, parametr číslo slotu.
  • store_local - uloží hodnotu ze zásobníku do slotu, parametr číslo slotu.
  • pop - odebere hodnotu ze zásobníku, bez parametrů (potřebné pokud je ignorovaná návratová hodnota funkce)
  • call_dynamic - volání metody, vytvoří rámec zásobníku, parametr jméno metody - parametry jsou řazené pozadu (na vrcholu zásobníku je 1. parametr), 1. parametr je ukazatel na objekt nad kterým se volá metoda
  • load_array - nahraje hodnotu z pole na zásobník, načte index a referenci na pole ze zásobníku (reference na vrcholu), bez parametrů
  • store_array - uloží hodnotu ze zásobníku do pole, načte index, hodnotu a referenci na pole ze zásobníku (reference na vrcholu, pak index a nakonec hodnota), bez parametrů

Jméno metody a třídy je ukazatel do constant poolu.

Možná by to chtělo instrukci na duplikaci vrcholu zásobníku, ale nevím jestli to zbytečně nezkomplikuje generování bajkódu.

Clone this wiki locally