НАР 1 - NAR 1

НАР 1 или просто НАР (сербский NaСтавни рачунар en. Образовательный компьютер) была теоретической моделью компьютера, созданной на математическом факультете Белградский университет профессор Неделько Парезанович (На сербском: Недељко Парезановић). Он использовался для язык ассемблера и Компьютерная архитектура курсы.

Характеристики

НАР 1 процессор имеет 5-кусочек адресная шина (32 байты адресуемой памяти) и 8-битный шина данных. Машина инструкции были однобайтовыми с тремя старшие биты с указанием код операции и 5 младшие значащие биты параметр - адрес памяти. Один 8-битный регистр аккумулятора был доступен и не было флаги или регистры флагов. Только режим абсолютной адресации был доступен, а все остальные были достигнуты самомодифицирующийся код.

Хотя это только теоретический компьютер, были даны следующие физические характеристики:

  • Цикл памяти: 1 мкс
  • Цикл арифметической операции (SABF): 0,9 мкс (900 нс)
  • Панель управления облегчает включение и выключение питания, ввод и считывание данных из памяти, ввод счетчика команд и выбор режима выполнения программы или режима панели управления.

Кодирование и набор инструкций

  • SABF (001aaaaa, SR. Сабэри ты Fиксном зарезу, en. Добавить фиксированную точку) загружает содержимое ячейки памяти, указанной параметром адреса, добавляет его к текущему значению аккумулятора и сохраняет результат в аккумуляторе.
  • PZAF (010xxxxx, SR. пРомени Zнак Аkumulatora u Fиксном зарезу, en. Изменить знак аккумулятора в фиксированной точке) Отменяет значение фиксированной точки (например, целое число) в аккумуляторе
  • АУМ (011aaaaa, SR. Акумулятор U MEmoriju, en. Accumulator Into Memory) сохраняет содержимое аккумулятора в ячейку памяти, указанную параметром адреса
  • MUA (100ааааа, SR. MEmorija U Акумулятор, en. Memory Into Accumulator) загружает содержимое ячейки памяти, указанной параметром address, в аккумулятор
  • РЭШ (101ааааа, SR. Neгативни Sкок, en. Отрицательный прыжок) выполняет условный переход на адрес, указанный параметром, если текущее значение аккумулятора отрицательное
  • ZAR (110xxxxx, SR. Zaустави рачунар, en. Остановить компьютер) останавливает дальнейшую обработку.

Еще две инструкции не были указаны, но обычно присутствовали в симуляторах и принимали коды инструкций 000aaaaa и 111aaaaa:

  • BES (SR. БытьZuslovni Sкок, en. Безусловный прыжок) выполняет безусловный прыжок по адресу, указанному параметром
  • NUS (SR. Nuля-Sкок, en. Zero Jump) выполняет условный переход по адресу, указанному в параметре, если текущее значение аккумулятора равно нулю

Примеры программ

Пример программы, суммирующей массив 8-битных целых чисел:

00:     0         ; ввод: 0 или значение 22, вывод: результат01..21: 0,0,0...  ; ввод: значения 1..2122:     MUA  0    ; Запуск программы; Загрузить аккумулятор с адреса 023:     SABF 1    ; Добавить значение из адреса 1 в аккумулятор24:     АУМ  0    ; Сохранить аккумулятор по адресу 025:     MUA  23   ; Инструкция загрузки по адресу 23 (SABF)26:     SABF 31   ; Добавить значение из адреса 31 (+1) в аккумулятор27:     АУМ  23   ; Сохранить аккумулятор по адресу 23 (изменяет инструкцию SABF)28:     SABF 30   ; Добавить значение из адреса 30 в аккумулятор29:     РЭШ  22   ; Вернитесь к 22, если значение аккумулятора отрицательное30:     ZAR  10   ; Остановите компьютер. Аргумент заставляет этот байт иметь значение - (SABF 22) = -54.31:     1         ; Значение, добавляемое к адресу на каждой итерации

Вышеуказанная программа добавляет до 22 8-битных значений, если выполняется с адреса 22:

  • Значения 1-21 хранятся в ячейках 1-21
  • Значение 22 сохраняется в ячейке 0 вместо константы 0 и будет заменено результатом

Программы NAR 1 обычно самомодифицируются. В отличие от некоторых других архитектур, это не «уловка». Поскольку регистр не может адресовать память, единственный способ динамически манипулировать данными памяти - это модифицировать инструкции манипулирования памятью. В приведенном выше примере также содержится типичный прием для экономии памяти - инструкция (по адресу 30) повторно используется как данные другой инструкцией (по адресу 28).

Если начальным значением аккумулятора можно управлять с панели управления, в нем можно сохранить 23-е значение. Вышеупомянутая программа должна быть лишь немного изменена - инструкция SABF 1 по адресу 23 должна быть изменена на SABF 0, и программа должна выполняться с этого адреса (23), а не с 22.

