НАР 2 (Наставни Рачунар 2) је теоретски модел 32-битног рачунара кога је креирао професор природно-математичког факултета универзитета у Београду Недељко Парезановић као побољшање претходног НАР 1. Коришћен је током предавања о асемблерском програмирању и архитектуре рачунара ("Основе рачунарских система").

Структура инструкција уреди

Свака инструкција НАР 2 процесора се састојала од тачно једне 32-битне машинске речи и садржала је следеће делове:

  • Код инструкције у 8 највиших битова (24...31)
  • 4 бита (20...23) одреднице индексног регистра који ће бити употребљен у одговарајућим начинима адресирања
  • 4 бита (16...19) који су одређивали начин адресирања:
    • бит 19: П - Посредно
    • бит 18: Р - Релативно
    • бит 17: И - Индиректно
    • бит 16: Н - Непосредно
  • 16 најнижих битова чине параметер или аргумент инструкције

Регистри уреди

НАР 2 има следеће регистре:

  • Бројач наредби БН
  • 32-битни акумулатор чији садржај може бити третиран било као реалан или цео број
  • До 16 индексних регистара, X0...X15. Међутим, X0 никада није био употребљен - могуће да је резервисан као бројач наредби БН

Кодови инструкција уреди

Бројни кодови инструкција нису одређени, само њихове словне ознаке:


Инструкције за рад са регистрима уреди

  • МУА - Меморија У Акумулатор - ставља вредност у акумулатор
  • АУМ - Акумулатор У Меморију - ставља вредност акумулатора у меморију
  • ПИР - Пуњење Индексног Регистра - ставља вредност у задати индексни регистар

Целобројна аритметика уреди

Напомена: све ознаке инструкција у овој групи се завршавају словом „Ф“ што означава рад у „фиксном зарезу“. Ово је, међутим, тачно само за инструкције сабирања, одузимања и негације (промене знака). Инструкције мнижења и дељења су чисто целобројне - зарез је фиксиран десно од цифре најмање тежине.

  • САБФ (Сабери у Фиксном зарезу) - додаје вредност у акумулатор
  • ОДУФ (Одузми у Фиксном зарезу) - одузиме вредност од акумулатора
  • МНОФ (Множи у Фиксном зарезу) - Множи акумулатор параметром
  • ДЕЛФ (Дели у Фиксном зарезу) - Дели акумулатор параметром
  • ПЗАФ (Промени Знак Акумулатора у Фиксном зарезу) - Врши негацију вредности акумулатора


Аритметика са бројевима у покретном зарезу уреди

  • САБ (Сабери) - додаје вредност у акумулатор
  • ОДУ (Одузми) - одузиме вредност од акумулатора
  • МНО (Множи) - Множи акумулатор параметром
  • ДЕЛ (Дели) - Дели акумулатор параметром
  • ПЗА (Промени Знак Акумулатора) - Врши негацију вредности акумулатора


Логичке уреди

  • КОН (Конјункција) - врши логичко „И“ над акумулатором, са вредношћу параметра
  • ДИС (Дисјункција) - врши логичко „ИЛИ“ над акумулатором, са вредношћу параметра
  • НЕГ (Негација) - врши логичко „НЕ“ (инверзију) акумулатора (игнорише параметар)


Логичка померања уреди

  • ПОЛ (Помери Лево) - помера битове акумулатора налево
  • ПОД (Помери Десно) - помера битове акумулатора надесно


Контрола тока уреди

  • НЕС (Негативни Скок) - извршава условни скок на задату адресу ако је вредност акумулатора негативна
  • БЕС (Безусловни Скок) - извршава безусловни скок на задату адресу
  • НУС (Нула-Скок) - извршава условни скок на задату адресу ако је вредност акумулатора нула
  • ЗАР (Заустави Рачунар) - зауставља рачунар

Стандардна синтакса уреди

Асемблер НАР 2 рачунара је конзистентан и једноставан за интерпретацију. Свака линија програма може да садржи до једне инструкције следећег облика:

  1. Словна ознака инструкције
  2. Празнина, у случају да инструкција одређује индексни регистар, начин адресирања или параметар; затим зарезом одвојене:
    1. Име индексног регистра (ако је потребно)
    2. Зарезом раздвојена слова која одређују начин адресирања
    3. Вредност параметра

