Icon Collap
Home » Malbolge là gì, nguyên tắc hoạt động ra sao

Malbolge là gì, nguyên tắc hoạt động ra sao

16/06/2021 Admin Tin tức Công Nghệ

Malbolge là gì

Malbolge là gì

Malbolge là gì

Malbolge ( được đặt tên theo vòng tròn tám mươi của địa ngục trong Dante’s Inferno, nơi những kẻ gian lận bị trừng phạt), đây là một ngôn ngữ lập trình bí truyền.

Nó được phát minh bởi Ben Olmstead vào năm 1998. Mục đích là tạo ra một ngôn ngữ giúp viết các chương trình khó nhất có thể. Tác giả đã thành công: mất hai năm để tạo ra một “ Hello, World” và nó không được viết bằng tay mà được tạo ra vởi một chương trình Lisp thực hiện thuật toán tìm kiếm chùm tia.

Người quan trọng thứ hai trong lịch sử của ngôn ngữ là Lou Scheffer, người đã lưu thông dịch viên và thông số kỹ thuật gốc sau khi trang web ban đầu ngừng hoạt động, thực hiện một nghiên cứu về phân tích mật mã của ngôn ngữ, tạo ra một chương trình sao chép đầu vào của nó vào đầu ra của nó và cung cấp một chiến lược chung của việc viết chương trình trong Malbolge cũng như một số suy nghĩ về tính hoàn chỉnh của Turing.

Malbolge hoạt động như thế nào

Malbolge hoạt động như thế nào

Malbolge hoạt động như thế nào

Máy ảo Malbolge hoạt động trong hệ thống bậc thứ ba. Từ máy dài 10 trits ( chữ số bậc ba), vì vậy nó có thể lưu trữ các các số nguyên không dấu từ 0 đến 59048. Cả hướng dẫn chương trình và dữ liệu đều được lưu trữ trong cùng một phân đoạn bộ nhớ một chiều, bao gồm 59049 ô nhớ. Bênh cạnh đó, máy có ba thanh ghi từ: A(bộ tích lũy, dùng để thao tác dữ liệu), C(con trỏ mã) và D(con trỏ dữ liệu). Bạn đầu tất cả các thanh ghi giữ giá trị 0.

Trước khi bắt đầu thông dịch chương trình, trình thông dịch tải nó vào bộ nhớ, một ô cho mỗi lệnh. Nếu chương trình có một ký tự không thể diễn giải như một lệnh  hoặc một khoảng trắng, nó sẽ bị từ chối toàn bộ. Các ô nhớ chưa được khởi tạo chứa đầy các kết quả của việc thực hiện crazy thao tác trên hai ô trước đó( đã được lấp đầy).

Việc diễn giải duy nhất trông như thế này. Mã ASCII của lệnh hiện tại có thể được ký hiệu là [c] ( giá trị được lưu trữ trong ô được thanh ghi C trỏ tới). Nếu [c] không nằm trong khoảng từ 33 đến 126, thì lệnh này không hợp lệ. Nếu không trình thông dịch tính toán (c + [c]) mod 94và sử dụng như một chỉ mục trong bảng giải mã. Nếu nó không giải mã thành một trong 8 lệnh sau, lệnh này không hợp lệ.

  • j D = [D] Đặt con trỏ dữ liệu thành giá trị trong ô được trỏ tới bằng giá trị hiện tại của nó.
  • i C = [C] Đặt con trỏ lệnh thành giá trị trong ô được trỏ tới bằng giá trị hiện tại của nó.
  • * [D] = ROTATE([D]) Xoay giá trị trong ô được D trỏ tới một lần sang phải. Như một hiệu ứng phụ, giá trị này được lưu trữ trong A.
  • p [D] = CRAZY(A, [D]) Áp dụng crazy phép toán cho giá trị của A và ô được D trỏ tới.
  • / A = INPUT Đọc một ký tự từ luồng đầu vào và lưu trữ ASCII của nó thành A.
  • < PRINT AIn một ký tự có giá trị ASCII là A mod 256.
  • v STOP Dừng thực thi chương trình.
  • o NOP Chương trình hợp lệ duy nhất không phải làm gì.

crazy hoạt động thực hiện phép tính ba lần trên các đối số bằng cách sử dụng quy tắc sau:

              | A trit:  

     ____|_0_1_2_  

           0 | 1  0  0  

 *D     1 | 1  0  2  

trit      2 | 2  2  1

 

Chia sẻ:
Bình luận

ĐĂNG KÝ TƯ VẤN

Lorem Ipsum chỉ đơn giản là một đoạn văn bản giả, được dùng vào việc trình bày và dàn trang phục vụ cho in ấn.

0973703357
0973703357