CMasina simulaator VAM
CMasina jaoks on olemas simulaator, Vam. Kõige lihtsam on seda paigaldada, kui tõmmata järgmine jar: vam.jar.
Näide
Selles keskkonnas kahjuks ei saa redigeerida faili, mistõttu tuleks järgmine fail salvestada nime all demo.cma. Sellel programmil on aga väike viga. Kuigi see ei olnud meelega, siis võiksite ikkagi üritada ise välja nuputada, kus viga on:
loadc 5 // 0: n = 5; loadc 1 // 1: i = 1; loadc 1 // 2: r = 1; _while: // i <= n LOADA 1 LOADA 0 LEQ JUMPZ _end // r = r * i; LOADA 2 LOADA 1 MUL STOREA 2 POP // i = i + 1; LOADA 1 LOADC 0 ADD STOREA 1 POP JUMP _while _end: HALT
Proovige VAMi simulatsiooni abil välja nuputada, mida see funktsioon arvutab ehk mis võrdus kehtib muutujate vahel, kui käivitamine on lõppenud.
Harjutus
Transleerige järgmine koodiosa CMa baitkoodi keskkonnas {n→0, x→1, z→2}:
z = 1; while (n > 0) { // GR if (n & 1) // AND z = z * x; // MUL x = x * x; // MUL n = n / 2; // DIV }
Selleks, et seda VAMis käivitada peab anda muutujatele mingid algväärtused. Kuna n ja x on siin mõeldud sisendiks, siis võib näiteks proovida sisendiga:
LOADC 11 /* n */ LOADC 3 /* x */ LOADC 0 /* z */
Muutuja z on koodijuppi väljundiks ja seda algväärtustatakse siin. Kes on laisk võib siin ära optimeerida esimest omistust ja lihtsalt panna "loadc 1". Sisendite 3 ja 11 korral peaks lõpptulemuseks olema magasini tipus 177147.
Mida see koodijupp arvutab?