INP - zad´an´ı projektu ˇc.2
15.10.2013
Procesor s jednoduchou instrukˇ cn´ı sadou Datum zad´ an´ı: 15.10.2013 Datum a forma odevzd´ an´ı: do 15.12.2013 23:59, POUZE pˇres IS FIT, 4 soubory Poˇ cet bod˚ u: max. 20 bod˚ u Pozn´ amka: souˇc´ ast´ı zad´ an´ı je archiv project2.zip Dotazy: v pˇr´ıpadˇe probl´em˚ u souvisej´ıc´ıch se zad´an´ım se obracejte na
[email protected]
´ Uvod
1
C´ılem tohoto projektu je implementovat pomoc´ı VHDL procesor, kter´ y bude schopen vykon´avat program napsan´ y v jazyce BrainF*ck [3]. I kdyˇz tento jazyk pouˇz´ıv´a pouze osm jednoduch´ ych pˇr´ıkaz˚ u (instrukc´ı), jedn´ a se o v´ ypoˇcetnˇe u ´plnou sadu, pomoc´ı kter´e je moˇzn´e realizovat libovoln´ y algoritmus.
ˇ Cinnost procesoru Jazyk BrainF*ck definuje osm pˇr´ıkaz˚ u zak´odovan´ ych pomoc´ı tisknuteln´ ych 8-bitov´ ych znak˚ u. Implementovan´ y procesor bude zpracov´ avat pˇr´ımo tyto znaky (tzn. operaˇcn´ı k´od procesoru bude sest´avat vˇzdy z osmi bit˚ u). Program v tomto jazyce sest´ av´ a ze sekvence tˇechto pˇr´ıkaz˚ u (nezn´am´e pˇr´ıkazy jsou ignorov´any, coˇz umoˇzn ˇuje vkl´ adat koment´ aˇre pˇr´ımo do programu). Vykon´av´an´ı programu zaˇc´ın´a prvn´ı instrukc´ı a konˇc´ı jakmile je detekov´ an konec sekvence (znak s ASCII hodnotou 0). Program je uloˇzen v nemodifikovateln´e pamˇeti ROM a je vykon´ av´ an neline´ arnˇe (tzn. obsahuje skoky). Data jsou uloˇzena v pamˇeti RAM, jej´ıˇz obsah je inicializov´ an na hodnotu nula. Pro pˇr´ıstup do pamˇeti se pouˇz´ıv´a ukazatel (ptr), kter´ y je moˇzn´e pˇresouvat o pozici doleva ˇci doprava. Pamˇeˇt je ch´ ap´ ana jako kruhov´ y buffer uchov´avaj´ıc´ı 8-bitov´a ˇc´ısla bez znam´enka. Procesor podporuje pˇr´ıkazy definovan´e v n´asleduj´ıc´ı tabulce. Operaˇcn´ı k´ody, kter´e se v tabulce nenach´ azej´ı jsou procesorem ignorov´ any. pˇ r´ıkaz > < + [
operaˇ cn´ı k´ od 0x3E 0x3C 0x2B 0x2D 0x5B
]
0x5D
. , null
0x2E 0x2C 0x00
v´ yznam inkrementace hodnoty ukazatele dekrementace hodnoty ukazatele inkrementace hodnoty aktu´aln´ı buˇ nky dekrementace hodnoty aktu´aln´ı buˇ nky je-li hodnota aktu´aln´ı buˇ nky nulov´a, skoˇc za odpov´ıdaj´ıc´ı pˇr´ıkaz ] jinak pokraˇcuj n´asleduj´ıc´ım znakem je-li hodnota aktu´aln´ı buˇ nky nenulov´a, skoˇc za odpov´ıdaj´ıc´ı pˇr´ıkaz [ jinak pokraˇcuj n´asleduj´ıc´ım znakem vytiskni hodnotu aktu´aln´ı buˇ nky naˇcti hodnotu a uloˇz ji do aktu´aln´ı buˇ nky zastav vykon´ av´an´ı programu
ekvivalent v C ptr += 1; ptr -= 1; *ptr += 1; *ptr -= 1; while (*ptr) { } putchar(*ptr); *ptr = getchar(); return;
V pˇr´ıpadˇe pˇr´ıkaz˚ u [ a ] manipuluj´ıc´ıch s ukazatelem do programov´eho k´odu (instrukˇcn´ım ˇc´ıtaˇcem PC) je zapotˇreb´ı detekovat odpov´ıdaj´ıc´ı pravou, respektive levou, z´avorku. Moˇznost´ı je nˇekolik, nejjednoduˇsˇs´ı je postupnˇe inkrementovat, respektive dekrementovat, ukazatel a poˇc´ıtat poˇcet z´avorek (viz d´ale).
Mikrokontroler Aby bylo moˇzn´e vykon´ avat smyslupln´ y program, je procesor doplnˇen o pamˇeti a vstupnˇe-v´ ystupn´ı rozhran´ı. V´ ysledn´ y mikrokontroler je ve formˇe projektu pro FITkit. Procesor je pˇripojen ke dvˇema oddˇelen´ ym pamˇetem, pamˇeti programu (pouze pro ˇcten´ı, kapacita 4kB) a pamˇeti dat (dovoluje ˇcten´ı i z´apis, kapacita 1kB).
1
INP - zad´an´ı projektu ˇc.2
15.10.2013
Vstup dat je ˇreˇsen pomoc´ı maticov´e kl´avesnice. Jakmile procesor naraz´ı na instrukci naˇcten´ı hodnoty (operaˇcn´ı k´ od 0x2C), vykon´ av´ an´ı se pozastav´ı do t´e doby, neˇz je stisknuto nˇekter´e z tlaˇc´ıtek kl´avesnice. Tlaˇc´ıtka 0-9 jsou interpretov´ ana jako znaky ’0’ aˇz ’9’ s ASCII hodnotami 48 aˇz 57. Tlaˇc´ıtko * a # je interpretov´ ano jako konec ˇr´ adku s ASCII hodnotu 10. V´ ystup dat je ˇreˇsen pomoc´ı LCD displeje, posun kurzoru na displeji je ˇreˇsen automaticky. Pˇri z´ apisu vˇetˇs´ıho poˇctu znak˚ u, neˇz-li dovoluje kapacita aktivn´ı ˇc´asti displeje, dojde k n´avratu na prvn´ı znak a dˇr´ıve zapsan´e znaky se postupnˇe pˇrepisuj´ı,
2
´ Ukoly 1. Obsah souboru login.b obsahuj´ıc´ıho program v jazyce BrainF*ck, kter´ y tiskne ˇretˇezec xlogin01, zkop´ırujte do debuggeru na adrese [5]. Tlaˇc´ıtkem ”Start debugger” spusˇtte krokov´an´ı a sledujte co zp˚ usobuje kter´ a instrukce, jak se pohybuje programov´ y ˇc´ıtaˇc a ukazatel do pamˇeti dat. Vytvoˇrte program, kter´ y vytiskne na displej V´ aˇs login (na velikosti p´ısmen nez´aleˇz´ı). Snaˇzte se v programu vyuˇz´ıt vˇsechny dostupn´e pˇr´ıkazy s v´ yjimkou pˇr´ıkazu naˇcten´ı. Pokuste se vytvoˇrit co nejkratˇs´ı program. 2. Seznamte se s k´ odem v souborech ram.vhd (pamˇeˇt dat), rom.vhd (pamˇeˇt programu), cpu.vhd (rozhran´ı procesoru) a zejm´ena top.vhd (strukturn´ı popis mikrokontroleru). Povˇsimnˇete si, kde je definov´ an program v jazyce BrainF*ck a jak jej lze modifikovat. 3. Do souboru cpu.vhd doplˇ nte vlastn´ı VHDL k´od, kter´ y bude realizovat procesor vykon´avaj´ıc´ı program zapsan´ y v jazyce BrainF*ck. Pro nalezen´ı odpov´ıdaj´ıc´ı lev´e z´avorky pouˇzijte z´asobn´ık n´avratov´ ych adres (uvaˇzujte max. kapacitu 16 adres). Z´asobn´ık realizujte napˇr. pomoc´ı posuvn´eho registru. Rozhran´ı procesoru je pevnˇe dan´e a skl´ad´a se z pˇeti skupin sign´al˚ u: synchronizace, rozhran´ı pro pamˇeˇt ˇ programu, rozhran´ı pro pamˇet dat, vstupn´ı rozhran´ı a v´ ystupn´ı rozhran´ı. Synchronizaˇcn´ı rozhran´ı tvoˇr´ı tˇri sign´aly. CLK - hodinov´ y synchronizaˇcn´ı sign´al. Procesor pracuje vˇzdy pˇri vzestupn´e hranˇe hodinov´eho sign´alu. RESET - asynchronn´ı nulovac´ı sign´al. Je-li RESET=1, procesor zinicializuje sv˚ uj stav (PTR=0,PC=0). EN - povolen´ı ˇcinnosti procesoru. Procesor vykon´ av´ a jednotliv´e pˇr´ıkazy programu pouze je-li EN=1. Rozhran´ı synchronn´ı pamˇeti ROM uchov´avaj´ıc´ı program je tvoˇreno tˇremi sign´aly. Sign´al CODE ADDR ud´ av´ a adresu buˇ nky, sign´ al CODE DATA obsahuje 8-bitov´e instrukˇcn´ı slovo nach´azej´ıc´ı se na adrese CODE ADDR. Hodnota sign´ alu CODE ADDR a CODE EN je vzorkov´ana a hodnota sign´alu CODE DATA aktualizov´ ana vˇzdy pˇri vzestupn´e hranˇe hodinov´eho sign´alu. K aktualizaci hodnoty sign´alu CODE DATA doch´ az´ı pouze pokud CODE EN = 1 (tj. aktivn´ım sign´alu povolen´ı ˇcinnosti). Rozhran´ı synchronn´ı pamˇeti RAM uchov´avaj´ıc´ı data je tvoˇreno pˇeti sign´aly. Sign´al DATA ADDR slouˇz´ı k adresaci konkr´etn´ı buˇ nky pamˇeti. Sign´al DATA RDATA (naˇcten´a data) obsahuje 8-bitovou hodnotu buˇ nky na adrese DATA ADDR. Sign´al DATA WDATA (zapisovan´a data) nechˇt obsahuje 8-bitovou hodnotu, kterou se m´ a pˇrepsat buˇ nka na adrese DATA ADDR. Podobnˇe jako v pˇredchoz´ım pˇr´ıpadˇe jsou sign´ aly DATA ADDR, DATA EN a DATA WDATA ˇcteny a sign´al DATA RDATA aktualizov´ an pˇri vzestupn´e hranˇe hodinov´eho sign´alu. Rozhran´ı pracuje n´asledovnˇe. Plat´ı-li DATA EN=1 (povolen´ı ˇcinnosti pamˇeti) a DATA RDWR=1 (volba reˇzimu ˇcten´ı / z´apis), sign´al DATA RDATA je aktualizov´ an hodnotou buˇ nky na adrese DATA ADDR. Je-li DATA EN=1 a DATA RDWR=0, hodnota buˇ nky na adrese DATA ADDR je pˇreps´ana hodnotou sign´alu DATA WDATA a sign´al DATA RDATA je aktualizov´ an hodnotou DATA WDATA. Vstupn´ı rozhran´ı, kter´e je pˇripojeno na ˇradiˇc kl´avesnice pracuje n´asledovnˇe. Pˇri poˇzadavku na data procesor nastav´ı sign´ al IN REQ na 1 a ˇcek´a tak dlouho, dokud sign´al IN VLD (input valid) nen´ı roven 1. Jakmile se tak stane, m˚ uˇze procesor pˇreˇc´ıst sign´al IN DATA, kter´ y obsahuje ASCII hodnotu stisknut´e kl´ avesy. V´ ystupn´ı rozhran´ı napojen´e na LCD displej pracuje n´asledovnˇe. Pˇri poˇzadavku na z´apis dat procesor nejdˇr´ıve mus´ı otestovat stav sign´alu OUT BUSY. Tento sign´al indikuje, ˇze je LCD displej 2
INP - zad´an´ı projektu ˇc.2
15.10.2013
zanepr´ azdnˇen vyˇrizov´ an´ı pˇredchoz´ıho poˇzadavku. Jakmile je OUT BUSY=0, procesor inicializuje sign´ al OUT DATA zapisovanou ASCII hodnotou a souˇcasnˇe na jeden hodinov´ y takt nastav´ı sign´ al apisu) na 1. OUT WE (povolen´ı z´ ˇ Cinnost procesoru d˚ ukladnˇe ovˇeˇrte pomoc´ı simulace a n´aslednˇe na pˇr´ıpravku FITkit. K ovˇeˇren´ı pouˇzijte dodan´e testovac´ı programy (viz soubor top.vhd) pˇr´ıpadnˇe pouˇzijte vlastn´ı. 4. Do souboru top.vhd vloˇzte program vytvoˇren´ y v prvn´ım bodˇe zad´an´ı vypisuj´ıc´ı V´aˇs login. Projekt vysyntetizujte (tj. pˇreloˇzte) a odsimulujte. Pozn´ amka: Hl´ aˇsek bˇehem synt´ezy (info, warning) vznikl´ ych mimo entitu CPU si nevˇs´ımejte, nelze je bohuˇzel selektivnˇe potlaˇcit.
3
Odevzd´ av´ a se
Do IS FIT se odevzd´ avaj´ı n´ asleduj´ıc´ı 4 soubory (nikoliv ZIP ˇci jin´ y archiv). Soubor login.b obsahuj´ıc´ı program v jazyce BrainF*ck vypisuj´ıc´ı V´ aˇs login (jedn´a se o v´ ysledek bodu 1 zad´an´ı). Soubor cpu.vhd obsahuj´ıc´ı implementaci procesoru (jedn´ a se o v´ ysledek bodu 3 zad´an´ı). V´ ysledky 4. bodu zad´an´ı, tj. v´ ysledek synt´ezy nach´ azej´ıc´ı se v souboru build/fpga/inp.srp (soubor inp.srp), printscreen ze simulace zachycuj´ıc´ı konec vykon´ av´ an´ı programu s ˇciteln´ ymi sign´aly procesoru (minim´alnˇe stav automatu a sign´ aly entity cpu) a obsahem LCD displeje (soubor inp.png).
4
Hodnocen´ı
Za kompletn´ı implementaci procesoru (tj. splnˇen´ı bodu 3) lze z´ıskat aˇz 14 bod˚ u. Za implementaci procesoru podporuj´ıc´ıho pouze jednoduch´ y while cyklus (tj. nepodporuj´ıc´ı vnoˇren´e while cykly) lze z´ıskat aˇz 7 bod˚ u. Za implementaci procesoru podporuj´ıc´ıho vnoˇren´e cykly while avˇsak nevyuˇz´ıvaj´ıc´ı z´asobn´ık pro nalezen´ı odpov´ıdaj´ıc´ı lev´e z´ avorky lze z´ıskat aˇz 10 bod˚ u. Za prvn´ı a posledn´ı bod zad´ an´ı lze z´ıskat aˇz 6 bod˚ u.
5
Upozornˇ en´ı
Pracujte samostatnˇe, nikomu ned´ avejte svoji pr´aci k ops´an´ı. Plagi´atorstv´ı se hodnot´ı 0 body pˇr´ıpadnˇe dalˇs´ım adekv´ atn´ım postihem dle platn´eho disciplin´arn´ıho ˇr´adu VUT v Brnˇe. Pˇrejmenov´an´ı promˇenn´ ych ˇci zmˇena poˇrad´ı jednotliv´ ych blok˚ u nen´ı povaˇzov´ ana za autorsk´e d´ılo. Tato zmˇena nem´a vliv na v´ ysledn´ y hardware (v´ ysledek synt´ezy).
Odkazy [1] http://merlin.fit.vutbr.cz/FITkit/download.html - image s v´ yvojov´ ymi n´astroji pro VirtualBox [2] http://merlin.fit.vutbr.cz/FITkit/docs/navody/makefile2.html - pˇrekladov´ y syst´em [3] http://en.wikipedia.org/wiki/BrainFuck - popis instrukˇcn´ı sady, dalˇs´ı odkazy [4] http://www.hevanet.com/cristofd/brainfuck/ - nˇekolik program˚ u napsan´ ych v jazyce BrainFuck [5] http://www.iamcal.com/misc/bf debug/ - online debugger
3
INP - zad´an´ı projektu ˇc.2
15.10.2013
N´ avod N´ asleduj´ıc´ı ˇr´ adky jsou urˇceny tˇem, kteˇr´ı doposud netuˇs´ı jak procesor naimplementovat. Obecnˇe plat´ı, ˇze procesor se skl´ ad´ a z datov´e cesty obsahuj´ıc´ı registry, ALU, apod. a ˇr´ıdic´ı cesty obsahuj´ıc´ı automat. Stejnˇe tak je tomu i v tomto pˇr´ıpadˇe. Blokov´e schema moˇzn´e implementace je uvedeno na n´asleduj´ıc´ım obr´azku. Abychom mohli vykon´ avat program, obsahuje datov´a cesta tˇri registry (ˇc´ıtaˇce) s moˇznost´ı inkrementace a dekrementace a z´ asobn´ık n´ avratov´ ych adres (RAS). Registr PC slouˇz´ı jako programov´ y ˇc´ıtaˇc (tj. ukazatel do pamˇeti programu), registr PTR jako ukazatel do pamˇeti dat a registr CNT slouˇz´ı ke korektn´ımu urˇcen´ı odpov´ıdaj´ıc´ıho zaˇc´ atku/konce pˇr´ıkazu while (poˇc´ıt´an´ı otev´ırac´ıch / uzav´ırac´ıch z´avorek, viz. popis instrukˇcn´ı sady). Mimo to datov´ a cesta obsahuje multiplexor, pomoc´ı kter´eho je moˇzn´e urˇcit zapisovanou hodnotu do ˇ hodnotu naˇctenou ze vstupu, hodnotu v aktu´aln´ı buˇ pamˇeti dat. Zapsat je moˇzn´e bud nce sn´ıˇzenou o jedniˇcku nebo hodnotu aktu´ aln´ı buˇ nky zv´ yˇsenou o jedniˇcku. V pˇr´ıpadˇe, ˇze se rozhodnete NEimplementovat podporu vnoˇren´ ych while cykl˚ u, registr CNT ani z´ asobn´ık nepotˇrebujete. Staˇc´ı vyhledat odpov´ıdaj´ıc´ı levou pˇr´ıpadnˇe pravou z´ avorku. Vˇsechny ˇr´ıdic´ı sign´ aly jsou ovl´ ad´ any automatem, tak jak je uvedeno ve schematu. Pˇri tvorbˇe VHDL k´ odu se inspirujte procesorem prob´ıran´ ym na cviˇcen´ıch, jedn´a se de facto pouze o jednoduˇsˇs´ı variaci. V prvn´ım kroku implementujte registry a pot´e postupujte od jednoduˇsˇs´ıch instrukc´ı ke sloˇzitˇejˇs´ım. Implementaci smyˇcek si ponechte aˇz u ´plnˇe na z´ avˇer. Z´asobn´ık lze implementovat nˇekolika zp˚ usoby, nejjednoduˇsˇs´ı z pohledu z´ apisu je vyuˇz´ıt posuvn´ y registr o kapacitˇe 192 bit˚ u (ˇsestn´act 12-bitov´ ych poloˇzek). Prvn´ıch 12 bit˚ u pot´e staˇc´ı propojit s registrem PC a korektnˇe obsluhovat posuv doleva (operace push) a doprava (operace pop). Korektn´ı ˇcinnost ovˇeˇrte pomoc´ı simulace a vlastn´ıch ˇci pˇriloˇzen´ ych program˚ u (pozor, v simulaci nelze prov´ adˇet vstup dat).
RAS
ld
push pop
Figure 1: Blokov´e schema mikrokontroleru Nev´ıte-li jak implementovat automat, pod´ıvejte se do materi´al˚ u ke cviˇcen´ım INP. Jako n´avod pro implementaci automatu by mˇel poslouˇzit pseudok´od popisuj´ıc´ı chov´an´ı jednotliv´ ych instrukc´ı uveden´ y v tabulce 1. M´ ate-li s implementac´ı probl´emy, vytvoˇrte jednoduˇsˇs´ı verzi automatu, kter´ y nepodporuje vnoˇren´e smyˇcky. Pseudok´ od je uveden v tabulce 2.
Projekt pro FITkit Zdrojov´e soubory vyuˇz´ıvaj´ı komponenty a pˇrekladov´e skripty, kter´e se pouˇz´ıvaj´ı v r´amci projektu FITkit. K usnadnˇen´ı pr´ ace doporuˇcujeme vyuˇz´ıt image pro VirtualBox, kter´ y obsahuje vˇsechny potˇrebn´e n´astroje. Po staˇzen´ı image z adresy [1] a spuˇstˇen´ı v aplikaci VirtualBox nezapomeˇ nte aktivovat licenci pro Xilinx ISE (spuˇstˇen´ım pr˚ uvodce xlcm). 4
INP - zad´an´ı projektu ˇc.2
15.10.2013
Po spuˇstˇen´ı QDevKitu st´ ahnˇete aktu´ aln´ı zdrojov´e k´ody a do podadres´aˇre apps rozbalte obsah souboru project2.zip. Pˇri n´ asledn´em spuˇsten´ı QDevKitu se ve stromu dostupn´ ych aplikac´ı objev´ı poloˇzka INP a pod n´ı tento projekt. Pomoc´ı kontextov´eho menu pˇr´ıpadnˇe dvojklikem na t´eto poloˇzce lze pˇripojen´ y FITkit naprogramovat pˇr´ıpadnˇe projekt pˇreloˇzit ˇci spustit simulaci. Cel´ ym procesem lze proj´ıt i v pˇr´ıkazov´e ˇr´ adce (pˇr´ıkazy gmake, gmake load, gmake isim, gmake term) [2]. Pˇred pouˇzit´ım pˇr´ıkazu gmake je zapotˇreb´ı vytvoˇrit Makefile pomoc´ı pˇr´ıkazu fcmake. Souˇc´ ast´ı zad´ an´ı je vysyntetizovan´e vzorov´e ˇreˇsen´ı (soubor build/inp.bin) obsahuj´ıc´ı program, kter´ y po spuˇstˇen´ı oˇcek´ av´ a na vstupu ˇc´ıslo (tj. sekvence ˇc´ıslic ukonˇcen´a stiskem kl´avesy #), kter´e je n´aslednˇe rozloˇzeno na prvoˇc´ısla. Pokud FITKit naprogramujete (pozor, nesm´ıte projekt pˇreloˇzit) dodan´ ym k´odem a spust´ıte termin´ al, procesor bude ˇcekat na stisk kl´ avesy. Tento stav je indikov´an svitem LED diody D4. Vzorov´e ˇreˇsen´ı je urˇceno pro FITkit s dvouˇr´ adkov´ ym displejem (tzn. verze 2.x). Pro ovˇeˇren´ı funkce na FITkitu s jednoˇr´ adkov´ ym displejem je zapotˇreb´ı nakop´ırovat obsah adres´aˇre build/fitkit v1 do adres´aˇre build jinak v d˚ usledku nekompatibility nebudou vidˇet znaky na druh´e polovinˇe displeje. Projekt je moˇzn´e simulovat pomoc´ı pˇriloˇzen´eho test bench souboru (fpga/sim/tb.vhd) a simul´atoru Xilinx ISIM. Simulaci lze vyvolat z aplikace QDevKit pˇr´ıpadnˇe zad´an´ım pˇr´ıkazu gmake isim v adres´aˇri s projektem. Skript staraj´ıc´ı se o vloˇzen´ı sign´ al˚ u do simulace a jej´ı spuˇstˇen´ı je um´ıstˇen v souboru fpga/sim/isim.tcl. Skript lze modifikovat dle potˇreb. Test bench (VHDL k´od v souboru tb.vhd) obsahuje FPGA entitu, gener´ ator hodinov´eho a resetovac´ıho sign´ alu a emul´ ator LCD displeje.
5
INP - zad´an´ı projektu ˇc.2
pˇ r´ıkaz / stav v´ ychoz´ı stav
15.10.2013
pseudok´ od PC ← 0, PTR ← 0, CNT ← 0
>
PTR ← PTR + 1, PC ← PC + 1
<
PTR ← PTR - 1, PC ← PC + 1
+
DATA RDATA ← ram[PTR] ram[PTR] ← DATA RDATA + 1, PC ← PC + 1 DATA RDATA ← ram[PTR]
-
ram[PTR] ← DATA RDATA - 1, PC ← PC + 1 while (OUT BUSY) {}
.
OUT DATA ← ram[PTR], PC ← PC + 1 IN REQ ← 1
,
while (!IN VLD) {} ram[PTR] ← IN DATA, PC ← PC + 1 PC ← PC + 1
[
if (ram[PTR] == 0) CNT ← 1 while (CNT != 0) c ← rom[PC] if (c == ’[’) CNT ← CNT + 1 elsif (c == ’]’) CNT ← CNT - 1 PC ← PC + 1 else stack.push(PC) if (ram[PTR] == 0)
]
PC ← PC + 1 stack.pop() else PC ← stack.top() PC ← PC
null ostatn´ı
PC ← PC + 1
Table 1: Popis chov´ an´ı (pseudok´od) jednotliv´ ych intrukc´ı procesoru
6
INP - zad´an´ı projektu ˇc.2
pˇ r´ıkaz / stav [
15.10.2013
pseudok´ od PC ← PC + 1 if (ram[PTR] == 0) do c ← rom[PC] PC ← PC + 1 until (c == ’]’)
]
if (ram[PTR] != 0) do PC ← PC - 1 c ← rom[PC] until (c == ’[’) PC ← PC + 1
Table 2: Zjednoduˇsen´ a implementace instrukc´ı procesoru nepodporuj´ıc´ı vnoˇren´e smyˇcky a t´ımp´ adem nevyˇzaduj´ıc´ı z´ asobn´ık
7