Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Компьютер с одним набором команд ( OISC ), иногда называемый компьютером с конечным сокращенным набором команд ( URISC ), представляет собой абстрактную машину, которая использует только одну команду, что устраняет необходимость в коде операции на машинном языке . [1] [2] [3] При разумном выборе одной инструкции и при наличии бесконечных ресурсов, OISC может быть универсальным компьютером так же, как традиционные компьютеры с несколькими инструкциями. [2] : 55 OISC рекомендованы в качестве вспомогательных средств в обучении компьютерной архитектуре [1]: 327 [2] : 2 и использовались в качестве вычислительных моделей в исследованиях структурных вычислений. [3]

Архитектура машины [ править ]

В полной по Тьюрингу модели каждая ячейка памяти может хранить произвольное целое число, и - в зависимости от модели [ требуется пояснение ]  - может быть произвольно много мест. Сами инструкции хранятся в памяти как последовательность таких целых чисел.

Существует класс универсальных компьютеров с единственной командой, основанной на битовых манипуляциях, таких как копирование битов или инверсия битов . Поскольку их модель памяти конечна, как и структура памяти, используемая в реальных компьютерах, эти машины обработки битов эквивалентны реальным компьютерам, а не машинам Тьюринга. [4]

Известные в настоящее время OISC можно условно разделить на три большие категории:

  • Битовые манипуляторы
  • Машины с архитектурой, запускаемой транспортом
  • Полные по Тьюрингу машины на основе арифметики

Машины с битовыми манипуляциями [ править ]

Машины с битовыми манипуляциями - это самый простой класс.

BitBitJump [ править ]

Машина для побитового копирования, называемая BitBitJump, копирует один бит в память и безоговорочно передает выполнение по адресу, указанному одним из операндов инструкции. Этот процесс оказывается способным к универсальным вычислениям (т.е. способным выполнять любой алгоритм и интерпретировать любую другую универсальную машину), потому что копирование битов может условно изменить код, который будет впоследствии выполняться.

Компьютер Toga [ править ]

Другая машина, называемая Toga Computer , немного инвертирует и передает выполнение условно в зависимости от результата инверсии. Уникальной инструкцией является TOGA (a, b), которая означает TOG gle a A nd переход к b, если результат операции переключения истинен.

Многобитовый копировальный аппарат [ править ]

Подобно BitBitJump, многобитовый копировальный аппарат копирует несколько бит одновременно. Проблема вычислительной универсальности решается в этом случае сохранением в памяти предопределенных таблиц переходов. [ требуется разъяснение ] [ требуется разъяснение ]

Транспортная триггерная архитектура [ править ]

Архитектура с запуском транспорта (TTA) - это конструкция, в которой вычисления являются побочным эффектом передачи данных. Обычно некоторые регистры памяти (запускающие порты) в общем адресном пространстве выполняют назначенную операцию, когда инструкция ссылается на них. Например, в OISC, использующем одну команду копирования из памяти в память, это выполняется путем запуска портов, которые выполняют арифметические операции и переходы указателя команд при записи.

Полные по Тьюрингу машины на основе арифметики [ править ]

Полные по Тьюрингу машины на основе арифметики используют арифметические операции и условный переход. Как и два предыдущих универсальных компьютера, этот класс также является полным по Тьюрингу. Инструкция работает с целыми числами, которые также могут быть адресами в памяти.

В настоящее время известно несколько OISC этого класса, основанных на различных арифметических операциях:

  • добавление (addleq, добавить и ветви , если л ESS чем или экв UAL к нулю) [5]
  • декремент (DJN, д ecrement и ветви ( J UMP) , если п onzero) [6]
  • прирост (P1eq, р Lus 1 и ветвь , если э UAL на другое значение) [7]
  • вычитание (subleq, суб -кишечный тракт и ветвь , если л ESS чем или э UAL к нулю) [8] [9]
  • вычитание, когда возможно (арифметическая машина) [ требуется пояснение ] [10]

Типы инструкций [ править ]

