NAR 2

S Vikipedije, slobodne enciklopedije

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:

  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 | 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:

  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 | 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.