Qual è l'insieme minimo assoluto di istruzioni necessarie per costruire un processore completo Turing


19

Ho un'idea generale di come il processore gestisce le istruzioni ma trascorro il mio tempo lavorando in lingue prevalentemente di alto livello. Forse qualcuno che lavora più vicino al ferro può fornire alcune informazioni preziose.

Supponendo che i linguaggi di programmazione siano fondamentalmente astrazioni di livello molto elevato del set di istruzioni di un processore, qual è il set di istruzioni più basilare necessario per creare una macchina completa turing?

Nota: non so nulla della diversità delle architetture hardware ma - per semplicità - supponiamo che sia un tipico processore con un ALU (se necessario) e stack di istruzioni. *


Computer Science SE potrebbe essere un posto migliore in cui porre domande simili. (Inutile dirigerti lì in questo momento.) Domanda interessante però.
Oskar Skog,

Man mano che il numero di istruzioni di un ISA diminuisce, aumenta anche la significatività del NUMERO di istruzioni. Gli ISA diventano più strani quando hanno meno istruzioni di un RISC "ottimale". Un ISA con una sola istruzione sarà strano. // Diventano anche più strani man mano che il numero aumenta e l'ISA diventa un CISC. // "strano" è ovviamente più o meno soggettivo.
Oskar Skog,

Risposte:


35

Si scopre è necessario solo uno di istruzioni per costruire una macchina in grado di Turing-calcolo. Questa classe di macchine che hanno una sola istruzione e sono complete di Turing è chiamata One Instruction Set Computers o anche scherzosamente Ultimate RISC .