Обычный выбор для отдельной инструкции:

  • Вычесть и перейти, если меньше или равно нулю
  • Вычесть и перейти, если отрицательное
  • Вычесть, если положительный результат else
  • Обратное вычитание и пропуск при заимствовании
  • Перемещение (используется как часть архитектуры, запускаемой транспортом)
  • Вычесть и перейти, если не ноль (SBNZ a, b, c, пункт назначения)
  • Cryptoleq (гетерогенные зашифрованные и незашифрованные вычисления)

В данной реализации используется только одна из этих инструкций. Следовательно, нет необходимости в коде операции для определения того, какую команду выполнять; выбор инструкции является неотъемлемой частью конструкции машины, и OISC обычно называют в честь используемой инструкции (например, SBN OISC, [2] : 41 язык SUBLEQ, [3] : 4 и т. д.). Каждую из приведенных выше инструкций можно использовать для построения полного по Тьюрингу OISC.

В этой статье представлены только инструкции, основанные на вычитании, среди тех, которые не запускаются транспортом. Однако можно построить полные машины Тьюринга, используя инструкции, основанные на других арифметических операциях, например, сложении. Например, один вариант, известный как DLN (уменьшение и переход, если не равен нулю), имеет только два операнда и использует декремент в качестве базовой операции. Для получения дополнительной информации см. Производные языки Subleq [1] .

Вычесть и перейти, если не равно нулю [ править ]

SBNZ a, b, c, d Инструкции ( « вычесть и ветвь , если не равен нулю ») вычитают содержимое по адресу а из содержания по адресу б , сохраняет результат в адресном C , а затем, если результат не равен 0 , передает управление адресом г ( если результат равен нулю, выполнение переходит к следующей инструкции по порядку). [3]

Вычесть и перейти, если меньше или равно нулю [ править ]

Команда subleqвычесть и перейти, если меньше или равно нулю ») вычитает содержимое по адресу a из содержимого по адресу b , сохраняет результат по адресу b , а затем, если результат не положительный , передает управление адрес c (если результат положительный, выполнение переходит к следующей инструкции по порядку). [3] : 4–7

Псевдокод :

 subbleq  a ,  b ,  c  ; Мем [б] = Мем [б] - Мем [а]  ; if (Mem [b] ≤ 0) goto c

Условное ветвление можно подавить, установив третий операнд равным адресу следующей инструкции в последовательности. Если третий операнд не записан, подразумевается это подавление.

Также возможен вариант с двумя операндами и внутренним аккумулятором , где аккумулятор вычитается из ячейки памяти, указанной первым операндом. Результат сохраняется как в аккумуляторе, так и в ячейке памяти, а второй операнд указывает адрес ветвления:

 subleq2  a ,  b  ; Mem [a] = Mem [a] - АККУМ  ; АККУМ = Мем [а]  ; if (Mem [a] ≤ 0) goto b

Хотя здесь используются только два (вместо трех) операндов на инструкцию, соответственно, для выполнения различных логических операций требуется больше инструкций.

Синтезированные инструкции [ править ]

Можно синтезировать многие типы инструкций более высокого порядка, используя только инструкцию subleq . [3] : 9–10

Безусловный переход:

JMP c
 subbleq  Z ,  Z ,  c

Сложение может быть выполнено путем повторного вычитания без условного ветвления; например, следующие инструкции приводят к тому, что контент в местоположении a добавляется к контенту в местоположении b :

ДОБАВИТЬ a, b
 subleq  a ,  Z  subleq  Z ,  b  subleq  Z ,  Z

Первая инструкция вычитает содержание в местоположении а от содержания в точке Z (который равен 0) и сохраняет результат (который является отрицательным содержанием в ) в месте Z . Вторая инструкция вычитает этот результат из b , сохраняя в b эту разницу (которая теперь является суммой содержимого, первоначально находившегося в a и b ); третья команда восстанавливает значение 0 до Z .

Аналогично может быть реализована инструкция копирования; например, следующие инструкции приводят к тому, что контент в местоположении b заменяется контентом в местоположении a , опять же при условии, что контент в местоположении Z поддерживается как 0:

MOV а, б
 subleq  b ,  b  subleq  a ,  Z  subleq  Z ,  b  subleq  Z ,  Z

