Який абсолютний мінімальний набір інструкцій, необхідних для складання повного процесора Тьюрінга


19

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

Якщо припустити, що мови програмування - це в основному абстракції високого рівня в наборі інструкцій процесора, що є найосновнішим набором інструкцій, необхідних для створення повноцінної машини?

Примітка: Я не знаю нічого про різноманітність апаратних архітектур, але - для простоти - припускаємо, що це типовий процесор з ALU (якщо потрібно) та стеком інструкцій. *


Інформатика SE може бути кращим місцем для запитання подібних питань. (Немає сенсу направляти вас туди на даний момент.) Хоча цікаве питання.
Оскар скаго

Із зменшенням кількості інструкцій ISA зменшується, а також значущість НОМЕРІ інструкцій. ISA стають більш дивними, коли в них менше інструкцій, ніж "оптимальний" RISC. ISA з однією інструкцією буде дивною. // Вони також стають більш дивними, оскільки кількість збільшується, а ISA стає CISC. // "дивно", звичайно, більш-менш суб'єктивно.
Оскар скаго

Відповіді:


35

Виявляється, вам потрібна лише одна інструкція для створення машини, здатної здійснювати Тьюрінг-обчислення. Цей клас машин, у яких є лише одна інструкція і є Тьюрінг-завершеним, називається " Комп'ютери з однією інструкцією" або також дещо жартома Ultimate RISC .


4
+1 для отримання найкращої можливої ​​відповіді, якщо не буде знайдено рішення з нульовою інструкцією (насправді одні комп'ютери з інструкціями іноді називають комп’ютерами з нульовою інструкцією, оскільки в самій інструкції немає інформації)
Cort Ammon - Відновлення Моніки

4
Так, але ця інструкція не є тим, що робить машину Тьюрінга завершеною: магія полягає у всіх різних спеціалізованих регістрах, до яких може звернутися інструкція. Я думаю, що ваша відповідь вказує на те, що ОП порівнює «комп’ютер» з «архітектурою Фон Ноймана», а насправді категорія «комп’ютери» набагато ширша за це.
Соломон повільно

2
@jameslarge Магія не обов'язково в спеціалізованих регістрах. BitBitJump, SBNZ, SUBLEQ і SUBNEG зовсім не потрібні регістри, а лише одна інструкція і німа пам'ять.
8bittree

2
@ 8bittree, Хун! Напевно, я забув, що проектувати дивні, але Тюрінг-архітектури - це змагальний вид спорту. Коли я прочитав відповідь Йорга, я згадав про свого друга, який був ще в мої дні, коли він планував побудувати "один комп'ютер із інструкціями" з мікросхем серії 74LS, а потім запрограмував його для імітації DecSystem 10. Я просто подивився на сторінці Вікіпедії, і тепер я знаю, що його дизайн сьогодні буде називатися «Транспортна спрацьована архітектура». Я не знаю, чи він коли-небудь дотримувався його.
Соломон повільно

2
@jameslarge: Intel MMU також є повним Тьюрінгом (зокрема, механізм пастки). Це насправді дуже дивно, однак, це навпаки, що проектується, це чиста випадковість.
Йорг W Міттаг

15

Існує багато способів втілити щось, у що можна реалізувати тюрінг-машину.

Якщо ви дивитесь на процесори, найбільш придатним є, мабуть, модель машини реєстрації . Найпростіший з них (з точки зору символів) - це багатомільйонний два символи ( markі blank). Якщо ви йдете на що - то не зовсім як езотеричне, то inc(r), dec(r)і jz(r,z)(стрибок , якщо регістр rдорівнює нулю в інструкції z) або clr(r)(прозорий r) inc, je(i,j,z)(перехід , якщо регістр я і J рівні інструкції г).

Я бачив згадку про машину реєстру, яка є:

  • inc (i, m) - приріст регістру i та перехід до рядка m
  • jzdec (i, m1, m2) - якщо регістр i дорівнює 0, перейдіть до рядка m, інакше зменшення i, і перейдіть до рядка m2

який також є повним - його машина реєстру Мінських, хоча вона має інші обмеження щодо даних на стрічці (це має бути номер Gödel, що зберігає стан, а не окремі регістри)

Це воно. Нічого більше.


Отже, чому замість цього не використовуються ці ультрарискові процесори? Справжній біль написати компілятор для них, і ви відмовитеся від багатьох інших речей, які може зробити процесор. Дуже приємно мати побітку and, addа не намагатися робити все із збільшенням регістрів і циклічним циклом. Це основа улюбленої мови програмування під назвою Brainfuck, яка має 8 інструкцій.

  • > приріст покажчика даних
  • < зменшення покажчика даних
  • + збільшення даних за покажчиком даних
  • - зменшення даних за покажчиком даних
  • . вивести дані за покажчиком даних
  • , зчитувати введення даних, зберігаючи дані в покажчику даних
  • [якщо дані вказівника дорівнюють нулю, замість того, щоб переміщувати вказівник інструкції вперед, переходьте його до команди після відповідної ]команди
  • ]якщо дані за вказівником ненульові, замість того, щоб переміщувати вказівник інструкції вперед, перейдіть назад до команди після відповідної ]команди

