Компьютер с одной инструкцией - One-instruction set computer

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

Архитектура машины

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

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

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

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

Битовые манипуляторы

Бит-манипуляция машины простейшего класса.

BitBitJump

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

Компьютер Тога

Другая машина, названная Тога Компьютер, немного инвертирует и передает выполнение условно в зависимости от результата инверсии. Уникальная инструкция TOGA (a, b) означает TOGвеселье а Аая ветвь к б если результат операции переключения истинный.

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

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

Транспортная триггерная архитектура

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

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

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

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

  • дополнение (addleq, Добавить и ветвь, если лэсс, чем или эквual к нулю)[5]
  • декремент (DJN, dэкремент и ветка (jump) если пonzero)[6]
  • приращение (P1eq, плус 1 и ветвь, если эквual на другое значение)[7]
  • вычитание (субаренда, субтракт и филиал, если лэсс, чем или эквual к нулю)[8][9]
  • вычитание, когда это возможно (арифметическая машина)[требуется разъяснение ][10]

Типы инструкций

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

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

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

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

В СБНЗ а, б, в, г инструкция ("вычесть и перейти, если не равно нулю") вычитает содержимое по адресу а из содержания по адресу б, сохраняет результат по адресу c, а потом, если результат не 0, передает управление в адрес d (если результат равен нулю, выполнение переходит к следующей инструкции по порядку).[3]

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

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

Псевдокод:

    субаренда а, б, c   ; Mem [b] = Mem [b] - Mem [a]                     ; if (Mem [b] ≤ 0) goto c

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

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

    subbleq2 а, б     ; Mem [a] = Mem [a] - ACCUM                     ; ACCUM = Mem [a]                     ; if (Mem [a] ≤ 0) goto b

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

Синтезированные инструкции

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

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

JMP c
                 субаренда Z, Z, c

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

ДОБАВИТЬ a, b
                 субаренда а, Z                 субаренда Z, б                 субаренда Z, Z

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

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

MOV а, б
                 субаренда б, б                 субаренда а, Z                 субаренда Z, б                 субаренда Z, Z

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

BEQ b, c
                 субаренда б, Z, L1                 субаренда Z, Z, ВНЕ             L1: субаренда Z, Z                 субаренда Z, б, c            ВНЕ: ...

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

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

Эмуляция

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

 int объем памяти[], счетчик команд, а, б, c счетчик команд = 0 в то время как (счетчик команд >= 0):     а = объем памяти[счетчик команд]     б = объем памяти[счетчик команд+1]     c = объем памяти[счетчик команд+2]     если (а < 0 или б < 0):         счетчик команд = -1     еще:         объем памяти[б] = объем памяти[б] - объем памяти[а]         если (объем памяти[б] > 0):             счетчик команд += 3         еще:             счетчик команд = c

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

Компиляция

Существует компилятор называется Высшая сублимация написан Олегом Мазонкой, который компилирует упрощенную программу на C в субаренда код.[11]

Вычесть и перейти, если отрицательное

В субнег инструкция ("вычесть и перейти, если отрицательный"), также называется SBN, определяется аналогично субаренда:[2]:41,51–52

    субнег а, б, c   ; Mem [b] = Mem [b] - Mem [a]                     ; if (Mem [b] <0) goto c

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

Синтезированные инструкции

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

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

JMP c
                 субнег POS, Z, c                 ...              c: субнег Z, Z

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

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

subneg4

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

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

Арифметическая машина

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

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

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

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