Можно построить любой желаемый арифметический тест. Например, условие перехода при нулевом значении может быть собрано из следующих инструкций:

BEQ b, c
 subleq  b ,  Z ,  L1  subbleq  Z ,  Z ,  OUT  L1:  subleq  Z ,  Z  subbleq  Z ,  b ,  c  OUT:  ...

Subleq2 также можно использовать для синтеза инструкций более высокого порядка, хотя обычно он требует больше операций для данной задачи. Например, требуется не менее 10 инструкций subleq2, чтобы перевернуть все биты в данном байте:

НЕ
 subleq2  tmp  ; tmp = 0 (tmp = временный регистр)  subleq2  tmp  subleq2  minus_one  ; acc = -1  subbleq2  a  ; a '= a + 1  подгруппа q2  Z  ; Z = - a - 1  subbleq2  tmp  ; tmp = a + 1  subleq2  a  ; a '= 0  subleq2  tmp  ; загрузить tmp в соотв.  субкуль q2  a  ; a '= - a - 1 (= ~ a)  subleq2  Z  ; установите Z обратно в 0

Эмуляция [ править ]

Следующая программа (написанная в псевдокоде ) эмулирует выполнение OISC на основе subleq :

 int  memory [],  program_counter ,  a ,  b ,  c  program_counter  =  0  while  ( program_counter  > =  0 ) :  a  =  memory [ program_counter ]  b  =  memory [ program_counter + 1 ]  c  =  memory [ program_counter + 2 ]  if  ( a  <  0  или  b  <  0 ) : program_counter  =  -1  else :  memory [ b ]  =  memory [ b ]  -  memory [ a ]  if  ( memory [ b ]  >  0 ) :  program_counter  + =  3  else :  program_counter  =  c

Эта программа предполагает, что memory [] индексируется неотрицательными целыми числами. Следовательно, для команды subbleq ( a , b , c ) программа интерпретирует a <0 , b <0 или выполненную ветвь до c <0 как условие остановки. Подобные переводчик , написанные на subleq -языке (то есть, сам-переводчик , которые могут использовать самомодифицирующийся код , как это предусмотрено природой subleq инструкции) можно найти во внешних ссылках ниже.

Компиляция [ править ]

Существует компилятор под названием Higher Subleq написанный Олегом Mazonka , что составляет упрощенную программу C в subleq код. [11]

Вычесть и перейти к отрицательному результату [ править ]

Subneg инструкция ( « вычитать и ветви , если отрицательный »), также называемый SBN , определяется аналогично subleq : [2] : 41,51-52

 subneg  a ,  b ,  c  ; Мем [б] = Мем [б] - Мем [а]  ; if (Mem [b] <0) goto c

Условное ветвление можно подавить, установив третий операнд равным адресу следующей инструкции в последовательности. Если третий операнд не записан, подразумевается это подавление.

Синтезированные инструкции [ править ]

Можно синтезировать многие типы инструкций более высокого порядка, используя только инструкцию subneg . Для простоты здесь показана только одна синтезированная инструкция, чтобы проиллюстрировать разницу между subleq и subneg .

Безусловный переход: [2] : 88–89

JMP c
 subneg  POS ,  Z ,  c  ...  c:  subneg  Z ,  Z

где Z и POS - местоположения, ранее установленные для содержания 0 и положительного целого числа соответственно;

Безусловное ветвление гарантируется, только если Z изначально содержит 0 (или значение меньше целого числа, хранящегося в POS ). Для очистки Z после разветвления требуется дополнительная инструкция , предполагая, что содержимое Z должно поддерживаться равным 0.

subneg4 [ править ]

Возможен также вариант с четырьмя операндами - subneg4. Инверсия minuend и subtrahend упрощает аппаратную реализацию. Неразрушающий результат упрощает синтетические инструкции.

 subneg4  s ,  m ,  r ,  j  ; адреса вычитания, уменьшения, результата и перехода  ; Mem [r] = Mem [m] - Mem [s]  ; if (Mem [r] <0) goto j

Арифметическая машина [ править ]

