ชื่อระดับแรก
1. โครงสร้างการสอน"12345678") จากนั้นคำสั่งจะใช้ 2 คำ และค่าจะถูกเก็บไว้ในคำที่สอง คำแรกของแต่ละคำสั่งประกอบด้วยองค์ประกอบต่อไปนี้:
ชื่อระดับแรก
2. การเปลี่ยนสถานะ
ฟังก์ชันการเปลี่ยนสถานะแสดงถึงหน่วยการเปลี่ยนสถานะทั่วไป (เนื่องจากมีตรรกะการประมวลผลของคำสั่งทุกประเภท) และโดยปกติแล้วการคำนวณจะถูกแยกย่อยเป็นชุดคำสั่งที่ดำเนินการตามลำดับหลายชุด ดังนั้นเราจึงต้องการ:
ข. ตรวจสอบให้แน่ใจว่าคำสั่งที่ดำเนินการนั้นเป็นคำสั่งที่ถูกต้อง
ชื่อเรื่องรอง
หากสถานะก่อนและหลังการดำเนินการคำสั่งสอดคล้องกัน ดังนั้นการอัพเดตสถานะจะต้องดำเนินการตามตรรกะต่อไปนี้:
ชื่อเรื่องรอง
ดังแสดงในรูปที่ 1 คำสั่งประกอบด้วยองค์ประกอบต่อไปนี้:
3. ตัวอย่างคำสั่ง
ชื่อเรื่องรอง
3.1 การยืนยันความเท่าเทียมกัน
< left_handle_op > = < right_handle_op >
คำสั่งยืนยันความเท่าเทียมกันสามารถแสดงด้วยไวยากรณ์ต่อไปนี้:
Note2:เพื่อให้แน่ใจว่าทั้งสองด้านของสูตรมีค่าเท่ากัน มิฉะนั้น การดำเนินการโปรแกรมจะถูกส่งกลับ
การหารและการลบสามารถแสดงเป็นการคูณและการบวกตามลำดับด้วยคำสั่งตัวดำเนินการที่แตกต่างกัน
รูปที่ 4 แสดงตัวอย่างบางส่วนของคำสั่งยืนยันความเท่าเทียมกัน และค่าสถานะที่สอดคล้องกันสำหรับแต่ละคำสั่ง:
อธิบายอธิบาย
คำสั่ง[fp+1] = 5:
◦ next_ap = ap => ap_update = 00 = 0
◦ next_pc = pc + instruction_size => pc_update = 000 = 0
◦ สำหรับคำสั่ง assert => opcode = 4
◦ op0 และ op1 ไม่มีบวกหรือ mul => res_logic(res) = 00 = 0
◦ ข้อมูลปัจจุบัน => op1_src(op1) = 001 = 1
◦ คำแนะนำที่อยู่ทันที ที่อยู่ติดกัน => off_op1 = 1
◦ ด้านซ้ายของสมการ [fp + 1] => dst_reg(dst) = 1
◦ op0_reg/ off_op0 =>inital value(1/-1) // เนื่องจากคำสั่งนี้ไม่ได้ใช้แฟล็กเหล่านี้ ให้กรอกค่าเริ่มต้น
ชื่อเรื่องรอง
3.2 การกระโดดแบบมีเงื่อนไขและไม่มีเงื่อนไข
คำสั่ง jmp อนุญาตให้เปลี่ยนค่าของโปรแกรมเคาน์เตอร์พีซี
ไคโรสนับสนุนการกระโดดแบบสัมพัทธ์ (ตัวถูกดำเนินการแทนการชดเชยเมื่อเทียบกับพีซีปัจจุบัน) และการกระโดดแบบสัมบูรณ์ - แทนด้วยคีย์เวิร์ด rel และ abs ตามลำดับ คำสั่ง jmp อาจมีเงื่อนไข เช่น เมื่อค่าของหน่วยหน่วยความจำไม่ใช่ 0 ทริกเกอร์ คำแนะนำ jmp
# Unconditional jumps.
jmp abs
jmp rel
# Conditional jumps.
jmp rel
รูปที่ 5 แสดงตัวอย่างคำสั่ง jmp และค่าแฟล็กที่เกี่ยวข้องสำหรับแต่ละคำสั่ง:
อธิบายอธิบาย
คำสั่ง 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 =>ค่าเริ่มต้น (1/-1) ///เนื่องจากคำสั่งนี้ไม่ได้ใช้แฟล็กเหล่านี้ ให้กรอกค่าเริ่มต้น
ชื่อเรื่องรอง
3.3 โทรและส่งคืน
คำแนะนำการโทรและ ret อนุญาตให้ใช้ฟังก์ชันสแต็ก คำสั่งการโทรจะอัพเดตรีจิสเตอร์ตัวนับโปรแกรม (pc) และเฟรมพอยน์เตอร์ (fp) การอัพเดตตัวนับโปรแกรมจะคล้ายกับคำสั่ง jmp ค่า fp ก่อนหน้าถูกเขียนไปที่ [ap] เพื่อให้คำสั่ง ret รีเซ็ตค่าของ fp เป็นค่าเดิมก่อนการโทร ในทำนองเดียวกัน pc ที่ส่งคืน (ที่อยู่ของคำสั่งตามคำสั่งการโทร) จะถูกเขียนไปที่ [ ap+1] เพื่อให้คำสั่ง ret ย้อนกลับและดำเนินการโค้ดต่อไปตามคำสั่งเรียก เนื่องจากมีการเขียนตำแหน่งหน่วยความจำสองตำแหน่ง ap จึงเพิ่มขึ้น 2 และ fp ถูกตั้งค่าเป็น ap ใหม่
call ret
call rel
ret
รูปที่ 6 แสดงตัวอย่างคำสั่งการโทรและคำสั่ง ret และค่าแฟล็กที่สอดคล้องกันสำหรับแต่ละคำสั่ง:
อธิบายอธิบาย
คำสั่งเรียก 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 =>◦ สำหรับคำสั่งการโทร => opcode = 0
◦ dst_reg/ off_dst =>ค่าเริ่มต้น (0/0) ///เนื่องจากคำสั่งนี้ไม่ได้ใช้แฟล็กเหล่านี้ ให้กรอกค่าเริ่มต้น
ชื่อเรื่องรอง
3.4 AP ขั้นสูง< op >คำสั่ง ap + =
รูปที่ 7 แสดงภาพประกอบบางส่วนของคำสั่ง ap ระดับสูง และแฟล็กที่สอดคล้องกับแต่ละคำสั่ง:
อธิบายอธิบาย
คำสั่ง 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 =>◦ สำหรับการเลื่อนคำสั่ง ap => opcode = 0
◦ dst_reg/ off_dst =>Sin7y ก่อตั้งขึ้นในปี 2564 และประกอบด้วยนักพัฒนาบล็อกเชนชั้นนำ เราเป็นทั้งผู้บ่มเพาะโครงการและทีมวิจัยเทคโนโลยีบล็อกเชน สำรวจเทคโนโลยีที่สำคัญและล้ำสมัยที่สุด เช่น EVM, Layer2, cross-chain, การประมวลผลเพื่อความเป็นส่วนตัว และโซลูชันการชำระเงินอัตโนมัติ
เกี่ยวกับเรา
Sin7y ก่อตั้งขึ้นในปี 2564 และประกอบด้วยนักพัฒนาบล็อกเชนชั้นนำ เราเป็นทั้งผู้บ่มเพาะโครงการและทีมวิจัยเทคโนโลยีบล็อกเชน สำรวจเทคโนโลยีที่สำคัญและล้ำสมัยที่สุด เช่น EVM, Layer2, cross-chain, การประมวลผลเพื่อความเป็นส่วนตัว และโซลูชันการชำระเงินอัตโนมัติ
บัญชี WeChat สาธารณะ: Sin7Y
GitHub | Twitter | Telegram | Medium| Mirror | HackMD | HackerNoon
