ชุดคำสั่งขั้นต่ำที่แน่นอนคืออะไรในการสร้างโปรเซสเซอร์ทัวริงที่สมบูรณ์


19

ฉันมีความคิดทั่วไปเกี่ยวกับวิธีการที่โปรเซสเซอร์จัดการกับคำแนะนำ แต่ใช้เวลาของฉันทำงานในภาษาระดับสูงเป็นส่วนใหญ่ บางทีคนที่ทำงานใกล้ชิดกับเหล็กมากขึ้นอาจให้ข้อมูลเชิงลึกที่มีค่าบางอย่าง

สมมติว่าภาษาการเขียนโปรแกรมนั้นเป็นนามธรรมระดับสูงมากของชุดคำสั่งของตัวประมวลผลชุดคำสั่งพื้นฐานที่สุดที่จำเป็นในการสร้างเครื่องที่สมบูรณ์แบบคืออะไร?

หมายเหตุ: ฉันไม่รู้อะไรเลยเกี่ยวกับความหลากหลายของสถาปัตยกรรมฮาร์ดแวร์ แต่เพื่อความเรียบง่าย - สมมติว่ามันเป็นโปรเซสเซอร์ทั่วไปที่มี ALU (ถ้าจำเป็น) และสแต็กคำสั่ง * * * *


วิทยาการคอมพิวเตอร์ SE อาจเป็นสถานที่ที่ดีกว่าในการถามคำถามที่คล้ายกันค่ะ (ไม่มีประเด็นที่จะชี้แนะคุณในเวลานี้) คำถามที่น่าสนใจ
Oskar Skog

เมื่อจำนวนคำสั่งของ ISA ลดลงดังนั้นความหมายของจำนวนคำสั่งจึงสมบูรณ์ ISAs ได้รับการ weirder เมื่อพวกเขามีคำแนะนำน้อยกว่า RISC ที่ "ดีที่สุด" ISA ที่มีคำสั่งเดียวเท่านั้นจะเป็นสิ่งที่แปลก // พวกเขายังได้รับความประหลาดใจเมื่อจำนวนที่เพิ่มขึ้นและ ISA กลายเป็น CISC // "แปลก" แน่นอนว่าเป็นอัตวิสัยมากกว่าหรือน้อยกว่า
Oskar Skog

คำตอบ:


35

ปรากฎว่าคุณต้องการเพียงหนึ่งคำสั่งในการสร้างเครื่องที่สามารถคำนวณทัวริงได้ ชั้นเรียนของเครื่องที่มีเพียงหนึ่งคำแนะนำและทัวริงสมบูรณ์ที่เรียกว่านี้หนึ่งในการเรียนการสอนคอมพิวเตอร์ชุดหรือยังค่อนข้างตลกที่ดีที่สุด RISC


4
+1 สำหรับการกดปุ่มคำตอบที่เป็นไปได้ที่ดีที่สุดเว้นแต่จะพบวิธีแก้ปัญหาการเรียนการสอนเป็นศูนย์ (อันที่จริงคอมพิวเตอร์คำสั่งบางครั้งเรียกว่าศูนย์การเรียนการสอนคอมพิวเตอร์เพราะไม่มีข้อมูลในการเรียนการสอนตัวเอง)
Cort Ammon - Reinstate Monica

4
ใช่ แต่การเรียนการสอนเพียงอย่างเดียวนั้นไม่ใช่สิ่งที่ทำให้เครื่องจักรทัวริงสมบูรณ์: เวทมนตร์นั้นอยู่ในการลงทะเบียนพิเศษที่แตกต่างกันทั้งหมดซึ่งคำสั่งนั้นสามารถจัดการได้ ฉันคิดว่าคำตอบของคุณชี้ให้เห็นว่า OP หมายถึง "คอมพิวเตอร์" กับ "สถาปัตยกรรม Von Neumann" จริง ๆ แล้วหมวด "คอมพิวเตอร์" นั้นกว้างกว่านั้นมาก
โซโลมอนช้า

2
@james large เวทมนต์ไม่จำเป็นต้องมีการลงทะเบียนเป็นพิเศษ BitBitJump, SBNZ, SUBLEQ และ SUBNEG ไม่จำเป็นต้องลงทะเบียนเลยเพียงแค่คำสั่งเดียวและหน่วยความจำที่เป็นใบ้
8bittree