Пытаясь сделать машину Тьюринга более интуитивно понятной, З.А. Мелзак рассматривает задачу вычислений с положительными числами. У станка есть бесконечные счеты, бесконечное количество счетчиков (камешков, счетных палочек) изначально в специальном месте S. Станок может выполнять одну операцию:

Возьмите из ячейки X столько жетонов, сколько есть в ячейке Y, перенесите их в ячейку Z и переходите к следующей инструкции.

Если эта операция невозможна из-за того, что в Y недостаточно счетчиков, оставьте счет как есть и перейдите к инструкции T.

По сути, это подсечка, в которой тест выполняется до, а не после вычитания, чтобы все числа оставались положительными и имитировали вычисление человека-оператора на реальных счетах.

Псевдокод :

 команда  X ,  Y ,  Z ,  T  ; если (Mem [Y] <Mem [X]) goto T  ; Mem [Z] = Mem [Y] - Mem [X]

Дав несколько программ: умножение, НОД, вычисление n -го простого числа, представление произвольного числа в базе b , сортировка по порядку величины, Мелзак явно показывает, как смоделировать произвольную машину Тьюринга на своей арифметической машине.

Он упоминает, что с помощью элементов рекурсивных функций легко показать, что каждое число, вычисляемое на арифметической машине, вычислимо. Доказательство этого было дано Ламбеком [12] на эквивалентной машине с двумя инструкциями: X + (приращение X) и X− else T (уменьшение X, если оно не пусто, иначе переход к T).

Обратное вычитание и пропуск при заимствовании [ править ]

В инструкции обратного вычитания и пропуска при заимствовании (RSSB) аккумулятор вычитается из ячейки памяти, и следующая инструкция пропускается, если заимствование было (ячейка памяти была меньше, чем аккумулятор). Результат сохраняется как в аккумуляторе, так и в ячейке памяти. Программный счетчик отображается в ячейке памяти 0. аккумулятора отображается в ячейке памяти 1. [2]

Пример [ править ]

Чтобы установить x равным y минус z:

 # Сначала переместите z в место назначения x.  RSSB  temp  # Три инструкции, необходимые для очистки acc, temp [См. Примечание 1]  RSSB  temp  RSSB  temp  RSSB  x  # Две инструкции очищают acc, x, так как acc уже очищен  RSSB  x  RSSB  y  # Загрузить y в acc: нет заимствования  RSSB  temp  # Сохранить -y в acc, temp: всегда брать и пропускать  RSSB  temp  #  Пропущенный RSSB  x  #  Сохранять y в x, acc # Во-вторых, выполнить операцию.  RSSB  temp  # Три инструкции, необходимые для очистки acc, temp  RSSB  temp  RSSB temp  RSSB  z  # Загрузить z  RSSB  x  # x = y - z [См. Примечание 2]

[Примечание 1] Если значение, сохраненное в «temp», изначально является отрицательным, и инструкция, которая выполнялась прямо перед первым «RSSB temp» в этой подпрограмме, заимствована, то для работы процедуры потребуются четыре инструкции «RSSB temp». .

[Примечание 2] Если значение, сохраненное в «z», изначально является отрицательным, то окончательный «RSSB x» будет пропущен, и, таким образом, процедура не будет работать.

Транспортная триггерная архитектура [ править ]

Архитектура, запускаемая транспортом, использует только инструкцию перемещения , поэтому изначально она называлась «машиной перемещения». Эта инструкция перемещает содержимое одной ячейки памяти в другую ячейку памяти, объединяя с текущим содержимым новой ячейки: [2] : 42 [13]

 переместите a в b  ; Mem [ b ]: = Mem [ a ] (+, -, *, /, ...) Mem [ b ]

иногда пишется как:

 а -> б  ; Mem [ b ]: = Mem [ a ] (+, -, *, /, ...) Mem [ b ]

Выполняемая операция определяется ячейкой памяти назначения. Некоторые ячейки дополнительно специализируются на умножении, другие - в умножении и т. Д. Таким образом, ячейки памяти - это не просто хранилище, а связанная с настройкой арифметико-логического устройства (ALU) для выполнения только одного вида операций с текущим значением ячейки. Некоторые из ячеек представляют собой инструкции потока управления для изменения выполнения программы с помощью переходов, условного выполнения , подпрограмм , if-then-else , for-loop и т. Д.

