NAR 2
NAR 2 (Nastavni Računar 2) je teoretski model 32-bitnog računara koga je kreirao profesor prirodno-matematičkog fakulteta univerziteta u Beogradu Nedeljko Parezanović kao poboljšanje prethodnog NAR 1. Korišćen je tokom predavanja o asemblerskom programiranju i arhitekture računara ("Osnove računarskih sistema").
Struktura instrukcija uredi
Svaka instrukcija NAR 2 procesora se sastojala od tačno jedne 32-bitne mašinske reči i sadržala je sledeće delove:
- Kod instrukcije u 8 najviših bitova (24...31)
- 4 bita (20...23) odrednice indeksnog registra koji će biti upotrebljen u odgovarajućim načinima adresiranja
- 4 bita (16...19) koji su određivali način adresiranja:
- bit 19: P - Posredno
- bit 18: R - Relativno
- bit 17: I - Indirektno
- bit 16: N - Neposredno
- 16 najnižih bitova čine parameter ili argument instrukcije
Registri uredi
NAR 2 ima sledeće registre:
- Brojač naredbi BN
- 32-bitni akumulator čiji sadržaj može biti tretiran bilo kao realan ili ceo broj
- Do 16 indeksnih registara, X0...X15. Međutim, X0 nikada nije bio upotrebljen - moguće da je rezervisan kao brojač naredbi BN
Kodovi instrukcija uredi
Brojni kodovi instrukcija nisu određeni, samo njihove slovne oznake:
Instrukcije za rad sa registrima uredi
- MUA - Memorija U Akumulator - stavlja vrednost u akumulator
- AUM - Akumulator U Memoriju - stavlja vrednost akumulatora u memoriju
- PIR - Punjenje Indeksnog Registra - stavlja vrednost u zadati indeksni registar
Celobrojna aritmetika uredi
Napomena: sve oznake instrukcija u ovoj grupi se završavaju slovom „F“ što označava rad u „fiksnom zarezu“. Ovo je, međutim, tačno samo za instrukcije sabiranja, oduzimanja i negacije (promene znaka). Instrukcije mniženja i deljenja su čisto celobrojne - zarez je fiksiran desno od cifre najmanje težine.
- SABF (Saberi u Fiksnom zarezu) - dodaje vrednost u akumulator
- ODUF (Oduzmi u Fiksnom zarezu) - oduzime vrednost od akumulatora
- MNOF (Množi u Fiksnom zarezu) - Množi akumulator parametrom
- DELF (Deli u Fiksnom zarezu) - Deli akumulator parametrom
- PZAF (Promeni Znak Akumulatora u Fiksnom zarezu) - Vrši negaciju vrednosti akumulatora
Aritmetika sa brojevima u pokretnom zarezu uredi
- SAB (Saberi) - dodaje vrednost u akumulator
- ODU (Oduzmi) - oduzime vrednost od akumulatora
- MNO (Množi) - Množi akumulator parametrom
- DEL (Deli) - Deli akumulator parametrom
- PZA (Promeni Znak Akumulatora) - Vrši negaciju vrednosti akumulatora
Logičke uredi
- KON (Konjunkcija) - vrši logičko „I“ nad akumulatorom, sa vrednošću parametra
- DIS (Disjunkcija) - vrši logičko „ILI“ nad akumulatorom, sa vrednošću parametra
- NEG (Negacija) - vrši logičko „NE“ (inverziju) akumulatora (ignoriše parametar)
Logička pomeranja uredi
- POL (Pomeri Levo) - pomera bitove akumulatora nalevo
- POD (Pomeri Desno) - pomera bitove akumulatora nadesno
Kontrola toka uredi
- NES (Negativni Skok) - izvršava uslovni skok na zadatu adresu ako je vrednost akumulatora negativna
- BES (Bezuslovni Skok) - izvršava bezuslovni skok na zadatu adresu
- NUS (Nula-Skok) - izvršava uslovni skok na zadatu adresu ako je vrednost akumulatora nula
- ZAR (Zaustavi Računar) - zaustavlja računar
Standardna sintaksa uredi
Asembler NAR 2 računara je konzistentan i jednostavan za interpretaciju. Svaka linija programa može da sadrži do jedne instrukcije sledećeg oblika:
- Slovna oznaka instrukcije
- Praznina, u slučaju da instrukcija određuje indeksni registar, način adresiranja ili parametar; zatim zarezom odvojene:
- Ime indeksnog registra (ako je potrebno)
- Zarezom razdvojena slova koja određuju način adresiranja
- Vrednost parametra
Primer
aum X1, p, 0 mua n, 1 aum 15 pir X1, p, n, 1 mua X1, p, n, 0 oduf n, 1 oduf X2, p, n, 0
Načini adresiranja uredi
Sa četiri bita za određivanje načina adresiranja (P, R, I i N), NAR 2 instrukcije mogu da zadaju do 16 različitih načina adresiranja iako nemaju svi smisla u svim instrukcijama. Interesantno je da su nazivi načina adresiranja izabrani tako da je moguće „P, N“ - posredno-neposredno adresiranje i da se koriste nazivi „posredno“ i „indirektno“ umesto „indeksno“ i „posredno“.
U sledećoj tabeli:
- M[x] označava 32-bitnu vrednost (sadržaj) memorijske lokacije sa adresom x
- BN označava brojač naredbi
- p označava 16-bitnu vrednost parametra (sa znakom)
- Xi označava indeksi registar zadat podacima sa treutne memorijke lokacije
- f() je funkcija „efektivne vrednosti“ pri indirektnom adresiranju, koja se računa po istoj tabeli:
Odrednice adresiranja | Vrsta instrukcije | ||||
---|---|---|---|---|---|
P | R | I | N | Podaci | Skok |
- | - | - | - | M[p] | p |
- | - | - | N | p | p |
- | - | I | - | M[f(M[p])] | f(M[p]) |
- | - | I | N | f(M[p]) | f(M[p]) |
- | R | - | - | M[BN+p] | BN+p |
- | R | - | N | BN+p | BN+p |
- | R | I | - | M[f(M[BN+p])] | f(M[BN+p]) |
- | R | I | N | f(M[BN+p]) | f(M[BN+p]) |
P | - | - | - | M[Xi+p] | Xi+p |
P | - | - | N | Xi+p | Xi+p |
P | - | I | - | M[f(M[Xi+p])] | f(M[Xi+p]) |
P | - | I | N | f(M[Xi+p]) | f(M[Xi+p]) |
P | R | - | - | M[BN+Xi+p] | BN+Xi+p |
P | R | - | N | BN+Xi+p | BN+Xi+p |
P | R | I | - | M[f(M[BN+Xi+p])] | f(M[BN+Xi+p]) |
P | R | I | N | f(M[BN+Xi+p]) | f(M[BN+Xi+p]) |
Napomena: Odrednica adresiranja „N“ nema efekte na instrukcije za kontrolu toka jer procesor ne može da skoči „u vrednost“ nego samo na zadatu adresu.
Iterativno indirektno adresiranje uredi
NAR 2 podržava iterativno indirektno adresiranje. Memorijska lokacija se prvo računa uzevši u obzir P i R odrednice načina adresiranja. Zatim, ako je odrednica „I“ prisutna, 32-bitna mašinska reč se čita sa te lokacije i proračun počinje iz početka, uključujići nove odrednice načina adresiranja, selektora indeksnog registra i vrednosti parametra - samo se kod instrukcije ignoriše. Tako, ako sledeći program učitamo na adresu 0 i izvršimo:
муа И, 0
... zamrznućemo NAR 2 u beskrajnoj petlji proračuna adrese:
- „I, 0" određuje da adresa podatka za instrukciju treba da se učita sa memorijske lokacije 0
- Sadržaj memorijske lokacije 0 se čita i on (opet) sadrži „I, 0".
- „I, 0" određuje da adresa podatka za instrukciju treba da se učita sa memorijske lokacije 0
- Sadržaj memorijske lokacije 0 se čita i on (opet) sadrži „I, 0".
- „I, 0" određuje da adresa podatka za instrukciju treba da se učita sa memorijske lokacije 0
- Sadržaj memorijske lokacije 0 se čita i on (opet) sadrži „I, 0".
- ...
Primetite da:
муа Р, И, 0
izgleda opštije (može da zamrzne NAR 2 sa bilo koje adrese), ali ovo zavisi od trenutna kada se sadržaj registra BN menja.
Ostaje pitanje tretmana odrenice „N“ (neposredno adresiranje) zajedno sa odrednicom „I“ - da li ili ne treba poštovati početnu/originalnu odrednicu „N“ iz instrukcije ili onu koja stiže sa (indirektno) pročitanom adresom? Prikazana tabela prikazuje prvi slučaj samo da bi prikazala više načina adresiranja.
Čitanje vrednosti indeksnih registara uredi
NAR 2 ne sadrži posebnu instrukciju za čitanje sadržaja indeksnih registara koja bi parirala PIR instrukciji. Ipak, postoji jednostavan način da se to izvede upotrebom posrednog-neposrednog adresiranja (P, N) kao u sledećem primeru:
mua Xi, P, N, n
... što postavlja vrednost Xi+n u akumulator. Za n=0 ovo praktično prepisuje sadržaj zadatog indeksnog registra u akumulator.