คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด
อธิบายคำสั่งไคโรโดยละเอียด
Sin7y
特邀专栏作者
2022-09-28 02:44
บทความนี้มีประมาณ 2540 คำ การอ่านทั้งหมดใช้เวลาประมาณ 4 นาที
บทความนี้ตีความคำสั่งไคโรโดยละเอียดจากหลายมุมมอง ซึ่งเกี่ยวข้องกับการเปลี่ยนสถานะ ตรรก

ชื่อระดับแรก

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 if

รูปที่ 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 | MediumMirror | HackMD | HackerNoon

นักพัฒนา
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
สรุปโดย AI
กลับไปด้านบน
บทความนี้ตีความคำสั่งไคโรโดยละเอียดจากหลายมุมมอง ซึ่งเกี่ยวข้องกับการเปลี่ยนสถานะ ตรรก
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android