НАР 2
NAR 2 ( сербский Na stavni R ačunar 2, англ. Educational Computer 2) — это теоретическая модель компьютера с 32- битными словами, созданная профессором математического факультета Белградского университета Неделько Парежановичем в качестве усовершенствования своего предшественника NAR 1 . Он использовался на языка ассемблера и компьютерной архитектуры курсах . Слово «нар» означает «гранат» по -сербски . Было создано множество симуляторов NAR 2 — например, один был назван «Шлива» ( англ. «слива» ), поскольку этот фрукт растет в Сербии , а «нар» — нет.
Структура инструкции
[ редактировать ]NAR 2 Центральный процессор использует 32-битные машинные слова. Каждая машинная инструкция содержит:
- код операции в 8 старших битах (биты с 24 по 31)
- 4 бита (от 20 до 23), определяющие индексный регистр , который будет использоваться в режимах индексированной адресации.
- 4 бита (от 16 до 19), содержащие режима адреса флаги :
- бит 19: P ( ср. эн посредно, . опосредованно ) — индексированный
- бит 18: R ( . ср относительно) - относительно счетчика программ
- бит 17: I ( ср. I ндиректно) - многоуровневая косвенная память (примечание: адрес загружается из указанного места и, если там также указан флаг "I", косвенный расчет адреса продолжается)
- бит 16: Н ( ср. н епосредно) — немедленный
- 16-битное со знаком значение параметра
Регистры
[ редактировать ]NAR 2 имеет четыре регистра:
- счетчик программ под названием BN ( ср. Brojač ) N aredbi, англ. of Instructions Counter
- Один 32-битный аккумулятор , который можно рассматривать как целое число ( с фиксированной запятой ) или как вещественное (с плавающей запятой) число.
- до 16 индексных регистров Можно указать , от X0 до X15. Однако X0 никогда не использовался, возможно, потому, что он был зарезервирован как счетчик программ (BN).
- Не было ни флагов, ни регистров флагов.
Мнемоника
[ редактировать ]Были доступны следующие коды операций (фактические коды не были указаны, только мнемоника):
Доступ к памяти/регистру
[ редактировать ]- MUA ( sr. Memorija U A kumulator , . ru. Memory Into Accumulator) загружает значение в аккумулятор
- АУМ ( . A kumulator UM emoriju ср , англ. Accumulator Into Memory) хранит содержимое аккумулятора.
- PIR ( sr. P unjenje I ndeksnog Load Index Register) Загружает значение Registra , англ. в индексный регистр.
Целочисленная арифметика
[ редактировать ]Примечание: все мнемоники в этой группе заканчиваются буквой «Ф», обозначающей арифметику «Фиксни зарез» ( англ. Фиксированная точка). Однако это справедливо только для сложения, вычитания и отрицания (смены знака). Умножение и деление предполагают, что «точка» зафиксирована справа от младшего значащего бита, то есть числа являются целыми.
- САБФ ( ср. Сабери у , Фиксном зарезу англ . Add, Фиксированная точка) — добавляет параметр в аккумулятор.
- ОДУФ ( ср. Оду зми у Фиксном зарезу , англ. Subtract, Фиксированная точка) — вычитает параметр из аккумулятора
- MNOF ( sr. Mno ži u F iksnom zarezu , en. Multiply, Fixed Point) - Multiples the accumulator with the parameter
- DELF ( ср. Дэл и у Фиксном зарезу , англ. Divide, Фиксированная точка) — Делит аккумулятор по параметру
- ПЗАФ ( ср. Promeni Z nak u A kumulatora Fiksnom zarezu , англ. Change the Sign of Accumuator,Fixed Point) — Меняет (переворачивает) знак аккумулятора.
Арифметика с плавающей запятой
[ редактировать ]- САБ ( ср. саб эри , англ. Add) — добавляет параметр в аккумулятор
- ODU ( ср. Odu zmi , англ. Subtract) — вычитает параметр из аккумулятора
- МНО ( ср. Мно жи , англ. Multiply) — умножает аккумулятор на параметр
- DEL ( ср. Del i , en. Divide) — Делит аккумулятор по параметру.
- ПЗА ( ср. Promeni nak Z A kumulatora англ , . Change the Sign of Accumuator) — Меняет (переворачивает) знак аккумулятора.
Побитовый/логический
[ редактировать ]- КОН ( ср. Kon junkcija , англ. Conjunction ) — выполняет логическое И с параметром и аккумулятором и сохраняет результат в аккумуляторе.
- DIS ( ср. Dis junkcija , англ. Disjunction ) — выполняет логическое ИЛИ с параметром и аккумулятором и сохраняет результат в аккумуляторе.
- NEG ( ср. Neg acija , эн. Negation ) — выполняет логическое НЕ над содержимым аккумулятора (игнорирует параметр)
Примечание. Все вышеперечисленные операции являются побитовыми . Их названия подразумевают, что это чисто логические операции , но их можно объяснить так, как будто они работают с векторами битов и отдельно применяют логические операции к каждой паре битов.
- POL ( ср. Po meri L evo , англ. Shift Left) — сдвигает биты аккумулятора влево
- POD ( ср. Po meri D esno , англ. Shift Right) — сдвигает биты аккумулятора вправо
Управление потоком
[ редактировать ]- NES ( ср. Негативни кок С по адресу, указанному параметром , , англ. Negative Jump) выполняет условный переход если текущее значение аккумулятора отрицательное.
- BES ( ср. Be zuslovni S kok , англ. Unconditional Jump) выполняет безусловный переход по адресу, указанному параметром.
- НУС ( ср. Ну ла- С кок , эн. Zero Jump) выполняет условный переход по адресу, указанному параметром, если текущее значение аккумулятора равно нулю.
- ZAR ( ср. Za ustavi R ačunar , англ. Stop the Computer) останавливает любую дальнейшую обработку; это единственная инструкция, которая игнорирует параметр.
Стандартный синтаксис языка ассемблера
[ редактировать ]Синтаксис ассемблера NAR 2 был разработан так, чтобы быть простым и легким для анализа. Каждая строка программы может содержать до одной инструкции, указанной следующим образом:
- Мнемоника инструкций
- Пробел, если инструкция указывает какие-либо индексные регистры, режим адресации или параметр, а затем разделяет их запятыми:
- Имя индексного регистра, если он используется
- Имена флагов режима адресации (также через запятую)
- Значение параметра
Пример кода:
aum X1, p, 0 mua n, 1 aum 15 pir X1, p, n, 1 mua X1, p, n, 0 oduf n, 1 oduf X2, p, n, 0
Режимы адресации
[ редактировать ]Благодаря четырем битам выбора режима адресации (P, R, I и N — индексированный, относительный, косвенный и непосредственный) инструкции NAR 2 могут указывать 16 различных режимов адресации, но не все из них имеют смысл во всех инструкциях. В следующей таблице:
- M[x] указывает 32-битное значение (содержимое) ячейки памяти x.
- BN указывает счетчик программ
- p указывает 16-битный параметр со знаком в местоположении
- Xi указывает индексный регистр, выбранный данными в местоположении.
- f() — это функция «эффективного значения», используемая для косвенной адресации (подробности см. ниже):
Адрес флаги | Тип инструкции | ||||
---|---|---|---|---|---|
П | Р | я | Н | Данные | Прыжок |
- | - | - | - | М[п] | п |
- | - | - | Н | п | п |
- | - | я | - | М[f(М[р])] | е(М[р]) |
- | - | я | Н | е(М[р]) | е(М[р]) |
- | Р | - | - | М[БН+р] | БН+п |
- | Р | - | Н | БН+п | БН+п |
- | Р | я | - | M[f(M[BN+p])] | f(M[BN+p]) |
- | Р | я | Н | f(M[BN+p]) | f(M[BN+p]) |
П | - | - | - | М[Xi+p] | Си+р |
П | - | - | Н | Си+р | Си+р |
П | - | я | - | M[f(M[Xi+p])] | f(M[Xi+p]) |
П | - | я | Н | f(M[Xi+p]) | f(M[Xi+p]) |
П | Р | - | - | М[БН+Xi+p] | БН+Си+п |
П | Р | - | Н | БН+Си+п | БН+Си+п |
П | Р | я | - | M[f(M[BN+Xi+p])] | f(M[BN+Xi+p]) |
П | Р | я | Н | 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 загружена. Он снова читает «Я, 0».
- «I, 0» указывает, что фактический адрес должен быть загружен из ячейки памяти 0.
- Ячейка памяти 0 загружена. Он снова читает «Я, 0».
- «I, 0» указывает, что фактический адрес должен быть загружен из ячейки памяти 0.
- Ячейка памяти 0 загружена. Он снова читает «Я, 0».
- ...
Обратите внимание, что:
муа R, I, 0 ; Память в аккумулятор, относительный, косвенный, из местоположения BN+0
кажется более общим (может заморозить NAR 2 из любого места), но это зависит от того, когда значение регистра BN увеличивается/изменяется.
Вопрос о том, как обращаться с флагом «N» (непосредственный) при наличии флага I (косвенный) открыт, поскольку ситуация несколько неоднозначна, то есть следует ли учитывать значение флага, указанное в исходной инструкции или значение в косвенно указанный (просмотренный) адрес приводит к конфликту. В таблице выше представлен первый случай, показывающий различные режимы адресации, достижимые таким способом.
Чтение значений из индексных регистров
[ редактировать ]NAR 2 имеет инструкции для инициализации значения определенного индексного регистра (мнемоника «PIR»). Однако у него нет специальных инструкций для чтения значений индексных регистров. Это достигается за счет использования флагов режима индексированной и немедленной (P, N) адресации, таких как:
муа Си, П, Н, п; Память в аккумулятор, индексированный, немедленный, 0
... что по сути помещает Xi+n в аккумулятор. При n=0 это превращается в инструкцию «загрузить значение индексного регистра в аккумулятор».
См. также
[ редактировать ]Внешние ссылки
[ редактировать ]- Примеры семинарских задач из ОРС - Примеры студенческих заданий по курсу "ОРС" (Основы компьютерных систем) на сербском языке . Задание «В1: НАР» требует от студента написать симулятор НАР 2.