Maszyna wirtualna Viua Poznańska Impreza Wolnego Oprogramowania 2015
Kompilacja maszyny kompilator C++11 (g++ 5.2.0) bibliotoka standardowa C++ biblioteka linenoise (debugger)
Kompilacja maszyny $ git clone –recursive -b devel ... $ ./configure $ make $ make install
Maszyna wirtualna Viua (narzędzia) assembler / disassembler CPU debugger
Maszyna wirtualna Viua (narzędzia) Assembler / Disassembler
Maszyna wirtualna Viua (narzędzia) CPU
Maszyna wirtualna Viua (narzędzia) Debugger
Uruchamianie programów pod Viua Translacja Łączenie Wykonanie
Kod źródłowy ↓ viua-asm Bytecode Translacja Kod źródłowy ↓ viua-asm Bytecode
Łączenie Statyczne Dynamiczne
Viua Architektura
Instrukcje Rejestry Stosy i wywołania funkcji Viua: Architektura Instrukcje Rejestry Stosy i wywołania funkcji
zestaw 91 instrukcji – podstawowe operacje Viua: Instrukcje zestaw 91 instrukcji – podstawowe operacje
operacje na liczbach: całkowitych: i- zmiennoprzecinkowych: f- Viua: Instrukcje operacje na liczbach: całkowitych: i- zmiennoprzecinkowych: f-
Viua: Instrukcje: Operacje na liczbach -store -add -sub -mul -div -lt -lte -gt -gte -eq
Viua: Instrukcje: Liczby całkowite izero iinc idec
Viua: Instrukcje: Konwersje itof ftoi stoi stof
Viua: Instrukcje: Wektory vec vinsert vpush vpop vat vlen
Viua: Instrukcje: Boolean not and or
Viua: Instrukcje: Manipulacja rejestrami move copy ref swap free empty isnull ress
clbind closure function fcall Viua: Instrukcje: HOF clbind closure function fcall
Viua: Instrukcje: Wywołania funkcji frame param paref call arg
Viua: Instrukcje: Rozgałęzienia jump branch
Viua: Instrukcje: Obsługa wyjątków try throw catch pull enter leave
Viua: Instrukcje: Dołączanie modułów import link
Viua: Instrukcje: Klasy i prototypy class derive attach register prototype
Viua: Instrukcje: Obiektowość new msg
Viua: Instrukcje: Inne nop end halt
Viua: Instrukcje - operandy indeksy rejestrów inne wartości
Viua: Instrukcje - operandy indeksy rejestrów: move 0 1
Viua: Instrukcje - operandy inne wartości: call 1 std::io::getline
Viua: Instrukcje - operandy zasada pierwszego operandu
Viua: Instrukcje - operandy .function: main istore 1 42 frame ^[(param 0 1)] call 2 square print 2 istore 0 0 end .end
3 zestawy rejestrów rejestr wymiany Viua: Rejestry 3 zestawy rejestrów rejestr wymiany
Viua: Rejestry... lokalne
Viua: Rejestry... statyczne
Viua: Rejestry... globalne
pojedynczy rejestr wymiany Viua: Rejestry pojedynczy rejestr wymiany
Viua: Zawartość rejestrów nic obiekt referencja
parametr → kopia wskaźnika argument → kopia obiektu Wywołania funkcji parametr → kopia wskaźnika argument → kopia obiektu