НАР 2

С Википедије, слободне енциклопедије

НАР 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 ово практично преписује садржај задатог индексног регистра у акумулатор.