2012-06-26 2 views
1

Если вы хотите построить процессор, который будет использоваться для запуска любой произвольной программы, каков минимальный набор инструкций (ISA), с которыми вы могли бы справиться?Какова минимальная инструкция по сборке?

Я думал:

  • ALU-OPS (добавить, к югу, мул, дел)

  • нагрузки р, [адрес]

  • магазин рег [адрес]

  • Ветвление - если операция. Может есть филиал, если не равны, если>, если < (branchif reg1, reg2, LABEL)

Что вы думаете?

+0

Ну, вы описываете машину на основе регистра, всегда машина на основе стека ... она может быть намного проще. Просто ваши стандартные арифметические/логические операторы, с некоторыми PUSH/POP и, конечно же, JUMP/JUMPT/JUMPF ... oh и фиксированная длина инструкции. –

+0

Нам учили 8085 микропроцессор, и у него не было никаких встроенных реализаций div и умножения. :) – Shubham

+0

Хотите узнать, принадлежит ли это вместо этого на http://programmers.stackexchange.com? –

ответ

5

Технически вам нужно только One Instruction. Он должен выполнять математическое и условное разветвление. например вычесть и разветвить, если отрицательный.

1

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

Таким образом, нет необходимости в mul или div, так как вы не можете сделать это с повторным сложением или вычитанием, и нет необходимости в sub, если у вас есть neg (нивелируют) и номера будут заворачивать, например, с помощью дополнения до двух.

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

Поскольку у вас нет инструкций ввода/вывода, вам, вероятно, потребуется использовать ввод-вывод с памятью, когда связь с другими устройствами осуществляется через доступ к памяти.

И, без родных push и pop, вам, вероятно, понадобится реализовать свой собственный стек с выделенным регистром (и ячейкой памяти, так как вы, похоже, не переходите в регистр).

Теперь это не будет хорошая архитектура, но она должна функционировать. Как утверждал Matrix Architect, «есть уровни выживания, которые мы готовы принять».

В качестве стороннего разработчика обратите внимание на центральный процессор RCA1802 (с нескольких дней). Он имел no выделенный программный счетчик или указатель стека, вместо этого реализовывая все это в программном обеспечении (подробнее см. here).

1

Во время программирования в 8085 году я чувствовал, что существует несколько способов сделать то же самое. Итак, если это так, вы знаете, что ваш набор команд не минимален.

Я бы предложил следующие инструкции: Добавить, дополнить, логическое И, ИЛИ и загрузить хранилище. Условный и безусловный прыжок.

Большинство других инструкций можно выполнить с помощью приведенных выше инструкций.


EDIT: Просто перечислить инструкции по сборке (на основе 8085):

Я буду рассматривать модель, в которой есть 3 регистра. С операциями, такими как А = В + С

ДОБАВИТЬ В, С (А = В + С)
МНМА (A = A ')
ИЛИ В, С (А = В или С) СПХ хххм (набор ПК хххх)
LDA хххх (нагрузка А с содержанием в хххх адрес)
STA хххх
JZ хххх (Переход, если флаг нуля установлен)

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