|
|
Registry
Monitor pro textVýstupní adresa: 980 - 995LCD pro zobrazení číselVýstupní adresa: 996LEDkyVýstupní adresa: 997KlávesniceVstupní adresa: 999 |
Assembler |
Terminál |
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.
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í
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.
Simulátor umžňuje vytváření programů dvěma způsoby
Tímto způsobem zapisuje jednotlivé instrukce a data přímo do paměti. Je na nás, na jakou adresu zapíšeme jakou instrukci. Musíme mít akorát na paměti, že se REG_IP, který ukazuje na příště vykonávanou instrukci, automaticky zvětšuje o 1 (pokud právě prováděná instrukce neurčí jinak). To znamená, že pokud chceme provést například 3 instrukce, musí být tyto instrukce umístěny do buněk paměti bezprostředně za sebou.
Simulátor umožňuje napsání programu v jazyce symbolických instrukcí - v tzv. assembleru. Program tak nepíšeme přímo do paměti, ale místo toho využijeme textové okno ozančené jako Assembler. Do tohoto okna napíšeme instrukce (na každou řádku jednu), tak jak si přejeme, aby byly vykonávány za sebou. Klikem na tlačítko KOMPILOVAT dojde k překladu kódu assebleru na strojový kód a do paměti se zapíší jednotlivé instrukce programu. Ten pak můžeme následně spustit. Detailní popis assembleru následuje v dalších kapitolách.
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í.
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.
Procesor pracuje celkem s 8 registry, kde každý může obsahovat hodnoty 0 .. 999. Registry mají následující funkci:
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 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.
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.
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.
| Kód insrukce | Popis |
|---|
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.
Naprogramujte kalkulačku - součet dvou čísel. Řešení úlohy naleznete zde.
Napište program, který bude kus kódu několikrát opakovat. Řešení úlohy naleznete zde.
Přepisujte stisknuté klávesy na obrazovku. Řešení úlohy naleznete zde.
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.
Nadefinujte si řetězec znaků zakončený nulou a vytiskněte ho na monitor. Řešení úlohy naleznete zde.
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.