Alkosd meg a saját virtuális gépedet - mindössze 250 sornyi C kódban!

Címkék
Ebben az útmutatóban megtanítom, hogyan írhatsz saját virtuális gépet (VM), amely képes assembly nyelvű programokat futtatni, például a barátom 2048 játékát vagy az én Roguelike-omat. Ha tudsz programozni, de szeretnél mélyebb betekintést nyerni abba, hogy mi zajlik egy számítógép belsejében, és jobban megérteni a programozási nyelvek működését, akkor ez a projekt neked szól. Saját virtuális gép írása talán ijesztőnek hangzik, de megígérem, hogy meglepően egyszerűnek és tanulságosnak fogod találni.

A tutorial itt.

Hozzászólások

Megjegyzés: ez az egyetemeken oktatott LC3 architektúrát szimulálja, amit direkt oktatási céllal azért terveztek, hogy könnyű legyen implementálni. Ennek ellenére minden olyan elemet tartalmaz, mint egy igazi ISA is (immediate, indirect immediate, absolute/relative addressing, stb.). Ellenben egy igazi ISA-val, az utasításkódolása pofonegyszerű, és látványosan jól implementálható (pl. az utasítás bizonyos bitje jelzi minden utasításban, hogy relatív-e a hivatkozása).

A fordítóval párhuzamosan fejlesztettem. Csináltam egy alapot (load/store/push/jump/call), aztán ahogy írtam a fordító kódgenerátorát, úgy pofozgattam, hogy összesimuljanak a lehető legkevesebb kacskaringóval (ekkor került be a többféle push, a lebegőpontos-integer konvertáró, illetve a load-nál az sign extend paraméter, amiről csúnyán megfeledkeztem az elején).