Какъв е минималният брой инструкции, които трябва да подържа един процесор, за да бъде той Turing complete?
Отговор: една инструкция! Само че специална!
http://en.wikipedia.org/wiki/One_instruction_set_computerНаправи ми впечатление SUBLEQ OISC архитектурата, защото е лесна за схващане и сравнително лесна за програмиране дори на лист харитя (или в Notepad).
Самата SUBLEQ инструкция на пръв поглед изглежда сложна, но това е заблуждаващо. На практика не би могло да бъде по-лесно! А и командата, която изпълнява този процесор е само една.
SUBLEQ A, B, CA,
B и
C са адреси в паметта. Взимаме стойността, записана в клетка
B, от нея изваждаме стойността, записана в клетка
A и крайният резултат го записваме в клетка
B. Ако резултатът от операцията е положителен, продължаваме със следващата инструкция, в противен случай изпълнението продължава от клетка
C.
Ако в момента изпълняваме инструкция и текущият указател на инструкциите сочи към клетка P, то SUBLEQ инструкцията добива следния вид:
SUBLEQ P, P+1, P+2Примерът със събирането, който го има в линка по-горе е идеален за навлизане в материята. Ще дам малко по-подробно обяснение какво се случва.
SUBLEQ ADD (Y = X + Y)
SUBLEQ JMP (Z = Z - Z)
X Y Z
MEMORY: 00 01 02 03 04 05 06 07 08 09 10 11 12
DATA: 09 11 03 11 10 06 11 11 12 04 05 00 ...other data & memory pointers
INITIAL DATA:
X = 4
Y = 5
Z = 0
SUBLEQ OPERATIONS:
SUBLEQ 09, 11, 03 : Z = Z - X = 0 - 4 = -4
SUBLEQ 11, 10, 06 : Y = Y - Z = 5 - (-4) = 9
SUBLEQ 11, 11, 12 : Z = Z - Z = -4 - (-4) = 0
SUBLEQ ...
FINAL DATA:
X = 4
Y = 9
Z = 0
Данните за изпълнението на програмата започват от клетка
00. Като първа операция получаваме:
SUBLEQ 09, 11, 03A = 09, B = 11, C = 03В превод на чист български език тази команда се превежда така: взимаме стойността, която се намира в клетка 11 и от нея изваждаме стойноста, която се намира в клетка 09. Резултатът записваме в клетка 11.
Малко по-подробно...
Взимаме стойността, записана в клетка
B (0), от нея изваждаме стойността, записана в клетка
A (4) и крайният резултат го записваме в клетка
B (-4). Ако резултатът от операцията е положителен, продължаваме със следващата инструкция
(пропускаме), в противен случай изпълнението продължава от клетка
C (03).
Данните за следващата инструкция започват от клетка
03:
SUBLEQ 11, 10, 06A = 11, B = 10, C = 06Аритметичната операция, която получаваме е 5 - (-4) = 9. Този езултат се записва в клетка 10 и данните за следващата команда започват от клетка 06.
SUBLEQ 11, 11, 12A = 11, B = 11, C = 12Крайният резултат е, че нулираме съдържанието на клетка 11, каквато беше стойността първоначално. Тъй като резултатът от операцията е отрицателен, информацията за следващата команда започва от клетка 12.
--- --- ---
Целта на подобни архитектури с една единствена команда е даде максимално опростена концепция за процесор, който може да се използва в Turing complete машини, което означава, че SUBLEQ процесорът може да прави всичко, което и един Intel Core i7 процесор например.