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