# Zapoctovka 8.2.2011

<{ForumPost(poster="Nikto ma nema rad", timestamp=2011-02-08 22:38:56)}>
Ahoj,  
  
takze dnesne zadanie:

    Virtuální zásobníkový stroj
    ===========================
    Napište interpret zásobníkového stroje, jehož specifikace je popsána níže. Aplikace dostane
    právě jeden parametr -- cestu k souboru s programem. Tento program načte a začne vykonávat.
    Program je ve speciálním assembleru a vejde se celý do paměti (obsahuje nejvýše 2^31-1 instrukcí).
    Veškerý vstup i výstup provádějte z/na konzoli.
    
    Stroj pracuje pouze s 32-bit celými čísly se znaménkem. Přetečení a podtečení čísel při operacích ignorujte.
    Má jeden číselný registr (akumulátor), potenciálně nekončné pole (jako paměť) indexované od nuly a potenciálně
    nekonečný zásobník čísel. Akumulátor i všechny položky paměti jsou na začátku nastaveny na 0 a zásobník je prázdný.
    
    Instrukce stroje jsou v následujícím tvaru:
    
    [label:] [INSTRUCTION [operand]]
    
    Label i operand jsou volitelné (přítomnost operandu závisí na konkrétní instrukci).
    Label se skládá pouze z malých a velkých písmen, číslic a podtržítka a je ukončen dvojtečkou.
    Kromě toho může label existovat samostatně na řádku bez instrukce.
    Operandem může být pouze celé číslo zapsané desítkově, nebo label deklarovaný jinde v programu
    (bez dvojtečky). Kromě toho se mohou před, za i mezi jednotlivými částmi instrukce vyskytovat
    mezery a tabulátory. Mezi jednotlivými částmi instrukce musí být alespoň jeden bílý znak.
    
    Program používá právě tyto instrukce:
    MOV literal - uloží daný literál (číslo v desítkovém zápisu) do akumulátoru
    LOAD addr - načte z dané adresy paměti (indexu pole) číslo do akumulátoru
    STORE addr - uloží číslo v akumulátoru na danou adresu paměti (index pole)
    PUSH - vloží obsah akumulátoru na zásobník
    POP - vybere obsah zásobníku a uloží ho do akumulátoru (pokud je zásobník prázdný, skončí programs běhovou chybou)
    IN - načte do akumulátoru číslo z konzole (číslo je na samostatném řádku)
    OUT - vypíše číslo v akumulátoru na konzoli (na samostatný řádek)
    ADD - vyjme dvě čísla ze zásobníku, sečte je a výsledek uloží do akumulátoru(pokud na zásobníku nejsou alespoň dvě čísla, skončí program s běhovou chybou)
    SUB - vyjme dvě čísla ze zásobníku, odečte je (v takovém pořadí, jak byla čísla na zásobník uložena)a výsledek uloží do akumulátoru (pokud na zásobníku nejsou alespoň dvě čísla, skončí program s běhovou chybou)
    MUL - vyjme dvě čísla ze zásobníku, vynásobí je a výsledek uloží do akumulátoru(pokud na zásobníku nejsou alespoň dvě čísla, skončí program s běhovou chybou)
    JMP label - povede nepodmíněný skok na daný label(label musí existovat, jinak měla být nahlášena chyba při načítání)
    JMPCOND label - pokud je v akumulátoru nula, provede skok na daný label, jinak pokračuje dál(label musí existovat, jinak měla být nahlášena chyba při načítání)
    HALT - ukončí běh programu
    
    Program začíná na prvním řádku a končí, pokud doběhne "za konec" souboru nebo instrukcí HALT.
    Kromě instrukcí můžou být ve vstupním souboru prázdné řádky (tj. řádky složené pouze z bílých znaků)
    a také komentáře. Komentáře začínají znakem # a končí zalomením řádku (jinak se mohou vyskytovat jak
    samostatně, tak na řádku za instrukcí).
    
    Při oznamování chyb (ať již při načítání nebo běhových) je potřeba uvést číslo řádku zdrojového kódu,
    kde chyba nastala a chybu krátce popsat.
    
    Program musí být rozumně efektivní. Provedení instrukce musí trvat konstantně dlouho
    (až na uživatelský vstup), načítání by mělo být jednoprůchodové (z hlediska čtení souboru).
    

Este upresnim:  
-komentare boli klasicke jednoriadkove a mohli sa vyskytovat na lubovolnom mieste, ziadne pravidla typu: medzi instrukciou a # musi byt medzera neplatili  
- odchytit trebalo vsetky vynimky a vsetky problemy ktore mohli nastat - kontroloval to celkom prisne  
  
Boli sme tam len 4 ci 5 a ja som odchadzal po 2,5 hodinach ako prvy uspesny, takze uspesnost neviem.
<{/ForumPost}>

