Minimaler Befehlssatz für Turing-Vollständigkeit

Gast #3584461
Lesenswert?
• ▲
▼
Moin,
in einer Vorlesung haben wir mal gelernt, dass eine Programmiersprache 
eine sehr geringe Anzahl von Anweisungen braucht, um Turing-vollständig 
zu sein. Ich glaube, dass es sechs Befehle waren. Stimmt das und welche 
Befehle könnten das sein? Zwei waren, soweit ich mich erinnere ein 
Additionsbefehl und ein Sprungbefehl. Dazu kommt noch ein Subtraktions- 
oder ein Negierbefehl.
Ich weiß, dass es mehrere Möglichkeiten gibt, aber welche wären das?
Brainfuсk hat acht Befehle und ist Turing-vollständig, also ist die 
maximale benötigte Anzahl eben acht.
Gast #3585536
Lesenswert?
• ▲
▼
Ok, schonmal danke für die Antworten.
Die sind aber schon eher theoretisch und die erste Antwort überschreitet 
meine mathematischen Kenntnisse ;-) Deshalb stelle ich die Frage mal 
anders: Auf welche Befehle kann man einen 'normalen' 
Assemblerbefehlssatz kürzen, um noch Turing-vollständig zu sein. Um die 
Diskussion über 'normal' zu vermeiden, nenne ich mal den AVR- oder PIC- 
(von mir aus auch X86/X64, wobei der wieder CISC ist) Befehlssatz.
Moderator #3585809
Lesenswert?
• ▲
▼
Naja, den hier

  http://en.wikipedia.org/wiki/One_instruction_set_computer#Subtract_and_branch_if_not_equal_to_zero

beschriebenen SBNZ-Befehl kannst du aus den AVR-Befehlen LD, ST, SUB und
BRNE zusammensetzen. Ein auf diese 4 Befehle abgespeckter AVR wäre damit
Turing-vollständig.

Mit weniger als 4 AVR-Befehlen ist dies vermutlich nicht möglich, da man
mindestens einen Lese- und einen Schreibbefehl für den RAM, dazu noch
einen Arithmetik- und einen bedingten Sprungbefehl benötigt. Da es diese
vier Befehlstypen nicht in Kombination gibt, wird ein Exemplar von jedem
benötigt.
#3588026
Lesenswert?
• ▲
▼
Subtraktion ist nicht notwendig, da sie als Sonderform der Addition 
nachgebildet werden kann.

IMHO ist man bereits Turing vollständig, wenn man kann
* aus dem Speicher lesen und in den Speicher schreiben
* Addition (wobei ein Inkrement bereits genügen müsste)
* Vergleich (auf 0)
* Sprung, bzw. bedingter Sprung.

Ich denke das müsste genügen. Alles andere kann dann darauf aufbauend 
implementiert werden.
#3588110
Lesenswert?
• ▲
▼
Yalu X. schrieb:

> Wie geht das?
>
> Aus Subtraktionen lässt sich relativ leicht eine Addition zaubern, aber
> für die umgekehrte Richtung fällt mir spontan nichts ein. Vielleicht
> habe ich aber auch nur gerade ein Brett vor dem Kopf :)

Ah, richtig. Anders rum.
In Douglas Hpftstters 'Gödel Escher Bach' ist das irgendwo von der Pieke 
auf durchexerziert.
#3588135
Lesenswert?
• ▲
▼
Dussel schrieb:
> Auf welche Befehle kann man einen 'normalen'
> Assemblerbefehlssatz kürzen, um noch Turing-vollständig zu sein. Um die
> Diskussion über 'normal' zu vermeiden, nenne ich mal den AVR- oder PIC-
> (von mir aus auch X86/X64, wobei der wieder CISC ist) Befehlssatz.

MOV (x86) reicht, allgemeiner "Load Constant", "Load Indexed" und "Store 
Indexed". Letztere beide dürfen auch so weit eingeschränkt sein, dass 
man damit nur auf eine gerade Adresse oder ihre ungerade Folgeadresse 
schreiben kann. Wenn man von endlichem Speicher ausgeht und ein Programm 
mit Endlosschleifen schreiben möchte braucht man zudem noch einen 
unbedingten Sprungbefehl.

Paper dazu gibts da: http://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.