2
@ 8bittree, Hunh! ฉันเดาว่าฉันลืมไปแล้วว่าการออกแบบสถาปัตยกรรมที่แปลก แต่เต็มไปด้วยทัวริงเป็นกีฬาที่มีการแข่งขัน เมื่อฉันอ่านคำตอบของJörgฉันจำได้ว่ามีเพื่อนคนหนึ่งอยู่ในระดับปริญญาตรี (ประมาณปี 1980- บางอย่าง) ที่วางแผนจะสร้าง "คอมพิวเตอร์คำสั่งหนึ่งเครื่อง" จากชิปซีรีส์ 74LS จากนั้นจึงตั้งโปรแกรมเพื่อจำลอง DecSystem 10 ที่หน้า Wikipedia และตอนนี้ฉันรู้ว่าการออกแบบของเขาจะถูกเรียกว่า "Transport Triggered Architecture" วันนี้ ฉันไม่รู้ว่าเขาจะตามมาหรือไม่
โซโลมอนช้า

2
@james large: Intel MMU นั้นยังเป็นทัวริงที่สมบูรณ์ด้วย (โดยเฉพาะกลไกกับดัก) มันแปลกมากจริง ๆ แต่มันตรงกันข้ามกับการออกแบบมันเป็นอุบัติเหตุที่บริสุทธิ์
Jörg W Mittag

15

มีหลายวิธีในการใช้บางสิ่งบางอย่างที่สามารถใช้เครื่องจักรทัวริง

ในขณะที่คุณกำลังมองหาที่ประมวลผลหนึ่งที่มีผลบังคับใช้มากที่สุดน่าจะเป็นรูปแบบเครื่องลงทะเบียน ที่ง่ายที่สุดของเหล่านี้ (ในแง่ของสัญลักษณ์) เป็น mulit เทปสองสัญลักษณ์ ( markและblank) หากคุณไปสำหรับบางสิ่งบางอย่างไม่ได้ค่อนข้างเป็นความลับที่inc(r), dec(r)และjz(r,z)(กระโดดลงทะเบียนถ้าrเป็นศูนย์การเรียนการสอนz) หรือclr(r)(ชัดเจนr) inc, je(i,j,z)(กระโดดลงทะเบียนถ้า i และ j จะเท่ากับการเรียนการสอน z)

ฉันเคยเห็นพูดถึงเครื่องลงทะเบียนที่:

  • inc (i, m) - เพิ่มการลงทะเบียน i และไปที่บรรทัด m
  • jzdec (i, m1, m2) - ถ้าลงทะเบียน i คือ 0 ไปที่ line m, ลดลง i อื่น, และไปที่ line m2

ซึ่งกำลังทำให้สมบูรณ์เช่นกัน - เครื่องลงทะเบียน Minskyแม้ว่ามันจะมีข้อ จำกัด อื่น ๆ เกี่ยวกับข้อมูลในเทป

แค่นั้นแหละ. ไม่มีอะไรเพิ่มเติม


เหตุใดจึงไม่ใช้โปรเซสเซอร์ risc แบบพิเศษเหล่านี้แทน มันเป็นความเจ็บปวดที่แท้จริงในการเขียนคอมไพเลอร์ให้พวกเขาและคุณก็ยอมแพ้สิ่งต่าง ๆ มากมายที่โปรเซสเซอร์สามารถทำได้ มันดีมากที่ได้ bitwise andและaddแทนที่จะพยายามทำทุกอย่างด้วยการลงทะเบียนที่เพิ่มขึ้นและวนซ้ำ นั่นคือพื้นฐานของภาษาการเขียนโปรแกรมโปรดที่ชื่อว่าBrainfuckซึ่งมี 8 คำแนะนำ

  • > เพิ่มตัวชี้ข้อมูล
  • < ลดตัวชี้ข้อมูล
  • + เพิ่มข้อมูลที่ตัวชี้ข้อมูล
  • - ลดค่าข้อมูลที่ตัวชี้ข้อมูล
  • . ส่งออกข้อมูลที่ตัวชี้ข้อมูล
  • , อ่านอินพุตเก็บข้อมูลที่ตัวชี้ข้อมูล
  • [หากข้อมูลที่ชี้เป็นศูนย์แทนการย้ายตัวชี้คำสั่งข้างหน้าหนึ่งกระโดดไปข้างหน้ากับคำสั่งหลังจากการจับคู่]คำสั่ง
  • ]หากข้อมูลที่ชี้เป็นเลขแทนการย้ายตัวชี้การเรียนการสอนไปข้างหน้าข้ามมันกลับไปที่คำสั่งหลังจากการจับคู่]คำสั่ง

