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 
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 | Medium| Mirror | HackMD | HackerNoon


