Paměť: Malá | Akorát | Velká | Mega

 

Registry

IP: IDX:
A: JMP:
B: SRC:
C: DST:

Monitor pro text

Výstupní adresa: 980 - 995

LCD pro zobrazení čísel

Výstupní adresa: 996

LEDky

Výstupní adresa: 997

Klávesnice

Vstupní adresa: 999

Assembler

Terminál

Základní popis

Stránka popisuje funkci jednoduchého procesoru. Procesor podporuje sadu jednoduchých instrukcí pro zápis a čtení do/z paměti, aritmetické operace, logické porovnávání, instrukce obyčejného a podmíněného skoku.

Procesor obsahuje 8 registrů a umožňuje pracovat s pamětí o max velikosti 999 buněk. Buňky nepracují přímo s byty. Do každé buňky je možné uložit buďto instrukci s trojcifernou adresou nebo samotné trojciferné číslo. Simulátor tedy nepracuje s binární aritmetikou, ale hodnoty jsou pro zjednodušení zadávána a reprezentována dekadicky.

Některé adresy jsou mapovány do IO prostoru. Uložením hodnot je tedy možné zapisovat texty na monitor, čísla na číselný LCD displej, rozvicovat barevné LED diody a načítat číselné hodnoty z virtuální číselné klávesnice.

Programy se nemusí vytvářet přímo ve strojovém kódu. Je možné použít vestavený textový editor pro zápis programu v assembleru.

Logování a ladění programu lze pomocí textových výstupů ve vestavěném okně terminálu.

Základní ovládání

Zápis dat a instrukcí do paměti

V levé části je paměť, která se skládá z několika paměťových buněk (oranžové čtverce), kde každá má svoji unikátní adresu. Adresu buňky vypočteme součtem adresy řádku s adresou ve sloupci. Takže například buňka ve druhém slouci a třetím řádku má adresu 21 (=20+1).

Na každou adresu paměti můžeme zapsat pěticiferné kladné číslo. První dvě cifry přestavují kód instrukce, zbylé tři cifry adresu. Adresovat tedy můžeme buňky paměti v rozmezí 0-999. Pokud se do buňky rozhodneme zadat data namísto instrukce, pak také můžeme pracovat s čísli v rozmezí 0-999. Tyto hodnoty můžeme například sčítat nebo porovnávat mezi sebou. Nebo je můžeme zapisovat na adresy paměti, které jsou vyhrazené na speciální účely. Takto jsou mapované adresy umožňují zapisovat hodnoty do LCD displeje, monitoru atd. Naopak při čtení z takto mapovaných adres můžeme získávat například data z klávesnice. Mapování paměťového prostoru je vysvětleno v dalších kapitolách.

Hodnoty do paměti zapíšeme tak, že buňky paměti nejdříve označíme myší a pak buď přímo zadáme hodnotu, nebo ve formuláři, který je umístěn nad pamětí, můžeme zvolit pouze číselnou hodnotu, nebo z rozevíracího seznamu můžeme vybrat typ instrukce. Pokud zvolíme instrukci, hodnota za instrukcí reprezentuje adresu, se kterou instrukce bude pracovat. Můžeme vybrat i více buněk najednou pomocí myši a klávesy CTRL. Mazat můžeme označené buňky pomocí kombinace kláves CTRL+DELETE. Zároveň můžeme označené buňky kopírovat nebo přesouvat pomocí kláves CTRL+C, CTRL+X, CTRL+V. Pokud potřebujeme označit všechny buňky naráz, klikneme na horní levou buňku v tabulce.

Pokud chceme zobrazit paměť pouze s číselnými hodnotami, necháme nezaškrtlou možnost Přehledné zobrazení

Spuštění programu a zastavení

Označením buňky paměti se automaticky nastaví REG_IP na aktuální označenou buňku. To nám umožní spustit program od aktuálné označené buňky. Program spustíme pomocí talčítka START. Program se rozeběhne a zastaví se v pouze v několika případech.

Program můžeme místo klasického spuštění krokovat po jedné instrukci. Klikem na tlačítko KROK se provede pouze aktuálně označená instrukce.

Možnosti zápisu programu

Simulátor umžňuje vytváření programů dvěma způsoby

Ukládání

Program (ať už napsaný ve strojovém kódu nebo v assembleru) je možné uložit. Klikem na tlačítko ULOŽIT se simulátor znovu načte z vygenerovaného URL, které obsahuje všechny potřebné informace. Toto URL je tedy možné z prohlížeče zkopírovat a poslat emailem, či uložit jako záložku. Po kliku na odkaz se otevře simulátor s programem, který byl v simulátoru v momentě uložení.

Volba velikosti paměti

Pro větší přehlednost je možné volit velikost paměti jednou ze 4 předvolených velikostí - možnosti jsou v pravé horní části. Upozornění: volbu velikosti paměti provádějte před programováním. Změna paměti smaře aktuálně napsaný kód programu.

LCD displej funguje tak, že hodnota čísla zapsaného na adresu 996 se zobrazí na displeji. Pokud na displej zapíšeme číslo například 365, zobrazí se na displeji právě 365. Displej umí zobrazit maximálně trojciferné číslo.

Registry

Procesor pracuje celkem s 8 registry, kde každý může obsahovat hodnoty 0 .. 999. Registry mají následující funkci:

Alfa-numerický Monitor

Monitor umožňuje zobrazení textů kódovaných podle ASCII tabulky o délce až 15 znaků. Zápis na monitor je možné provést uložením hodnoty na jednu z 15 mapovaných adres v rozsahu 980 - 995. Adresa 980 odpovídá prvnímu znaku, adresa 995 poslednímu znaku. Pokud tedy chceme na poslední místo na monitoru zapsat písmeno a (které v ASCII odpovídá číslu 97), můžeme použít následující sekvenci příkazů. Hodnotu 97 musíme napřed uložit do volné paměti, například na adresu 10.

MOV-MA 10   //do REG_A nastaví hodnotu 97 (uložené na adrese 10)
MOV-AM 995  //zapíše hodnotu v REG_A na speciálně mapovanou adresu 995 představující poslední znak monitoru.
            

LCD displej

LCD displej funguje tak, že hodnota čísla zapsaného na adresu 996 se zobrazí na displeji. Pokud na displej zapíšeme číslo například 365, zobrazí se na displeji právě 365. Displej umí zobrazit maximálně trojciferné číslo.

LED diody

Po zapsání čísla na adresu 997 se rozsvítí LED diody následovně. První cifra čísla (stovky) ovládá první diodu, druhá cifra (desítky) druhou diodu a třetí cifra (jednotky) třetí diodu. Barvu, kterou se dioda rozsvítí, definuje následující tabulka.

0
1
2
3
4
5
6
7
8
9

Numerická klávesnice

Vstup od uživatele lze získávat z virtuální numerické klávesnice, pomocí které je možné zadat vždy pouze jedno maximálně trojciferné číslo. Potvrzení čísla se provede klikem na tlařítko OK.

K samotnému přečtení vstupu dochází při čtení z paměti ze speciálně mapované adresy 999. Pokud na klávesnici není zadaná hodnota není, instrukce čtení neproběhne a v logu se objeví informace o tom, že má uživatel číslo na klávesnici vyťukat. Po kliku na OK je běh programu obnoven a procesor může z adresy 999 hodnotu přečíst.

Seznam instrukcí

Kód insrukcePopis

Assembler

Kód je možné zapisovat i pomocí assembleru do textového okna a pak ho následně zkompilovat do strojového kódu. Syntaxe assembleru je jednoduchá. Na každý řádek se napíše jedna instrukce doplněna o adresu, pokud je potřeba. Instrukce lze uvozovat návěštím (název zakončený dvojtečkou). Tato návěští se pak dají použít v instrukcích skoku. Začátek programu uvozuje návěští code:.

Nejdříve se definují datové proměnné. Assembler umí pracovat s dekadickými čísli, s poli čísel a s řetězci textů obalených uvozovkami. Z řetězců dělá sekvenci znaků (zakódovaných pomocí ASCII) zakončených 0. Čili ve skutečnosti data zabírají v paměti o jedno číslo navíc. Následuje příklad s komentářem.

# Deklarace promenne cislo s hodnotou 10
cislo = 10
# Deklarace pole čísel
pole = 56, 54, 5
# Deklarace retezce
veta      = "Myslim si cislo"

code: 
    # Zde zacina program - sekvence instrukcí
    mov-ma cislo
nekonecna_smycka:
    add 
    jmp nekonecna_smycka                    

            

Zkompilování do strojového kódu lze provést tlačítkem KOMPILOVAT. Pak lze program již normálně spustit.


Vzorové úlohy

Součet čísel

Naprogramujte kalkulačku - součet dvou čísel. Řešení úlohy naleznete zde.

Příklad smyčka se známým počtem opakování

Napište program, který bude kus kódu několikrát opakovat. Řešení úlohy naleznete zde.

Příklad tisku na obrazovku z klávesnice

Přepisujte stisknuté klávesy na obrazovku. Řešení úlohy naleznete zde.

Ukázka průchodu pole ukončeného zarážkou

Nadefinujte si pole čísel, které bude mít na posledním místě nulu. Toto pole procházejte a postupně čísla z pole zapisujte na LCD displej. Až narazíte na zarážku (nulu), program ukončete. Řešení úlohy naleznete zde.

Příklad tisku na obrazovku ze stringu

Nadefinujte si řetězec znaků zakončený nulou a vytiskněte ho na monitor. Řešení úlohy naleznete zde.

Hra na hádání čísel

Napište program, který si vymyslí náhodné číslo od 0-9 a nechá vás ho hádat, přičemž bude na monitor vypisovat, zda je váš tip větší či menší. Řešení úlohy naleznete zde.