หนึ่งสามารถค้นหาคอมไพเลอร์เพื่อ Brainfuck แม้ว่ามันจะไม่สนุกที่จะทำสิ่งที่เรียบง่ายในนั้น นอกเสียจากว่าคุณจะเพลิดเพลินกับความหงุดหงิดซึ่งเป็นจุดประสงค์ของภาษา

การอ่านที่เกี่ยวข้อง:


5

ฉันสงสัยว่าเครื่องโพสต์เป็นรูปแบบที่ง่ายที่สุดของอุปกรณ์ทัวริงที่สมบูรณ์ คุณต้องมีหน่วยความจำบิตที่กำหนดแอดเดรสได้การลงทะเบียนที่อยู่ซึ่งชี้ไปยังตำแหน่งข้อมูลปัจจุบันและคำแนะนำห้าข้อ:

  • ตั้งค่าบิตที่ตำแหน่งปัจจุบัน
  • รีเซ็ตบิตที่ตำแหน่งปัจจุบัน
  • ย้ายไปยังที่อยู่ถัดไป (เพิ่มข้อมูลการลงทะเบียนที่อยู่);
  • ย้ายไปยังที่อยู่ก่อนหน้า (ลงทะเบียนข้อมูลที่อยู่ลดลง);
  • ตรวจสอบบิตที่ตำแหน่งข้อมูลปัจจุบัน

ฉันไม่คิดว่ามันง่ายที่จะประดิษฐ์สิ่งที่ง่ายกว่าสำหรับฮาร์ดแวร์ แต่มีบางสิ่งที่ลดลงไปกว่าเดิม


5

การใช้งาน

คำตอบนี้จะมุ่งเน้นไปที่การใช้งานที่น่าสนใจของชุดคำสั่งเดียวคอมไพเลอร์และแอสเซมเบลอร์

movfuscator

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

ชุดคำสั่งขั้นต่ำสุดที่จำเป็นในการสร้างโปรเซสเซอร์ทัวริงสมบูรณ์คืออะไร

Jörg W Mittag พูดว่า "หนึ่ง" แต่มีค่าประมาณศูนย์?

ทำไมคุณถึงคิดว่า "โปรเซสเซอร์" ต้องมี "คำแนะนำ"?

เครื่องทัวริงเป็นโปรเซสเซอร์ที่สมบูรณ์แบบของทัวริงและไม่สามารถใช้งานได้กับ "คำแนะนำ" เช่นนี้ มันมีกฎแต่กฎไม่ใช่คำสั่งที่ดึงมาจากหน่วยความจำเข้าถึงโดยสุ่ม

เมื่ออลันทัวริงคิดเครื่องจักรของเขาเขากำลังค้นหารูปแบบที่ง่ายที่สุดของ "การคำนวณ" เพื่อที่เขาจะได้ใช้เทคนิคทางคณิตศาสตร์เพื่อตอบคำถามที่ว่า "การคำนวณคืออะไร"

คุณต้องกดอย่างหนักเพื่อออกแบบเครื่องจักรที่เทียบเท่าทัวริงซึ่งง่ายกว่าเครื่องทัวริงจริง

FWIW ประเภทของหน่วยประมวลผลที่คุณกำลังคิด --- หนึ่งที่ดึงคำแนะนำจากหน่วยความจำถอดรหัสพวกเขาและดำเนินการพวกเขาและที่ทำงานกับข้อมูลที่เก็บไว้ในระบบหน่วยความจำเดียวกัน --- เป็นที่รู้จักกันเป็นสถาปัตยกรรม Von Neumann

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.