Bir Turing tam işlemcisi oluşturmak için gereken minimum talimatlar dizisi nedir


19

İşlemcinin talimatları nasıl ele aldığına dair genel bir fikrim var, ancak zamanımı çoğunlukla üst düzey dillerde çalışarak geçiriyorum. Belki de demire daha yakın çalışan birisi değerli bir içgörü sağlayabilir.

Programlama dillerinin temelde bir işlemcinin komut setinin çok yüksek düzeyli soyutlamaları olduğunu varsayarsak, bir turing komple makinesi oluşturmak için gereken en temel talimat seti nedir?

Not: Donanım mimarilerinin çeşitliliği hakkında hiçbir şey bilmiyorum ama - basitlik adına - bunun bir ALU (gerekirse) ve talimat yığınına sahip tipik bir işlemci olduğunu varsayalım. *


Bilgisayar Bilimi SE benzer soruları sormak için daha iyi bir yer olabilir.
Oskar Skog

Bir ISA'nın talimat sayısı azaldıkça, NUMBER talimatın anlamı da azalır. ISA'lar, "optimal" RISC'den daha az talimat aldıklarında tuhaflaşırlar. Sadece bir talimatı olan bir ISA tuhaf olacak. // Sayı arttıkça garipleşiyorlar ve ISA CISC oluyor. // "tuhaf" elbette az çok özneldir.
Oskar Skog

Yanıtlar:


35

Turing-computation yapabilen bir makine yapmak için sadece bir talimata ihtiyacınız var . Tek bir komutu olan ve Turing-complete olan bu makine sınıfına One Komut Seti Bilgisayarları veya biraz şaka bir şekilde Ultimate RISC denir .


4
Sıfır komut çözümü bulunmadığı sürece mümkün olan en iyi cevabı vurmak için +1 (aslında, bir komut bilgisayarına bazen sıfır komut bilgisayarı denir, çünkü talimatın kendisinde hiçbir bilgi bulunmaz)
Cort Ammon - Monica'yı yeniden yerleştir

4
Evet, ancak bir talimat makineyi yapan şey değildir Turing tamamlandı: Sihir, talimatın ele alabileceği tüm farklı özel kayıtlardadır. Bence cevabınız OP'nin "bilgisayar" ı "Von Neumann mimarisi" ile eşitlediğine işaret ediyor, aslında "bilgisayarlar" kategorisi bundan çok daha geniş olduğunda.
Solomon Slow

2
@jameslarge Sihir özel kayıtlarda olmak zorunda değildir. BitBitJump, SBNZ, SUBLEQ ve SUBNEG'in kayıtlara hiç ihtiyacı yoktur, her biri tek bir komut ve aptal bellek.
8bittree

2
@ 8bittree, Hunh! Sanırım garip ama Turing tamamlanmış mimariler tasarlamanın rekabetçi bir spor olduğunu unuttum. Jörg'un cevabını okuduğumda, lisans günlerimde (1980-bir şey civarında) 74LS serisi yongalardan bir "bir talimat bilgisayarı" inşa etmeyi ve daha sonra bir DecSystem 10'u taklit etmek için programlamayı planlayan bir arkadaşımı hatırladım. ve artık tasarımının bugün "Taşımayla Tetiklenen Mimari" olarak adlandırılacağını biliyorum. Hiç takip edip etmediğini bilmiyorum.
Solomon Slow

2
@jameslarge: Intel MMU aynı zamanda Turing-complete'dur (özellikle tuzak mekanizması). Gerçekten çok garip, ancak tasarlanmanın tam tersi, saf bir kaza.
Jörg W Mittag

15

Bir kişinin bir turing makinesini uygulayabileceği birçok şey vardır.

İşlemcilere bakarken, en uygun olanı muhtemelen kayıt makinesi modelidir . Bunların en basiti (semboller açısından), çok bantlı iki simgedir ( markve blank). Ezoterik olmayan bir şey için giderseniz inc(r), dec(r)ve jz(r,z)(eğer kayıt rsıfır ise komut için atla z) veya clr(r)(temizle r) inc,, je(i,j,z)(eğer i ve j kaydı z komutuna eşitse atla).

