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 ( mark
và blank
). 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)
và jz(r,z)
(nhảy nếu đăng ký r
là 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à add
thay 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: