Bộ hướng dẫn tối thiểu tuyệt đối cần có để xây dựng bộ xử lý hoàn chỉnh Turing là gì


19

Tôi có một ý tưởng chung về cách bộ xử lý xử lý các hướng dẫn nhưng dành thời gian của tôi để làm việc trong hầu hết các ngôn ngữ cấp cao. Có lẽ ai đó làm việc gần với bàn ủi hơn có thể cung cấp một số hiểu biết có giá trị.

Giả sử rằng các ngôn ngữ lập trình về cơ bản là mức độ trừu tượng rất cao của tập lệnh của bộ xử lý, bộ hướng dẫn cơ bản nhất cần thiết để tạo ra một máy hoàn chỉnh là gì?

Lưu ý: Tôi không biết gì về tính đa dạng của kiến ​​trúc phần cứng nhưng - vì mục đích đơn giản - giả sử đó là bộ xử lý điển hình với ALU (nếu cần) và ngăn xếp lệnh. *


Khoa học máy tính SE có thể là một nơi tốt hơn để đặt câu hỏi tương tự. (Không có điểm nào hướng dẫn bạn đến đó vào lúc này.) Câu hỏi thú vị mặc dù.
Oskar Skog

Khi số lượng lệnh được giảm xuống, thì độ chính xác của SỐ lệnh cũng vậy. ISAs trở nên lạ hơn khi chúng có ít hướng dẫn hơn RISC "tối ưu". Một ISA chỉ có một hướng dẫn sẽ trở nên kỳ lạ. // Họ cũng nhận được weirder khi số lượng tăng lên và ISA trở thành CISC. // "lạ" tất nhiên là ít nhiều chủ quan.
Oskar Skog

Câu trả lời:


35

Hóa ra bạn chỉ cần một hướng dẫn để xây dựng một cỗ máy có khả năng tính toán Turing. Lớp máy này chỉ có một hướng dẫn và hoàn thành Turing được gọi là Máy tính tập lệnh một hoặc cũng có thể đùa cợt Ultimate RISC .


4
+1 để đạt được câu trả lời tốt nhất có thể, trừ khi tìm thấy giải pháp hướng dẫn bằng 0 (thực tế, một máy tính lệnh đôi khi được gọi là máy tính lệnh không, vì không có thông tin nào được tìm thấy trong chính hướng dẫn)
Cort Ammon - Tái lập lại

4
Đúng, nhưng một hướng dẫn đó không phải là thứ khiến máy Turing hoàn thành: Phép thuật nằm trong tất cả các thanh ghi chuyên dụng khác nhau mà hướng dẫn có thể giải quyết. Tôi nghĩ rằng câu trả lời của bạn chỉ ra rằng OP tương đương "máy tính" với "kiến trúc Von Neumann", khi thực sự, danh mục "máy tính" rộng hơn thế nhiều.
Solomon chậm

2
@jameslarge Phép thuật không nhất thiết phải có trong sổ đăng ký chuyên ngành. BitBitJump, SBNZ, SUBLEQ và SUBNEG hoàn toàn không cần đăng ký, chỉ cần một hướng dẫn duy nhất và bộ nhớ câm.
8bittree

2
@ 8bittree, Hunh! Tôi đoán rằng tôi đã quên rằng thiết kế kiến ​​trúc kỳ lạ nhưng hoàn hảo là một môn thể thao cạnh tranh. Khi tôi đọc câu trả lời của Jorg, tôi nhớ lại một người bạn từ hồi tôi còn học (khoảng năm 1980), người đã lên kế hoạch xây dựng một "máy tính chỉ dẫn" từ các chip dòng 74LS, và sau đó lập trình nó để mô phỏng DecSystem 10. Tôi chỉ nhìn tại trang Wikipedia và bây giờ tôi biết rằng thiết kế của anh ấy sẽ được gọi là "Kiến trúc kích hoạt giao thông" ngày hôm nay. Tôi không biết liệu anh ta có đi theo không.
Solomon chậm

2
@jameslarge: Intel MMU cũng hoàn chỉnh Turing (đặc biệt là cơ chế bẫy). Nó thực sự rất kỳ lạ, tuy nhiên, nó trái ngược với thiết kế, nó là một tai nạn thuần túy.
Jörg W Mittag

15

Có nhiều cách để thực hiện một cái gì đó mà người ta có thể thực hiện một máy turing.

Như bạn đang xem bộ xử lý, cái được áp dụng nhiều nhất có lẽ là kiểu máy đăng ký . Đơn giản nhất trong số này (về các ký hiệu) là biểu tượng hai mulit-băng ( markblank). Nếu bạn đi cho một cái gì đó không phải là khá bí truyền, các inc(r), dec(r)jz(r,z)(nhảy nếu đăng ký rlà không để hướng dẫn z) hoặc clr(r)(rõ ràng r), inc, je(i,j,z)(nhảy nếu đăng ký i và j đều bình đẳng để hướng dẫn z).

Tôi đã thấy đề cập đến một máy đăng ký đó là:

  • inc (i, m) - đăng ký gia tăng i và đi đến dòng m
  • jzdec (i, m1, m2) - nếu đăng ký i bằng 0 đi đến dòng m, khác giảm i và đi đến dòng m2

cũng đã hoàn tất - một máy đăng ký Minsky mặc dù nó có các ràng buộc khác đối với dữ liệu trong băng (nó phải là một số Gôdel lưu trữ trạng thái chứ không phải các thanh ghi riêng lẻ)

Đó là nó. Chỉ có bấy nhiêu thôi.


Vì vậy, tại sao các bộ xử lý siêu risc không được sử dụng thay thế? Thật là một nỗi đau thực sự khi viết một trình biên dịch cho họ và bạn từ bỏ rất nhiều thứ khác mà bộ xử lý có thể làm. Nó thực sự tốt đẹp để có một chút and, và addthay vì cố gắng làm mọi thứ với các thanh ghi tăng và vòng lặp. Đó là cơ sở của một ngôn ngữ lập trình yêu thích có tên Brainfuck có 8 hướng dẫn.

  • > tăng con trỏ dữ liệu
  • < giảm con trỏ dữ liệu
  • + tăng dữ liệu tại con trỏ dữ liệu
  • - giảm dữ liệu tại con trỏ dữ liệu
  • . xuất dữ liệu tại con trỏ dữ liệu
  • , đọc đầu vào, lưu trữ dữ liệu tại con trỏ dữ liệu
  • [nếu dữ liệu tại con trỏ bằng 0, thay vì di chuyển con trỏ lệnh về phía trước, hãy chuyển nó tới lệnh sau ]lệnh khớp
  • ]nếu dữ liệu tại con trỏ là khác 0, thay vì di chuyển con trỏ lệnh về phía trước, hãy nhảy nó trở lại lệnh sau ]lệnh khớp

Người ta có thể tìm thấy trình biên dịch cho Brainfuck, mặc dù thực sự không thú vị khi làm những điều đơn giản trong đó. Trừ khi bạn thích sự thất vọng, đó là mục đích của ngôn ngữ.

Đọc liên quan:


5

Tôi nghi ngờ rằng máy Post là hình thức đơn giản nhất của thiết bị hoàn chỉnh Turing. Bạn cần cung cấp bộ nhớ có thể định địa chỉ bit, một thanh ghi địa chỉ trỏ đến vị trí dữ liệu hiện tại và năm hướng dẫn:

  • Đặt bit tại vị trí hiện tại;
  • Đặt lại bit tại vị trí hiện tại;
  • Di chuyển đến địa chỉ tiếp theo (đăng ký địa chỉ dữ liệu gia tăng);
  • Di chuyển đến địa chỉ trước đó (thanh ghi địa chỉ dữ liệu giảm);
  • Kiểm tra bit tại vị trí dữ liệu hiện tại.

Tôi không nghĩ rằng thật dễ dàng để phát minh ra thứ gì đó đơn giản hơn nhiều về phần cứng, mặc dù thứ gì đó thậm chí còn giảm hơn có thể tồn tại.


5

Triển khai

Câu trả lời này sẽ tập trung vào việc triển khai thú vị các CPU, trình biên dịch và trình biên dịch tập hợp đơn.

máy di động

https://github.com/xoreaxeaxeax/movfuscator

Biên dịch mã C chỉ sử dụng mov lệnh x86, hiển thị một cách rất cụ thể mà một lệnh duy nhất đủ.

Tính đầy đủ của Turing dường như đã được chứng minh trong một bài báo: https://www.cl.cam.ac.uk/~sd601/ con / mov.pdf

tiểu thư

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

Xem thêm

/programming/3711443/minimal-inocate-set-to-solve-any-probols-with-a-computer-program/38523869#38523869


3

Bộ hướng dẫn tối thiểu tuyệt đối cần có để xây dựng bộ xử lý hoàn chỉnh Turing là gì?

Jörg W Mittag nói, "một", nhưng bằng không thì sao?

Tại sao bạn cho rằng một "bộ xử lý" phải có "hướng dẫn"?

Máy Turing là bộ xử lý hoàn chỉnh Turing và nó không hoạt động theo "hướng dẫn" như vậy. Nó có các quy tắc , nhưng các quy tắc không phải là hướng dẫn được tìm nạp từ bộ nhớ truy cập ngẫu nhiên.

Khi Alan Turing nghĩ ra cỗ máy cùng tên của mình, anh ta đang tìm kiếm mô hình "tính toán" đơn giản nhất có thể để có thể sử dụng các kỹ thuật toán học để trả lời câu hỏi "Cái gì là tính toán được?"

Bạn khó có thể thiết kế một máy tương đương Turing đơn giản hơn máy Turing thực tế.

FWIW, loại bộ xử lý mà bạn đang nghĩ đến --- một loại tìm nạp các hướng dẫn từ bộ nhớ, giải mã chúng và thực thi chúng, và hoạt động trên dữ liệu được lưu trữ trong cùng hệ thống bộ nhớ --- được gọi là Kiến trúc Von Neumann

https://en.wikipedia.org/wiki/Von_Neumann_arch architecture

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.