Mikro-interpretér 3
V predchádzajúcom príspevku som opísal mikro-interpretér na obrázku
1.
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.
Program s pamäte som premiestnil do súboru, ktorý je na Obrázku
4. Program v súbore začína s
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).
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.
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