4
+1 per ottenere la migliore risposta possibile, a meno che non venga trovata una soluzione con istruzione zero (in realtà, un computer con istruzioni viene talvolta chiamato computer con istruzione zero, perché non sono state trovate informazioni nell'istruzione stessa)
Cort Ammon - Ripristina Monica

4
Sì, ma quell'istruzione non è ciò che completa la macchina di Turing: la magia è in tutti i diversi registri specializzati a cui l'istruzione può rivolgersi. Penso che la tua risposta sottolinei che l'OP identifica "computer" con "architettura Von Neumann", quando in realtà la categoria "computer" è molto più ampia di quella.
Solomon Slow,

2
@jameslarge La magia non è necessariamente nei registri specializzati. BitBitJump, SBNZ, SUBLEQ e SUBNEG non necessitano affatto di registri, solo una singola istruzione ciascuno e memoria stupida.
8bittree,

2
@ 8bittree, Hunh! Immagino di aver dimenticato che progettare architetture strane ma complete di Turing è uno sport competitivo. Quando ho letto la risposta di Jörg, mi è tornato in mente un amico dei miei tempi di laurea (circa 1980-qualcosa) che progettava di costruire un "computer con una istruzione" da chip della serie 74LS, e quindi programmarlo per emulare un DecSystem 10. Ho appena guardato sulla pagina di Wikipedia, e ora so che il suo progetto sarebbe oggi chiamato "Transport Triggered Architecture". Non so se abbia mai seguito.
Solomon Slow

2
@jameslarge: Intel MMU è anche Turing-complete (in particolare, il meccanismo trap). È davvero molto strano, tuttavia, è l'opposto di essere progettato, è un puro incidente.
Jörg W Mittag,

15

Esistono molti modi per implementare qualcosa in cui si può implementare una macchina da turismo.

Mentre stai guardando i processori, quello che è più applicabile è probabilmente il modello di macchina del registro . Il più semplice di questi (in termini di simboli) è il simbolo mulit-tape due ( marke blank). Se cerchi qualcosa di non altrettanto esoterico, il inc(r), dec(r)e jz(r,z)(salta se il registro rè zero all'istruzione z) o il clr(r)(cancella r) inc, je(i,j,z)(salta se il registro i e j sono uguali all'istruzione z).

Ho visto la menzione di un registratore che è:

  • inc (i, m) - incrementa il registro i e vai alla riga m
  • jzdec (i, m1, m2) - se il registro i è 0 vai alla riga m, altrimenti decrementa i e vai alla riga m2

che è anche completamente completo - è una macchina del registro Minsky sebbene abbia altri vincoli sui dati nel nastro (deve essere un numero di Gödel che memorizza lo stato piuttosto che singoli registri)

Questo è tutto. Niente di più.


Quindi, perché non vengono utilizzati questi processori ultra risc? Scrivere un compilatore per loro è una vera seccatura e rinunciare a molte altre cose che il processore può fare. È davvero bello avere un bit per bit and, e addpiuttosto che provare a fare tutto con incrementare i registri e il looping. Questa è la base di un linguaggio di programmazione preferito chiamato Brainfuck che ha 8 istruzioni.

  • > incrementare il puntatore dei dati
  • < decrementa il puntatore dei dati
  • + incrementare i dati nel puntatore dei dati
  • - decrementa i dati nel puntatore dei dati
  • . emette i dati dal puntatore dei dati
  • , leggere l'input, memorizzando i dati nel puntatore dei dati
  • [se i dati sul puntatore sono zero, invece di spostare il puntatore dell'istruzione in avanti di uno, saltalo in avanti al comando dopo il ]comando corrispondente
  • ]se i dati sul puntatore sono diversi da zero, invece di spostare il puntatore dell'istruzione in avanti, tornare al comando dopo il ]comando corrispondente

Si possono trovare compilatori per Brainfuck, anche se non è davvero divertente fare anche cose semplici. A meno che non ti piaccia la frustrazione, che è lo scopo della lingua.

Lettura correlata:


5

Ho il sospetto che Post machine sia la forma più semplice di un dispositivo completo di Turing. È necessaria una scorta di memoria indirizzabile a bit, un registro indirizzi che punti alla posizione corrente dei dati e cinque istruzioni:

  • Imposta il bit nella posizione corrente;
  • Ripristina il bit nella posizione corrente;
  • Passa all'indirizzo successivo (incrementa il registro indirizzi dati);
  • Passa all'indirizzo precedente (decrementa registro indirizzi dati);
  • Controllare il bit nella posizione dati corrente.

Non credo sia facile inventare qualcosa di molto più semplice dal punto di vista hardware, sebbene probabilmente esista qualcosa di ancora più ridotto.


5

implementazioni

Questa risposta si concentrerà su interessanti implementazioni di CPU, compilatori e assemblatori di istruzioni singole.

movfuscator

https://github.com/xoreaxeaxeax/movfuscator

Compila il codice C usando solo movle istruzioni x86, mostrando in modo molto concreto che è sufficiente una singola istruzione.

La completezza di Turing sembra essere stata dimostrata in un documento: https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

subleq

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

Guarda anche

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


3

Qual è l'insieme minimo assoluto di istruzioni necessarie per costruire un processore completo Turing?

Jörg W Mittag ha detto "uno", ma che ne dici di zero?

Perché pensi che un "processore" debba avere "istruzioni"?

Una macchina Turing è un processore completo di Turing e non funziona secondo "istruzioni" in quanto tali. Ha delle regole , ma le regole non sono istruzioni recuperate da una memoria ad accesso casuale.

Quando Alan Turing inventò la sua macchina omonima, stava cercando il modello più semplice possibile di "calcolo" in modo che potesse usare tecniche matematiche per rispondere alla domanda "Che cosa è calcolabile?"

Sarebbe molto difficile progettare una macchina equivalente di Turing che sia più semplice di una vera macchina Turing.

FWIW, il tipo di processore a cui stai pensando --- uno che recupera le istruzioni dalla memoria, le decodifica e le esegue e che opera su dati archiviati nello stesso sistema di memoria --- è noto come Von Neumann Architecture

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.