WikiDer > НАР 1
Эта статья не цитировать любой источники. (Декабрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
НАР 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.
Смотрите также
Профессор Неделько Парезанович (на сербском языке)