Создан коммерческий микроконтроллер с запускаемой транспортной архитектурой под названием MAXQ, который скрывает очевидные неудобства OISC за счет использования «карты передачи», которая представляет все возможные места назначения для команд перемещения . [14]

Cryptoleq [ править ]

Процессор Cryptoleq сделан в Нью-Йоркском университете Абу-Даби

Cryptoleq [15] - это язык, состоящий из одной одноименной инструкции, способный выполнять вычисления общего назначения в зашифрованных программах и близкий к Subleq. Cryptoleq работает с непрерывными ячейками памяти, используя прямую и косвенную адресацию, и выполняет две операции O 1 и O 2 над тремя значениями A, B и C:

Cryptoleq a, b, c [b] = O 1 ([a], [b]); IP = c, если O 2 [b] ≤ 0 IP = IP + 3, иначе

где a, b и c адресуются указателем инструкции IP со значением IP-адресации a, IP + 1 указывает на b и IP + 2 на c.

В Cryptoleq операции O 1 и O 2 определяются следующим образом:

Основное отличие от Subleq заключается в том, что в Subleq O 1 ( x, y ) просто вычитает y из x, а O 2 ( x ) равно x . Cryptoleq также гомоморфен Subleq, модульное обращение и умножение гомоморфны вычитанию и операции O 2соответствует тесту Subleq, если значения не были зашифрованы. Программа, написанная на Subleq, может работать на машине Cryptoleq, что означает обратную совместимость. Однако Cryptoleq реализует полностью гомоморфные вычисления, и, поскольку модель может выполнять умножения. Умножению в зашифрованном домене помогает уникальная функция G, которую, как предполагается, трудно реконструировать, и которая позволяет повторно зашифровать значение на основе операции O 2 :

где - повторно зашифрованное значение y и зашифровано нулем. x - это зашифрованное значение переменной, пусть это будет m и равно .

Алгоритм умножения основан на сложении и вычитании, использует функцию G и не имеет условных переходов или ветвей. Шифрование Cryptoleq основано на криптосистеме Пайе .

См. Также [ править ]

  • ФРАКТРАН
  • Зарегистрировать машину
  • Брезент Тьюринга
  • Компьютер с нулевым набором команд