Ben bir kayıt makinesi söz gördüm:

  • inc (i, m) - kayıt i'yi artırın ve m satırına gidin
  • jzdec (i, m1, m2) - eğer i kaydı 0 ise m satırına gidin, i değerini azaltın ve m2 satırına gidin

bu da tamamlandı - bir Minsky kayıt makinesi , banttaki veriler üzerinde başka kısıtlamalar olsa da (bireysel kayıtlar yerine devleti saklayan bir Gödel numarası olmalı)

Bu kadar. Başka bir şey yok.


Peki, neden bu ultra risc işlemciler kullanılmıyor? Onlar için bir derleyici yazmak için gerçek bir acı ve işlemcinin yapabileceği başka birçok şeyden vazgeçersiniz. Onun bitwise andve güzel bir addartan kayıtları ve döngü ile her şeyi yapmaya çalışıyorum , gerçekten güzel . Bu , 8 talimatı olan Brainfuck adlı favori bir programlama dilinin temelidir .

  • > veri işaretçisini artırmak
  • < veri işaretçisini azalt
  • + veri işaretçisinde verileri artırmak
  • - veri işaretçisindeki verileri azaltma
  • . veri işaretçisinde veri çıkışı
  • , veri girişinde veriyi saklamak, girişi okumak
  • [işaretçideki veriler sıfırsa, yönerge işaretçisini bir ileri taşımak yerine, eşleşen ]komuttan sonra komuta ileri atlayın
  • ]işaretçideki veriler sıfır değilse, yönerge işaretçisini ileri taşımak yerine, eşleşen ]komuttan sonra komuta geri atlayın

Bir derleyiciler bulabilirsiniz için onun gerçekten eğlenceli o bile basit şeyler yapmak olsa brainfuck. Dilin amacı olan hüsrandan hoşlanmadıkça.

İlgili okumalar:


5

Post makinesinin Turing-complete cihazının en basit şekliyle ilgili olduğundan şüpheleniyorum . Bir bit adresli bellek kaynağına, geçerli veri konumuna işaret eden bir adres kaydına ve beş talimata ihtiyacınız vardır:

  • Biti geçerli konuma ayarlayın;
  • Geçerli konumdaki biti sıfırlayın;
  • Bir sonraki adrese gitme (veri adres kaydını artırma);
  • Önceki adrese gitme (veri adres kaydını azaltma);
  • Geçerli veri konumundaki biti kontrol edin.

Donanım açısından daha basit bir şey icat etmenin kolay olduğunu düşünmüyorum, ancak daha da azaltılmış bir şey muhtemelen var.


5

Uygulamalar

Bu cevap, tek komut seti CPU'ların, derleyicilerin ve montajcıların ilginç uygulamalarına odaklanacaktır.

movfuscator

https://github.com/xoreaxeaxeax/movfuscator

C kodunu yalnızca movx86 komutlarını kullanarak derler ve tek bir komutun yeterli olduğunu gösterir.

Turing tamlığının bir makalede kanıtlanmış olduğu görülüyor: https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf

subleq

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

Ayrıca bakınız

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


3

Bir Turing tam işlemci oluşturmak için gereken minimum talimatlar dizisi nedir?

Jörg W Mittag "bir" dedi, ama sıfıra ne dersin?

Neden bir "işlemcinin" "talimatlara" sahip olması gerektiğini düşünüyorsunuz?

Turing makinesi Turing-tamamlanmış bir işlemcidir ve "talimatlar" üzerinde çalışmaz. Bu sahiptir kuralları , ama kurallar rastgele erişimli bellekten alınabilmeleri talimatlar değildir.

Alan Turing, isimsiz makinesini düşündüğünde, mümkün olan en basit "hesaplama" modelini araştırıyordu, böylece "Hesaplanabilir nedir?" Sorusunu yanıtlamak için matematiksel teknikler kullanabiliyordu.

Gerçek bir Turing makinesinden daha basit olan Turing eşdeğeri bir makine tasarlamak zor olabilir.

Düşündüğünüz işlemci türü --- bellekten talimatlar alan, bunları çözen ve yürüten ve aynı bellek sisteminde depolanan veriler üzerinde çalışan FWIW, Von Neumann Mimarisi olarak bilinir

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.