NAR 2 ( серб. Na stavni R ačunar 2, en. Educational Computer 2) — теоретическая модель 32- битного текстового компьютера, созданного профессором факультета математики Белградского университета Неделько Парезановичем в качестве усовершенствования своего предшественника NAR 1. Он использовался для курсов по языку ассемблера и архитектуре компьютеров . Слово «nar» на сербском языке означает гранат . Было создано много симуляторов NAR 2 — например, один был назван «Šljiva» ( en. plum ), поскольку этот фрукт растет в Сербии , а «nar» — нет.
Центральный процессор NAR 2 использует 32-битные машинные слова. Каждая машинная инструкция содержит:
NAR 2 имеет четыре регистра:
Были доступны следующие коды операций (фактические коды не были указаны, только мнемоники):
Примечание: все мнемоники в этой группе заканчиваются буквой "F", что указывает на "Fiksni zarez" ( en. Фиксированная точка) арифметика. Однако это справедливо только для сложения, вычитания и отрицания (изменения знака). Умножение и деление предполагают, что "точка" зафиксирована справа от младшего значащего бита - то есть числа являются целыми.
Примечание: все вышеперечисленные операции являются побитовыми . Их названия подразумевают, что это чисто логические операции , но их можно объяснить так, как будто они работают с векторами битов и отдельно применяют логические операции к каждой паре битов.
Синтаксис языка ассемблера NAR 2 был разработан таким образом, чтобы быть простым и легким для анализа. Каждая строка программы может содержать до одной инструкции, указанной следующим образом:
Пример кода:
аум Х1, п, 0 муа н, 1 аум 15 пир Х1, п, н, 1 муа Х1, п, п, 0 одуф н, 1 одуф Х2, п, н, 0
С четырьмя битами выбора режима адреса (P, R, I и N - индексированный, относительный, косвенный и непосредственный) инструкции NAR 2 могут указывать 16 различных режимов адресации, но не все из них имеют смысл во всех инструкциях. В следующей таблице:
Флаги адресов | Тип инструкции | ||||
---|---|---|---|---|---|
П | Р | я | Н | Данные | Прыжок |
- | - | - | - | М[п] | п |
- | - | - | Н | п | п |
- | - | я | - | М[ф(М[п])] | f(М[п]) |
- | - | я | Н | f(М[п]) | f(М[п]) |
- | Р | - | - | М[БН+п] | БН+п |
- | Р | - | Н | БН+п | БН+п |
- | Р | я | - | М[ф(М[БН+п])] | ф(М[БН+п]) |
- | Р | я | Н | ф(М[БН+п]) | ф(М[БН+п]) |
П | - | - | - | М[Xi+p] | Xi+p |
П | - | - | Н | Xi+p | Xi+p |
П | - | я | - | М[ф(М[Xi+p])] | f(M[Xi+p]) |
П | - | я | Н | f(M[Xi+p]) | f(M[Xi+p]) |
П | Р | - | - | М[БН+Хи+п] | БН+Хи+п |
П | Р | - | Н | БН+Хи+п | БН+Хи+п |
П | Р | я | - | М[ф(М[БН+Хi+п])] | f(M[BN+Xi+p]) |
П | Р | я | Н | f(M[BN+Xi+p]) | f(M[BN+Xi+p]) |
Примечание 1: Флаг «N» (немедленный) не влияет на инструкции перехода (управления потоком), поскольку процессор не может перейти к указанному значению, а может перейти только к адресу памяти.
NAR 2 поддерживает режим косвенной адресации многоуровневой памяти . Местоположение сначала выбирается путем "просмотра" флагов P (индексированный) и R (относительно счетчика программ). Затем, если обнаружен флаг I (косвенный), 32-битное слово загружается из вычисленного на данный момент местоположения памяти, и вычисление перезапускается (включая все флаги режима адресации, выбор индексного регистра и значение параметра - опускается только "код операции"). Таким образом, следующая программа, если загружена в местоположение памяти 0 и выполнена:
mua I, 0 ; Память-в-аккумулятор, косвенный, из ячейки 0
... заморозит NAR 2 в бесконечном цикле вычисления адреса:
Обратите внимание, что:
mua R, I, 0 ; Память-в-аккумулятор, относительная, косвенная, из ячейки BN+0
кажется более общим (может заморозить NAR 2 из любого места), но это зависит от того, когда увеличивается/изменяется значение регистра BN.
Вопрос обработки флага "N" (непосредственный) при наличии флага I (косвенный) открыт, поскольку ситуация несколько двусмысленна, то есть, следует ли учитывать значение флага, указанное в исходной инструкции, или значение флага в косвенно указанном (просмотренном) адресе, что приводит к конфликту. В таблице выше представлен первый случай, демонстрирующий различные режимы адресации, достижимые таким образом.
NAR 2 имеет инструкции для инициализации значения конкретного индексного регистра (мнемоника "PIR"). Однако у него нет специальных инструкций для чтения значений индексных регистров. Это достигается с помощью флагов индексированного и непосредственного (P, N) режима адресации, таких как:
mua Xi, P, N, n ; Память-в-аккумулятор, индексированный, немедленный, 0
... что по сути помещает Xi+n в аккумулятор. Для n=0 это превращается в инструкцию "загрузить значение индексного регистра в аккумулятор".