С тех пор, как я научился манипулировать сборкой в колледже, я был очарован идеей начать как можно меньше и наращивать до бесконечной сложности.Я работал над своим собственным теоретическим минимальным набором инструкций, который избегает составных инструкций, таких как «subleq».Проблема, с которой я сталкиваюсь с такого рода инструкциями, состоит в том, что они действуют как две (или более) отдельные инструкции с сохраненным состоянием.Другими словами, их можно разбить на (IBM Pseudocode):
S R0,NUMBER
CLI R0,XL4'00'
BNH DESTINATION
Таким образом, минимальный набор инструкций, который я хочу использовать для построения более сложной задачи, уже должен быть разбит на части и не должен содержать состояния.
До сих пор я придумал три инструкции: (s) разорвал, (n) и, (j) - верх.Есть один аккумулятор и счетчик ПК - больше ничего нет.Все инструкции занимают два бита, за которыми следуют X битов, содержащих относительный адрес, что означает отсутствие «немедленных» значений.Я могу загрузить значение в аккумулятор, используя следующие инструкции (8 бит):
00 000111 LOAD S HOLDER ; first we must zero-out the accumulator
01 000110 N HOLDER
01 000101 N HOLDER
00 000100 S HOLDER
01 000011 N HOLDER ; accumulator is now equal to zero
01 XXXXXX N NUMBER ; load number into accumulator
10 000010 J NEXT ; jump over the helper to the next instruction
00 000000 HOLDER = 0
XX XXXXXX NEXT ...
Должно стать очевидным, что редактирование инструкций позволяет эффективно выполнять переходы, но я не совсем уверенкак выполнить такую задачу еще.Что-то настолько простое, что все еще завершено по Тьюрингу, или это просто идея в небе?