Псевдокод:

    команда Икс, Y, Z, Т   ; if (Mem [Y]                          ; Mem [Z] = Mem [Y] - Mem [X]

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

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

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

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

пример

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

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

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

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

Транспортная триггерная архитектура

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

   шаг а к б ; Mem [б]: = Mem [а] (+, -, *, /, ...) Mem [б]

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

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

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

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

Cryptoleq

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

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

Cryptoleq a, b, c [b] = O1([а], [б]); IP = c, если O2[b] ≤ 0 IP = IP + 3, иначе

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

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

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

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

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

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

использованная литература

  1. ^ а б Mavaddat, F .; Пархами Б. (октябрь 1988 г.). "URISC: Совершенный компьютер с сокращенным набором команд" (PDF). Int'l J. Электротехническое образование. Издательство Манчестерского университета. 25 (4): 327–334. Дои:10.1177/002072098802500408. S2CID  61797084. Получено 2010-10-04.В этой статье рассматривается «машина с одной трехадресной инструкцией как окончательный вариант RISC-дизайна (URISC)». Не называя инструкции, она описывает SBN OISC и связанный с ним язык ассемблера, подчеркивая, что это универсальный (т.е. Полный по Тьюрингу ) машина, простота которой делает ее идеальной для использования в классе.
  2. ^ а б c d е ж г час Гилрет, Уильям Ф .; Лапланте, Филипп А. (2003). Компьютерная архитектура: минималистская перспектива. Springer Science + Business Media. ISBN  978-1-4020-7416-5. Архивировано из оригинал на 13.06.2009.Эта книга, предназначенная для исследователей, инженеров компьютерных систем, теоретиков вычислений и студентов, представляет собой углубленное изучение различных OISC, включая SBN и MOVE. Он приписывает SBN W. L. van der Poel (1956).
  3. ^ а б c d е ж Нюрнберг, Питер Дж .; Wiil, Uffe K .; Хикс, Дэвид Л. (сентябрь 2003 г.), "Великая унифицированная теория структурных вычислений", Метаинформатика: Международный симпозиум, MIS 2003, Грац, Австрия: Springer Science + Business Media, стр. 1–16, ISBN  978-3-540-22010-7Эта исследовательская работа полностью сосредоточена на SUBLEQ OISC и связанном с ним языке ассемблера, используя имя SUBLEQ для «как инструкции, так и любого языка, основанного на ней».
  4. ^ Олег Мазонка, «Битовое копирование: максимальная вычислительная простота», Журнал сложных систем 2011, Том 19, №3, стр. 263–285
  5. ^ "Аддлек". Эсоланг Вики. Получено 2017-09-16.
  6. ^ "DJN OISC". Эсоланг Вики. Получено 2017-09-16.
  7. ^ "P1eq". Эсоланг Вики. Получено 2017-09-16.
  8. ^ Мазонка, Олег (октябрь 2009 г.). "SUBLEQ". Архивировано из оригинал на 2017-06-29. Получено 2017-09-16.
  9. ^ «Субъект». Эсоланг Вики. Получено 2017-09-16.
  10. ^ З. А. Мельзак (1961). «Неформальный арифметический подход к вычислимости и вычислениям». Канадский математический бюллетень. 4 (3): 279–293. Дои:10.4153 / CMB-1961-031-9.
  11. ^ Олег Мазонка Простой многопроцессорный компьютер на базе Subleq
  12. ^ Я. Ламбек (1961). «Как программировать бесконечные счеты». Канадский математический бюллетень. 4 (3): 295–302. Дои:10.4153 / CMB-1961-032-6.
  13. ^ Джонс, Дуглас В. (июнь 1988 г.). "Абсолютный RISC". Новости компьютерной архитектуры ACM SIGARCH. Нью-Йорк: ACM. 16 (3): 48–55. Дои:10.1145/48675.48683. S2CID  9481528. Получено 2010-10-04.«Компьютерные архитектуры с сокращенным набором команд вызывают значительный интерес с 1980 года. Конечная архитектура RISC, представленная здесь, является крайней, но простой иллюстрацией такой архитектуры. В ней есть только одна инструкция, перемещать память в память, но она полезна».
  14. ^ Катсулис, Джон (2005), Разработка встроенного оборудования (2-е изд.), O'Reilly Media, стр. 327–333, ISBN  978-0-596-00755-3
  15. ^ Мазонка, Олег; Цуцос, Нектариос Георгиос; Маниатакос, Михаил (2016), "Cryptoleq: гетерогенная абстрактная машина для зашифрованных и незашифрованных вычислений", IEEE Transactions по информационной криминалистике и безопасности, 11 (9): 2123–2138, Дои:10.1109 / TIFS.2016.2569062, S2CID  261387

внешние ссылки