Cảnh báo rủi ro: Đề phòng huy động vốn bất hợp pháp dưới danh nghĩa 'tiền điện tử' và 'blockchain'. — Năm cơ quan bao gồm Ủy ban Giám sát Ngân hàng và Bảo hiểm
Tìm kiếm
Đăng nhập
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
Xem thị trường
Giải thích chi tiết lệnh Cairo
Sin7y
特邀专栏作者
2022-09-28 02:44
Bài viết này có khoảng 2540 từ, đọc toàn bộ bài viết mất khoảng 4 phút
Bài viết này diễn giải các hướng dẫn Cairo một cách chi tiết từ nhiều khía cạnh, liên quan đến chuyển đổi trạng thái, logic chuyển đổi, xác minh hướng dẫn, ví dụ về hướng dẫn, v.v.

tiêu đề cấp đầu tiên

1. Cấu trúc lệnh"12345678") thì lệnh chiếm 2 từ và giá trị được lưu trong từ thứ hai. Từ đầu tiên của mỗi chỉ thị bao gồm các thành phần sau:

tiêu đề cấp đầu tiên

2. Chuyển trạng thái

Hàm chuyển đổi trạng thái đại diện cho một đơn vị chuyển đổi trạng thái chung (vì nó chứa logic xử lý của tất cả các loại lệnh) và một phép tính thường được phân tách thành nhiều lệnh được thực hiện tuần tự, vì vậy chúng ta cần:

b.Đảm bảo lệnh được thực hiện là lệnh hợp lệ

tiêu đề phụ

Nếu trạng thái trước và sau khi thực hiện lệnh là nhất quán, thì việc cập nhật trạng thái của nó phải được thực hiện theo logic sau:

tiêu đề phụ

Như thể hiện trong Hình 1, một lệnh bao gồm các thành phần sau:

3. Ví dụ lệnh

tiêu đề phụ

3.1 Khẳng định bình đẳng

< left_handle_op > = < right_handle_op >

Lệnh khẳng định đẳng thức có thể được biểu diễn bằng cú pháp sau:

Note2:Nó đảm bảo rằng cả hai vế của công thức đều bằng nhau, nếu không thì việc thực thi chương trình sẽ bị trả về.

Phép chia và phép trừ có thể được biểu diễn tương ứng dưới dạng phép nhân và phép cộng với các thứ tự toán hạng khác nhau.

Hình 4 đưa ra một số ví dụ về các lệnh khẳng định đẳng thức và các giá trị cờ tương ứng cho mỗi lệnh:

giải thíchgiải thích

lệnh[fp+1] = 5:

◦ next_ap = ap => ap_update = 00 = 0 

◦ next_pc = pc + instruction_size => pc_update = 000 = 0 

◦ để khẳng định lệnh => opcode = 4

◦ op0 và op1 không có add hoặc mul => res_logic(res) = 00 = 0

◦ Xuất hiện dữ liệu ngay lập tức => op1_src(op1) = 001 = 1

◦ Địa chỉ lệnh địa chỉ ngay lập tức liền kề => off_op1 = 1

◦ Vế trái của phương trình [fp + 1] => dst_reg(dst) = 1

◦ op0_reg/ off_op0 =>giá trị ban đầu (1/-1) // Vì hướng dẫn này không sử dụng các cờ này, hãy điền vào giá trị mặc định

tiêu đề phụ

3.2 Nhảy có điều kiện và không điều kiện

Lệnh jmp cho phép thay đổi giá trị của bộ đếm chương trình pc.

Cairo hỗ trợ các bước nhảy tương đối (các toán hạng biểu thị độ lệch so với máy tính hiện tại) và các bước nhảy tuyệt đối - được biểu thị bằng các từ khóa rel và abs tương ứng; lệnh jmp có thể có điều kiện, chẳng hạn như khi giá trị của một đơn vị bộ nhớ không phải là 0 , hãy kích hoạt lệnh jmp.

# Unconditional jumps. 

jmp abs

jmp rel 

# Conditional jumps. 

jmp rel if

Hình 5 đưa ra một số ví dụ về các lệnh jmp và các giá trị cờ tương ứng cho mỗi lệnh:

giải thíchgiải thích

Lệnh jmp rel [ap +1] + [fp - 7]:

◦ next_ap = ap => ap_update = b00 = 0 

◦ next_pc = pc + res=> pc_update = b010 = 2 

◦ res = op0 + op1 => res_logic(res) = b01 = 1

