Mikro-interpretér 3

V predchádzajúcom príspevku som opísal mikro-interpretér na obrázku 1.
Obrázok 1: Mikro-interpretér 2.
Rozhodol som sa rozšíriť interpretér o načítavanie hodnôt zo štandardného vstupu. Toto umožní skompilovať interpretér a potom načítať ľubovoľný program do pamäte. Najprv som nahradil dátový typ int typom int64_t, aby som zväčšil rozsah čísiel v pamäti. Potom som napísal funkciu nacitaj_kladne_cislo, ktorá načíta kladné číslo zo štandardného vstupu programu. Maximálny počet číslic čísla je 18. Takéto čísla sa ešte zmestia do dátového typu int64_t. Funkcia nacitaj_kladne_cislo je uvedená v súbore rozpoznanie.h. Okrem tejto funkcie, súbor rozpoznanie.h obsahuje aj funkciu nacitaj_cislo, ktorá načíta ľubovoľné celé číslo (v obmedzenom rozsahu 18 číslic). Program sa rozrástol, preto som ho rozdelil do viacerých súborov.
Obrázok 2: Funkcia, ktorá načíta kladné (celé) číslo zo štandardného vstupu programu.
Program s pamäte som premiestnil do súboru, ktorý je na Obrázku 4. Program v súbore začína s  3 magickými číslami, ktoré určia počet inštrukcií v programe, prvú adresu v pamäti, na ktorú má byť program načítaný a hodnotu počítadla programu (program counter) po načítaní programu zo súboru (na ovládanie začiatočnej adresy po načítaní programu).
22 0 0 3 3 5 0 10 8 20 1 0 4 3 4 6 1 4 4 7 3 3 5 2
Obrázok 3: Program, ktorý vypíše čísla od 10 po 1 .
Nová inštrukcia ins=4 načíta program do pamäte so súboru. Funkcionalitu implementuje funkcia nacitaj_program, ktorá je na Obrázku 5.
Obrázok 4: Mikro-interpretér 3.
Obrázok 5: Funkcia, ktorá načíta program zo súboru do pamäte a nastaví počítadlo programu na špecifikovanú hodnotu.
Výstup príkazu
cat program.txt | ./interpretér
je 109876543210, teda číslice od 10 po 0. Súbor ./interpretér je skompilovaný interpretér, ktorý skompilujeme príkazom
gcc interpretér3.c -o interpretér