Ссылки [ править ]

  1. ^ а б Маваддат, Ф .; Пархами Б. (октябрь 1988 г.). "URISC: Совершенный компьютер с сокращенным набором команд" (PDF) . Int'l J. Электротехническое образование . Издательство Манчестерского университета. 25 (4): 327–334. DOI : 10.1177 / 002072098802500408 . S2CID  61797084 . Проверено 4 октября 2010 .В этой статье рассматривается «машина с одной трехадресной инструкцией как окончательный вариант RISC-дизайна (URISC)». Не давая имени инструкции, он описывает SBN OISC и связанный с ним язык ассемблера, подчеркивая, что это универсальная (т. Е. Полная по Тьюрингу ) машина, простота которой делает ее идеальной для использования в классе.
  2. ^ a b c d e f g h Гилрет, Уильям Ф .; Лапланте, Филипп А. (2003). Компьютерная архитектура: минималистская перспектива . Springer Science + Business Media . ISBN 978-1-4020-7416-5. Архивировано из оригинала на 2009-06-13.Эта книга, предназначенная для исследователей, инженеров компьютерных систем, теоретиков вычислений и студентов, представляет собой углубленное изучение различных OISC, включая SBN и MOVE. Он приписывает SBN WL van der Poel (1956).
  3. ^ a b c d e f Нюрнберг, Питер Дж .; Wiil, Uffe K .; Хикс, Дэвид Л. (сентябрь 2003 г.), «Великая унифицированная теория структурных вычислений» , Метаинформатика: Международный симпозиум, MIS 2003 , Грац, Австрия: Springer Science + Business Media , стр. 1–16, ISBN 978-3-540-22010-7Эта исследовательская работа полностью сосредоточена на SUBLEQ OISC и связанном с ним языке ассемблера, используя имя SUBLEQ для «как инструкции, так и любого языка, основанного на ней».
  4. ^ Олег Mazonka, "Bit Копирование: The Ultimate вычислительная простота" ., Комплекс Systems Journal 2011, Том 19, N 3, стр 263-285
  5. ^ "Addleq" . Esolang Wiki . Проверено 16 сентября 2017 .
  6. ^ "DJN OISC" . Esolang Wiki . Проверено 16 сентября 2017 .
  7. ^ "P1eq" . Esolang Wiki . Проверено 16 сентября 2017 .
  8. ^ Mazonka Олег (октябрь 2009). «СУБЛЕК» . Архивировано из оригинала на 2017-06-29 . Проверено 16 сентября 2017 .
  9. ^ "Субъект" . Esolang Wiki . Проверено 16 сентября 2017 .
  10. ZA Melzak (1961). «Неформальный арифметический подход к вычислимости и вычислениям» . Канадский математический бюллетень . 4 (3): 279–293. DOI : 10,4153 / CMB-1961-031-9 .
  11. ^ Олег Мазонка Простой многопроцессорный компьютер на базе Subleq
  12. ^ J. Ламбека (1961). «Как программировать бесконечные счеты». Канадский математический бюллетень . 4 (3): 295–302. DOI : 10,4153 / CMB-1961-032-6 .
  13. ^ Джонс, Дуглас В. (июнь 1988 г.). «Абсолютный RISC» . Новости компьютерной архитектуры ACM SIGARCH . Нью-Йорк: ACM. 16 (3): 48–55. DOI : 10.1145 / 48675.48683 . S2CID 9481528 . Проверено 4 октября 2010 . «Компьютерные архитектуры с сокращенным набором команд вызывают значительный интерес с 1980 года. Конечная архитектура RISC, представленная здесь, является крайней, но простой иллюстрацией такой архитектуры. В ней есть только одна инструкция, перемещать память в память, но она полезна».
  14. ^ Catsoulis, Джон (2005), Проектирование встроенных аппаратных средств (2 -е изд.), O'Reilly Media , стр. 327-333, ISBN 978-0-596-00755-3
  15. ^ Мазонка, Олег; Цуцос, Нектариос Георгиос; Маниатакос, Михаил (2016), «Cryptoleq: гетерогенная абстрактная машина для зашифрованных и незашифрованных вычислений», IEEE Transactions on Information Forensics and Security , 11 (9): 2123–2138, doi : 10.1109 / TIFS.2016.2569062 , S2CID 261387 

Внешние ссылки [ править ]

  • Subleq на вики по эзотерическим языкам программирования - интерпретаторы, компиляторы, примеры и производные языки
  • Reductio ad absurdum на YouTube , Кристофер Домас
  • Лабораторный вспомогательный компьютер - реализация ПЛИС с использованием VHDL
  • The Retrocomputing Museum - эмулятор SBN и примеры программ
  • Лабораторный компьютер SBN - реализован на интегральных схемах серии 7400
  • RSSB на вики по эзотерическим языкам программирования - интерпретаторы и примеры
  • 32-битная реализация OISC доктора Добба - архитектура с запуском транспорта (TTA) на FPGA с использованием Verilog
  • Введение в архитектуру MAXQ - включает диаграмму карты передачи
  • OISC-Emulator - графическая версия
  • TrapCC (последние MMU Intel x86 фактически являются полными по Тьюрингу OISC.)
  • Симулятор SBN - симулятор и дизайн, вдохновленный CARDboard Illustrative Aid to Computing
  • Однобитовые вычисления на частоте 60 Гц - промежуточное звено между компьютером и конечным автоматом
  • Машина NOR  - информация о создании ЦП только с одной инструкцией
  • Cryptoleq  - хранилище ресурсов Cryptoleq
  • CAAMP  - Архитектура компьютера в минималистской перспективе
  • DawnOS - операционная система для архитектуры SUBLEQ
  • Unileq - вариант SUBLEQ с использованием беззнаковых целых чисел