Пример

  аум   X1, п, 0
  муа   н, 1
  аум   15
  пир   X1, п, н, 1
  муа   X1, п, н, 0
  одуф  н, 1
  одуф  X2, п, н, 0

Начини адресирања уреди

Са четири бита за одређивање начина адресирања (П, Р, И и Н), НАР 2 инструкције могу да задају до 16 различитих начина адресирања иако немају сви смисла у свим инструкцијама. Интересантно је да су називи начина адресирања изабрани тако да је могуће „П, Н“ - посредно-непосредно адресирање и да се користе називи „посредно“ и „индиректно“ уместо „индексно“ и „посредно“.

У следећој табели:

  • M[x] означава 32-битну вредност (садржај) меморијске локације са адресом x
  • БН означава бројач наредби
  • p означава 16-битну вредност параметра (са знаком)
  • Xi означава индекси регистар задат подацима са треутне меморијке локације
  • f() је функција „ефективне вредности“ при индиректном адресирању, која се рачуна по истој табели:
Одреднице адресирања Врста инструкције
П Р И Н Подаци Скок
 -   -   -   -  M[p] p
 -   -   -  Н p p
 -   -  I  -  M[f(M[p])] f(M[p])
 -   -  И Н f(M[p]) f(M[p])
 -  Р  -   -  M[БН+p] БН+p
 -  Р  -  Н БН+p БН+p
 -  Р I  -  M[f(M[БН+p])] f(M[БН+p])
 -  Р И Н f(M[БН+p]) f(M[БН+p])
П  -   -   -  M[Xi+p] Xi+p
П  -   -  Н Xi+p Xi+p
П  -  И  -  M[f(M[Xi+p])] f(M[Xi+p])
П  -  И Н f(M[Xi+p]) f(M[Xi+p])
П Р  -   -  M[БН+Xi+p] БН+Xi+p
П Р  -  Н BN+Xi+p BN+Xi+p
П Р И  -  M[f(M[БН+Xi+p])] f(M[БН+Xi+p])
П Р И Н f(M[БН+Xi+p]) f(M[БН+Xi+p])

Напомена: Одредница адресирања „Н“ нема ефекте на инструкције за контролу тока јер процесор не може да скочи „у вредност“ него само на задату адресу.

Итеративно индиректно адресирање уреди

НАР 2 подржава итеративно индиректно адресирање. Меморијска локација се прво рачуна узевши у обзир П и Р одреднице начина адресирања. Затим, ако је одредница „И“ присутна, 32-битна машинска реч се чита са те локације и прорачун почиње из почетка, укључујићи нове одреднице начина адресирања, селектора индексног регистра и вредности параметра - само се код инструкције игнорише. Тако, ако следећи програм учитамо на адресу 0 и извршимо:

  муа И, 0

... замрзнућемо НАР 2 у бескрајној петљи прорачуна адресе:

  1. „И, 0" одређује да адреса податка за инструкцију треба да се учита са меморијске локације 0
  2. Садржај меморијске локације 0 се чита и он (опет) садржи „И, 0".
  3. „И, 0" одређује да адреса податка за инструкцију треба да се учита са меморијске локације 0
  4. Садржај меморијске локације 0 се чита и он (опет) садржи „И, 0".
  5. „И, 0" одређује да адреса податка за инструкцију треба да се учита са меморијске локације 0
  6. Садржај меморијске локације 0 се чита и он (опет) садржи „И, 0".
  7. ...

Приметите да:

  муа Р, И, 0

изгледа општије (може да замрзне НАР 2 са било које адресе), али ово зависи од тренутна када се садржај регистра БН мења.

Остаје питање третмана одренице „Н“ (непосредно адресирање) заједно са одредницом „И“ - да ли или не треба поштовати почетну/оригиналну одредницу „Н“ из инструкције или ону која стиже са (индиректно) прочитаном адресом? Приказана табела приказује први случај само да би приказала више начина адресирања.

Читање вредности индексних регистара уреди

НАР 2 не садржи посебну инструкцију за читање садржаја индексних регистара која би парирала ПИР инструкцији. Ипак, постоји једноставан начин да се то изведе употребом посредног-непосредног адресирања (П, Н) као у следећем примеру:

  муа Xi, П, Н, n

... што поставља вредност Xi+n у акумулатор. За n=0 ово практично преписује садржај задатог индексног регистра у акумулатор.