◦ op1: [fp - 7] => op1_src(op1) = b010 = 2 

◦ op1: [fp - 7] => off_op1 = -7 

◦ op0: [ap + 1] => op0_src(op0) = 0 

◦ op0: [ap + 1] => off_op0 = 1 

◦ dst_reg/ off_dst =>giá trị ban đầu (1/-1) ///Bởi vì hướng dẫn này không sử dụng các cờ này, hãy điền vào giá trị mặc định

tiêu đề phụ

3.3 gọi và quay lại

Lệnh call và ret cho phép thực hiện ngăn xếp chức năng. Lệnh gọi cập nhật các thanh ghi bộ đếm chương trình (pc) và con trỏ khung (fp). Việc cập nhật bộ đếm chương trình tương tự như lệnh jmp. Giá trị trước đó của fp được ghi vào [ap] để cho phép lệnh ret đặt lại giá trị của fp về giá trị trước cuộc gọi; tương tự, máy tính được trả về (địa chỉ của lệnh sau lệnh gọi) được ghi vào [ ap+1], để cho phép lệnh ret quay lại và tiếp tục thực thi mã theo lệnh gọi. Vì hai vị trí bộ nhớ đã được ghi, ap được nâng cao thêm 2 và fp được đặt thành ap mới.

call ret

call rel  

ret

Hình 6 đưa ra một số ví dụ về các lệnh call và ret, và các giá trị cờ tương ứng cho mỗi lệnh:

giải thíchgiải thích

Lệnh gọi abs [fp + 4]:

◦ next_ap = ap => ap_update = b00 = 0 

◦ next_pc = res => pc_update = b001 = 1 

◦ res = op1 => res_logic(res) = b00 = 0 

◦ op1: [fp + 4] => op1_src(op1) = b010 = 2 

◦ op1: [fp + 4] => off_op1 = 4 

◦ op0_reg/ off_op0 =>◦ Đối với lệnh gọi => opcode = 0

◦ dst_reg/ off_dst =>giá trị ban đầu (0/0) ///Vì hướng dẫn này không sử dụng các cờ này, hãy điền vào giá trị mặc định

tiêu đề phụ

3.4 AP nâng cao< op >Lệnh ap + =

Hình 7 đưa ra một số minh họa về các lệnh ap cấp cao và các cờ tương ứng với từng lệnh:

giải thíchgiải thích

Hướng dẫn ap += 123:

◦ next_ap = ap + res => ap_update = b01 = 1

◦ next_pc = pc + instruction_size => pc_update = b000 = 0 

◦ res = op1 => res_logic(res) = b00 = 0 

◦ op1 = 123 => op1_src(op1) = b001 = 1 

◦ op1 = 123 => off_op1 = 1 

◦ op0_reg/ off_op0 =>◦ Để tăng lệnh ap => opcode = 0

◦ dst_reg/ off_dst =>Sin7y được thành lập vào năm 2021 và bao gồm các nhà phát triển chuỗi khối hàng đầu. Chúng tôi vừa là vườn ươm dự án vừa là nhóm nghiên cứu công nghệ chuỗi khối, khám phá các công nghệ tiên tiến và quan trọng nhất như EVM, Layer2, chuỗi chéo, điện toán bảo mật và các giải pháp thanh toán tự động.

về chúng tôi

Sin7y được thành lập vào năm 2021 và bao gồm các nhà phát triển chuỗi khối hàng đầu. Chúng tôi vừa là vườn ươm dự án vừa là nhóm nghiên cứu công nghệ chuỗi khối, khám phá các công nghệ tiên tiến và quan trọng nhất như EVM, Layer2, chuỗi chéo, điện toán bảo mật và các giải pháp thanh toán tự động.

Tài khoản công khai WeChat: Sin7Y

GitHub | Twitter | Telegram | MediumMirror | HackMD | HackerNoon

nhà phát triển
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Tài khoản chính thức
https://twitter.com/OdailyChina
Tóm tắt AI
Trở về đầu trang
Bài viết này diễn giải các hướng dẫn Cairo một cách chi tiết từ nhiều khía cạnh, liên quan đến chuyển đổi trạng thái, logic chuyển đổi, xác minh hướng dẫn, ví dụ về hướng dẫn, v.v.
Thư viện tác giả
Sin7y
Tải ứng dụng Odaily Nhật Báo Hành Tinh
Hãy để một số người hiểu Web3.0 trước
IOS
Android