Можна знайти компілятори до Brainfuck, хоча в ньому насправді не цікаво робити навіть прості речі. Якщо ви не насолоджуєтесь розчаруванням, що є метою мови.

Пов'язане читання:


5

Я підозрюю, що поштова машина - це найпростіша форма пристрою Тьюрінга. Вам потрібен запас бітової адреси пам'яті, регістр адрес, який вказує на поточне місцезнаходження даних, і п'ять інструкцій:

  • Встановити біт у поточному місці;
  • Скиньте біт у поточному місці;
  • Перехід до наступної адреси (реєстр даних про збільшення даних);
  • Перехід до попередньої адреси (регістр адрес даних про декремент);
  • Перевірте біт у поточному місці даних.

Я не думаю, що легко винайти щось набагато простіше апаратне, хоча щось ще більш скорочене, ймовірно, існує.


5

Впровадження

Ця відповідь буде зосереджена на цікавих реалізаціях єдиних наборів процесорів, компіляторів та асемблерів.

мовфускатор

https://github.com/xoreaxeaxeax/movfuscator

Компілює код C, використовуючи лише movінструкції x86, доволі конкретно показуючи, що однієї інструкції достатньо.

Здається, повнота Тьюрінга була доведена в роботі: https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

subleq

https://esolangs.org/wiki/Subleq :

Дивись також

/programming/3711443/minimal-instruction-set-to-solve-any-problem-with-a-computer-program/38523869#38523869


3

Який абсолютний мінімальний набір інструкцій, необхідних для створення повного процесора Тьюрінга?

Йорг W Міттаг сказав: "один", а як щодо нуля?

Чому ви вважаєте, що "процесор" повинен мати "інструкції"?

Машина Тьюрінга - це повний процесор Тьюрінга, і він не працює за "інструкціями" як такими. У ньому є правила , але правила - це не інструкції, що витягуються з пам'яті з випадковим доступом.

Коли Алан Тьюрінг придумав свою однойменну машину, він шукав найпростішу можливу модель "обчислення", щоб він міг використовувати математичні прийоми для відповіді на питання "Що обчислюється?"

Вам важко буде спроектувати машину, еквівалентну Тьюрінгу, простішу, ніж фактичну машину Тьюрінга.

FWIW, тип процесора, про який ви думаєте --- той, який отримує інструкції з пам'яті, розшифровує їх і виконує їх, і який працює на даних, що зберігаються в тій же системі пам'яті --- відомий як архітектура Фон Ноймана

https://en.wikipedia.org/wiki/Von_Neumann_architecture

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.