Другие приемы включали использование изменения знака после изменения инструкции, как показано в следующем примере:

00..21: 0,0,0...  ; входные значения от 22 до 122:     0         ; ввод: 0 или значение 23, вывод: результат23:     MUA  21   ; запуск программы; Загрузить (следующее) значение24:     SABF 22   ; Добавить промежуточный итог 22 в аккумулятор25:     АУМ  22   ; Сохранить промежуточный итог до 2226:     MUA  23   ; Загрузить инструкцию 23 в аккумулятор27:     SABF 31   ; Уменьшить инструкцию на 128:     АУМ  23   ; Инструкция по обновлению29:     РЭШ  23   ; Повторите, если инструкция по-прежнему отрицательная30:     ZAR       ; В противном случае остановите компьютер31:     -1        ; Постоянная нужна для обучения в 27

Здесь инструкция «MUA 21» по адресу 23 имеет двоичное значение 10010101, которое равно -107 десятичному разряду при обработке как целое число со знаком в два дополнения. Команды по адресам 26, 27 и 28 уменьшают это значение на 1 на каждой итерации. Это изменит 5 младших значащих битов, определяющих адрес, и не коснется трех битов, указывающих инструкцию, пока эта инструкция не станет MUA 0 (10000000 двоичный = -128 десятичный, отрицательный). Как только это уменьшится на единицу, оно станет 01111111 (+127 в десятичной системе), что больше не является отрицательным и приведет к прохождению инструкции перехода при отрицательном значении на 29, переходя к «остановке компьютера» на 30.

Как и в предыдущем случае, эта программа может складывать от 22 до 24 значений, в зависимости от того, можно ли использовать адрес 22 как для ввода, так и для вывода и можно ли использовать начальное значение аккумулятора в качестве ввода (тогда программа должна выполняться с адреса 24 и инструкция на 23 должна быть MUA 22).

Если конкретная реализация останавливает компьютер, если он встречает неизвестный код операции или реализует дополнительную инструкцию безусловного перехода с кодом операции «111aaaaa», то такое поведение можно использовать следующим образом:

00..22: 0,0,0...  ; входные значения от 23 до 123:     0         ; ввод: 0 или значение 24, вывод: результат24:     MUA  22   ; запуск программы; Загрузить (следующее) значение25:     SABF 23   ; Добавить промежуточный итог по 23 к аккумулятору26:     АУМ  23   ; Сохранить промежуточный итог до 2327:     MUA  24   ; Загрузить инструкцию 24 в аккумулятор28:     SABF 31   ; Уменьшить инструкцию на 129:     АУМ  24   ; Инструкция по обновлению30:     РЭШ  24   ; Повторите, если инструкция по-прежнему отрицательная31:     -1        ; BES 31 или неверная инструкция и константа для инструкции на 28

Выше значение «-1», найденное по адресу 31, можно рассматривать либо как недопустимую инструкцию, вызывающую остановку компьютера, либо как безусловный переход (BES 31) к тому же адресу, что приводит к бесконечному циклу, не влияющему на результат (элемент управления панель можно использовать для его отображения).

Наконец, в зависимости от того, решено ли, что компьютер остановит выполнение программы, если он достигнет конца памяти (адрес 31, не будет откат к адресу 0), указанная выше программа может быть реорганизована, чтобы принять на одно значение больше, исключив необходимость в инструкцию "остановить компьютер", а именно:

00..22: 0,0,0...  ; входные значения от 23 до 123:     0         ; ввод: 0 или значение 24, вывод: результат24:     -1        ; Постоянная нужна для обучения в 2925:     MUA  22   ; запуск программы; Загрузить (следующее) значение26:     SABF 23   ; Добавить промежуточный итог по 23 к аккумулятору27:     АУМ  23   ; Сохранить промежуточный итог до 2328:     MUA  25   ; Загрузить инструкцию 25 в аккумулятор29:     SABF 24   ; Уменьшить инструкцию на 130:     АУМ  25   ; Инструкция по обновлению31:     РЭШ  25   ; Повторите, если инструкция по-прежнему отрицательная; ------------- конец памяти

Мелочи

  • Слово "нар" означает Обучающая компьютерная модель
  • Создано много тренажеров НАР 1. Один был назван «Шлива» (en. слива ) поскольку этот фрукт растет в Сербия, а "нар" - нет.
  • Одной из часто задаваемых задач было создание программы, которая складывает как можно больше чисел, сохраняя эти числа в 32-байтовой памяти вместе с программой.
  • Некоторые протоколы языка ассемблера являются производными от кода хулила NAR1.

Смотрите также

Профессор Неделько Парезанович (на сербском языке)