НАР 2 - NAR 2
НАР 2 (сербский NaСтавни рачунар 2, en. Образовательный компьютер 2) представляет собой теоретическую модель 32-кусочек слово компьютер, созданный на математическом факультете Белградский университет профессор Неделько Парезанович в качестве усовершенствования своего предшественника, НАР 1. Он использовался для язык ассемблера и Компьютерная архитектура курсы. Слово «нар» означает Гранатовый в сербский. Создано много тренажеров NAR 2 - например, один получил название «Šljiva» (en. слива ) поскольку этот фрукт растет в Сербия, а "нар" - нет.
Структура инструкции
НАР 2 процессор использует 32-битные машинные слова. Каждый Машина инструкция содержит:
- код операции в 8 старшие биты (биты с 24 по 31)
- 4 бита (от 20 до 23), определяющие Индексный регистр для использования с индексированными режимами адресации
- 4 бита (от 16 до 19), содержащие адресный режим флаги:
- бит 19: п (SR. посредно, en. опосредованный) - проиндексировано
- бит 18: р (SR. рэлативно) - относительно счетчика программ
- бит 17: я (SR. яндиректно) - многоуровневая косвенная память (примечание: адрес загружается из указанного места и, если он также содержит флаг "I", вычисление косвенного адреса продолжается)
- бит 16: N (SR. Nэпосредно) - немедленно
- 16 бит подписанный значение параметра
Регистры
NAR 2 имеет четыре регистра:
- а Счетчик команд называется BN (SR. BРояч NАредби, en. Счетчик инструкций)
- Один 32-битный аккумулятор которое можно рассматривать либо как целое число (фиксированная точка ) или действительное (с плавающей запятой) число
- До 16 Индексные регистры можно указать, от X0 до X15. Однако X0 никогда не использовался, возможно, потому, что он был зарезервирован как программный счетчик (BN).
- Не было флаги или регистры флагов
Мнемоника
Доступны следующие коды операций (фактические коды не указаны, только мнемоника):
Доступ к памяти / регистру
- MUA (SR. MEmorija U Акумулятор, en. Memory Into Accumulator) загружает значение в аккумулятор
- АУМ (SR. Акумулятор U MEmoriju, en. Accumulator Into Memory) хранит содержимое аккумулятора.
- PIR (SR. пUnjenje яндексног рegistra, en. Загрузить индексный регистр) Загружает значение в индексный регистр.
Целочисленная арифметика
Примечание: все мнемонические символы в этой группе оканчиваются буквой «F», обозначающей «Фиксни зарез» (en. С фиксированной точкой) арифметика. Однако это верно только для сложения, вычитания и отрицания (смены знака). Умножение и деление предполагают, что «точка» закреплена справа от младшего разряда, то есть числа являются целыми.
- SABF (SR. Сабэри ты Fиксном зарезу, en. Add, Fixed Point) - добавляет параметр в аккумулятор
- ODUF (SR. Одуzmi u Fиксном зарезу, en. Subtract, Fixed Point) - вычитает параметр из аккумулятора
- MNOF (SR. Množi u Fиксном зарезу, en. Multiply, Fixed Point) - умножает аккумулятор на параметр
- DELF (SR. Delя ты Fиксном зарезу, en. Divide, Fixed Point) - делит аккумулятор на параметр
- PZAF (SR. пРомени Zнак Аkumulatora u Fиксном зарезу, en. Change the Sign of Accumuator, Fixed Point) - Изменяет (переворачивает) знак аккумулятора
Арифметика с плавающей запятой
- САБ (SR. СабЭри, en. Добавить) - добавляет параметр в аккумулятор
- ODU (SR. Одуzmi, en. Subtract) - вычитает параметр из аккумулятора
- MNO (SR. Množi, en. Multiply) - умножает аккумулятор на параметр
- DEL (SR. Delя, en. Divide) - делит аккумулятор на параметр
- PZA (SR. пРомени Zнак Акумулатора, en. Change the Sign of Accumuator) - Изменяет (переворачивает) знак аккумулятора
Побитовый / логический
- КОН (SR. Конjunkcija, en. Соединение ) - выполняет логическое И параметром и аккумулятором и сохраняет результат в аккумуляторе
- DIS (SR. Дисjunkcija, en. Дизъюнкция ) - выполняет логическое ИЛИ параметром и аккумулятором и сохраняет результат в аккумуляторе
- NEG (SR. Negация, en. Отрицание ) - выполняет логическое НЕ на содержании аккумулятора (игнорирует параметр)
Примечание: все вышеуказанные операции побитовый. Их имена подразумевают, что они чисто логические операции но их можно объяснить, как если бы они работали с векторами битов и отдельно применяли логические операции к каждой паре битов.
Логические сдвиги
- POL (SR. ПоМери Levo, en. Shift Left) - сдвигает биты аккумулятора влево
- POD (SR. ПоМери Desno, en. Shift Right) - сдвигает биты аккумулятора вправо
Управление потоком
- РЭШ (SR. Neгативни Sкок, en. Отрицательный прыжок) выполняет условный переход на адрес, указанный параметром, если текущее значение аккумулятора отрицательное
- BES (SR. БытьZuslovni Sкок, en. Безусловный прыжок) выполняет безусловный прыжок по адресу, указанному параметром
- NUS (SR. Nuля-Sкок, en. Zero Jump) выполняет условный переход по адресу, указанному в параметре, если текущее значение аккумулятора равно нулю
- ZAR (SR. Zaустави рачунар, en. Stop the Computer) останавливает дальнейшую обработку; это единственная инструкция, которая игнорирует параметр.
Стандартный синтаксис языка ассемблера
Синтаксис языка ассемблера NAR 2 был разработан, чтобы быть простым и легким для анализа. Каждая программная строка может содержать до одной инструкции, указанной следующим образом:
- Мнемоника инструкций
- Пробел, если инструкция указывает какие-либо индексные регистры, режим адресации или параметр, а затем через запятую:
- Имя индексного регистра, если используется
- Имена флагов режима адресации (также через запятую)
- Значение параметра
Образец кода:
аум Х1, п, 0 муа п, 1 аум 15 пир Х1, п, п, 1 муа Х1, п, п, 0 одуф п, 1 одуф Х2, п, п, 0
Режимы адресации
С четырьмя битами выбора режима адресации (P, R, I и N - индексированные, относительные, косвенные и немедленные) инструкции NAR 2 могут определять 16 различных режимов адресации, но не все имеют смысл во всех инструкциях. В следующей таблице:
- M [x] указывает 32-битное значение (содержимое) ячейки памяти x
- BN указывает счетчик программы
- p указывает 16-битный подписанный параметр в местоположении
- Xi указывает регистр индекса, выбранный данными в местоположении
- f () - функция «эффективного значения», используемая для косвенной адресации (см. подробности ниже):
Адрес флаги | Тип инструкции | ||||
---|---|---|---|---|---|
п | р | я | N | Данные | Прыгать |
- | - | - | - | M [p] | п |
- | - | - | N | п | п |
- | - | я | - | M [f (M [p])] | f (M [p]) |
- | - | я | N | f (M [p]) | f (M [p]) |
- | р | - | - | M [BN + p] | BN + p |
- | р | - | N | BN + p | BN + p |
- | р | я | - | M [f (M [BN + p])] | f (M [BN + p]) |
- | р | я | N | f (M [BN + p]) | f (M [BN + p]) |
п | - | - | - | M [Xi + p] | Xi + p |
п | - | - | N | Xi + p | Xi + p |
п | - | я | - | M [f (M [Xi + p])] | f (M [Xi + p]) |
п | - | я | N | f (M [Xi + p]) | f (M [Xi + p]) |
п | р | - | - | M [BN + Xi + p] | BN + Xi + p |
п | р | - | N | BN + Xi + p | BN + Xi + p |
п | р | я | - | M [f (M [BN + Xi + p])] | f (M [BN + Xi + p]) |
п | р | я | N | f (M [BN + Xi + p]) | f (M [BN + Xi + p]) |
Примечание 1. Флаг «N» (немедленный) не влияет на инструкции перехода (управления потоком), поскольку процессор не может перейти к указанному значению, а только к адресу памяти.
Многоуровневая косвенная память
NAR 2 поддерживает многоуровневая косвенная память режим адресации. Местоположение сначала выбирается путем «просмотра» флагов P (индексированных) и R (относительно счетчика программ). Затем, если обнаружен флаг I (косвенный), 32-битное слово загружается из рассчитанной на данный момент ячейки памяти и вычисление перезапускается (включая все флаги режима адресации, выбор индексного регистра и значение параметра - только "код операции" опущено). Таким образом, следующая программа, если она загружена в ячейку памяти 0 и выполнена:
муа I, 0; Память в аккумулятор, косвенная, из ячейки 0
... заморозит NAR 2 в бесконечном цикле вычисления адреса:
- «I, 0» указывает, что фактический адрес должен быть загружен из ячейки памяти 0
- Ячейка памяти 0 загружена. Он снова читает "I, 0"
- «I, 0» указывает, что фактический адрес должен быть загружен из ячейки памяти 0
- Ячейка памяти 0 загружена. Он снова читает "I, 0"
- «I, 0» указывает, что фактический адрес должен быть загружен из ячейки памяти 0
- Ячейка памяти 0 загружена. Он снова читает "I, 0"
- ...
Обратите внимание, что:
муа R, I, 0; Память в аккумулятор, относительная, косвенная, из местоположения BN + 0
кажется более общим (может заморозить NAR 2 из любого места), но это зависит от того, когда значение регистра BN увеличивается / изменяется.
Вопрос об обработке флага "N" (немедленный) в присутствии флага I (косвенный) открыт, поскольку ситуация несколько неоднозначна - то есть, следует ли учитывать значение флага, указанное в исходной инструкции или значение в косвенно указанный (найденный) адрес приводит к конфликту. В приведенной выше таблице представлен первый случай, чтобы показать различные режимы адресации, достижимые таким образом.
Чтение значений из индексных регистров
NAR 2 имеет инструкции для инициализации значения конкретного индексного регистра (мнемоника «PIR»). Однако в нем нет специальных инструкций для чтения индексных регистров значений. Это достигается за счет использования индексированных и немедленных (P, N) флагов режима адресации, таких как:
муа Xi, P, N, n; Память в аккумулятор, индексированная, немедленная, 0
... что по сути помещает Xi + n в аккумулятор. Для n = 0 это превращается в команду «загрузить значение индексного регистра в аккумулятор».
Смотрите также
внешняя ссылка
- Пример семинарских задач из ОРС - Примеры студенческих заданий по курсу «ОРС» (Основы компьютерных систем), в Сербский язык. Задача «V1: NAR» требует, чтобы ученик написал симулятор NAR 2.