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 | uredi izvor]
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 | uredi izvor]
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 | uredi izvor]
Brojni kodovi instrukcija nisu određeni, samo njihove slovne oznake:
Instrukcije za rad sa registrima[uredi | uredi izvor]
- 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 | uredi izvor]
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 | uredi izvor]
- 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 | uredi izvor]
- 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 | uredi izvor]
- POL (Pomeri Levo) - pomera bitove akumulatora nalevo
- POD (Pomeri Desno) - pomera bitove akumulatora nadesno
Kontrola toka[uredi | uredi izvor]
- 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 | uredi izvor]
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 | uredi izvor]
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 | uredi izvor]
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 | uredi izvor]
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.