НАР 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 рачунара је конзистентан и једноставан за интерпретацију. Свака линија програма може да садржи до једне инструкције следећег облика: Словна ознака инструкције Празнина, у случају да инструкција одређује индексни регистар, начин адресирања или параметар; затим зарезом одвојене: Име индексног регистра (ако је потребно) Зарезом раздвојена слова која одређују начин адресирања Вредност параметра

Пример

аум -{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 у бескрајној петљи прорачуна адресе: „И, 0" одређује да адреса податка за инструкцију треба да се учита са меморијске локације 0 Садржај меморијске локације 0 се чита и он (опет) садржи „И, 0". „И, 0" одређује да адреса податка за инструкцију треба да се учита са меморијске локације 0 Садржај меморијске локације 0 се чита и он (опет) садржи „И, 0". „И, 0" одређује да адреса податка за инструкцију треба да се учита са меморијске локације 0 Садржај меморијске локације 0 се чита и он (опет) садржи „И, 0". ...

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

муа Р, И, 0

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

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

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

муа -{Xi}-, П, Н, -{n}-

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

Категорија:Југословенски рачунари