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:

  1. Slovna oznaka instrukcije
  2. Praznina, u slučaju da instrukcija određuje indeksni registar, način adresiranja ili parametar; zatim zarezom odvojene:
    1. Ime indeksnog registra (ako je potrebno)
    2. Zarezom razdvojena slova koja određuju način adresiranja
    3. 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:

  1. „I, 0" određuje da adresa podatka za instrukciju treba da se učita sa memorijske lokacije 0
  2. Sadržaj memorijske lokacije 0 se čita i on (opet) sadrži „I, 0".
  3. „I, 0" određuje da adresa podatka za instrukciju treba da se učita sa memorijske lokacije 0
  4. Sadržaj memorijske lokacije 0 se čita i on (opet) sadrži „I, 0".
  5. „I, 0" određuje da adresa podatka za instrukciju treba da se učita sa memorijske lokacije 0
  6. Sadržaj memorijske lokacije 0 se čita i on (opet) sadrži „I, 0".
  7. ...

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.