ไมโครโปรเซสเซอร์ - ชุดคำสั่ง 8086

ไมโครโปรเซสเซอร์ 8086 รองรับคำสั่ง 8 ประเภท -

  • คำแนะนำในการโอนข้อมูล
  • คำแนะนำทางคณิตศาสตร์
  • คำแนะนำในการจัดการบิต
  • คำแนะนำสตริง
  • คำแนะนำในการโอนย้ายโปรแกรม (คำแนะนำสาขาและวนซ้ำ)
  • คำแนะนำในการควบคุมโปรเซสเซอร์
  • คำแนะนำในการควบคุมการทำซ้ำ
  • คำแนะนำในการขัดจังหวะ

ตอนนี้ให้เราพิจารณารายละเอียดเกี่ยวกับชุดคำสั่งเหล่านี้

คำแนะนำในการโอนข้อมูล

คำแนะนำเหล่านี้ใช้เพื่อถ่ายโอนข้อมูลจากตัวถูกดำเนินการต้นทางไปยังตัวถูกดำเนินการปลายทาง ต่อไปนี้เป็นรายการคำแนะนำในกลุ่มนี้ -

คำแนะนำในการถ่ายโอนคำ

  • MOV - ใช้เพื่อคัดลอกไบต์หรือคำจากต้นทางที่ระบุไปยังปลายทางที่ระบุ

  • PPUSH - ใช้ใส่คำที่ด้านบนสุดของสแต็ก

  • POP - ใช้เพื่อรับคำจากด้านบนสุดของสแต็กไปยังตำแหน่งที่ระบุ

  • PUSHA - ใช้เพื่อใส่รีจิสเตอร์ทั้งหมดลงในสแต็ก

  • POPA - ใช้เพื่อรับคำจากสแต็กไปยังรีจิสเตอร์ทั้งหมด

  • XCHG - ใช้เพื่อแลกเปลี่ยนข้อมูลจากสองสถานที่

  • XLAT - ใช้ในการแปลไบต์ใน AL โดยใช้ตารางในหน่วยความจำ

คำแนะนำสำหรับการถ่ายโอนพอร์ตอินพุตและเอาต์พุต

  • IN - ใช้เพื่ออ่านไบต์หรือคำจากพอร์ตที่ให้ไปยังตัวสะสม

  • OUT - ใช้เพื่อส่งไบต์หรือคำจากตัวสะสมไปยังพอร์ตที่ให้มา

คำแนะนำในการโอนที่อยู่

  • LEA - ใช้เพื่อโหลดที่อยู่ของตัวถูกดำเนินการลงในรีจิสเตอร์ที่ให้มา

  • LDS - ใช้เพื่อโหลดรีจิสเตอร์ DS และรีจิสเตอร์อื่น ๆ จากหน่วยความจำ

  • LES - ใช้เพื่อโหลดรีจิสเตอร์ ES และรีจิสเตอร์อื่น ๆ จากหน่วยความจำ

คำแนะนำในการโอนแฟล็กรีจิสเตอร์

  • LAHF - ใช้เพื่อโหลด AH ด้วยไบต์ต่ำของแฟล็กรีจิสเตอร์

  • SAHF - ใช้เพื่อจัดเก็บทะเบียน AH เป็นไบต์ต่ำของแฟล็กรีจิสเตอร์

  • PUSHF - ใช้เพื่อคัดลอกแฟล็กรีจิสเตอร์ที่ด้านบนสุดของสแต็ก

  • POPF - ใช้เพื่อคัดลอกคำที่ด้านบนสุดของสแต็กไปยังแฟล็กรีจิสเตอร์

คำแนะนำทางคณิตศาสตร์

คำแนะนำเหล่านี้ใช้เพื่อดำเนินการทางคณิตศาสตร์เช่นการบวกการลบการคูณการหาร ฯลฯ

ต่อไปนี้เป็นรายการคำแนะนำในกลุ่มนี้ -

คำแนะนำในการดำเนินการเพิ่มเติม

  • ADD - ใช้เพื่อเพิ่มไบต์ที่ให้มาเป็น byte / word to word

  • ADC - ใช้เพิ่มพกพา

  • INC - ใช้เพื่อเพิ่มไบต์ / คำที่ระบุโดย 1

  • AAA - ใช้เพื่อปรับ ASCII หลังจากเพิ่ม

  • DAA - ใช้เพื่อปรับทศนิยมหลังจากการดำเนินการบวก / ลบ

คำแนะนำในการลบ

  • SUB - ใช้เพื่อลบไบต์ออกจากไบต์ / คำจากคำ

  • SBB - ใช้ในการลบด้วยการยืม

  • DEC - ใช้เพื่อลดจำนวนไบต์ / คำที่ระบุด้วย 1

  • NPG - ใช้เพื่อลบล้างแต่ละบิตของไบต์ / คำที่ให้มาและเพิ่มส่วนเติมเต็ม 1/2

  • CMP - ใช้เพื่อเปรียบเทียบ 2 ไบต์ / คำที่ให้มา

  • AAS - ใช้เพื่อปรับรหัส ASCII หลังการลบ

  • DAS - ใช้เพื่อปรับทศนิยมหลังการลบ

คำแนะนำในการคูณ

  • MUL - ใช้ในการคูณไบต์ที่ไม่ได้ลงนามโดยไบต์ / คำต่อคำ

  • IMUL - ใช้เพื่อคูณไบต์ที่เซ็นชื่อทีละไบต์ / คำทีละคำ

  • AAM - ใช้เพื่อปรับรหัส ASCII หลังการคูณ

คำแนะนำในการแบ่งส่วน

  • DIV - ใช้เพื่อแบ่งคำที่ไม่ได้ลงนามด้วยไบต์หรือคำคู่ที่ไม่ได้ลงนามทีละคำ

  • IDIV - ใช้เพื่อแบ่งคำที่ลงนามทีละไบต์หรือลงนามสองคำทีละคำ

  • AAD - ใช้เพื่อปรับรหัส ASCII หลังการหาร

  • CBW - ใช้เพื่อเติมไบต์บนของคำด้วยสำเนาของบิตเครื่องหมายของไบต์ล่าง

  • CWD - ใช้เติมคำบนของคำคู่ด้วยเครื่องหมายบิตของคำล่าง

คำแนะนำในการจัดการบิต

คำแนะนำเหล่านี้ใช้เพื่อดำเนินการที่มีบิตข้อมูลเข้ามาเกี่ยวข้องเช่นการดำเนินการเช่นตรรกะกะ ฯลฯ

ต่อไปนี้เป็นรายการคำแนะนำในกลุ่มนี้ -

คำแนะนำในการดำเนินการเชิงตรรกะ

  • NOT - ใช้เพื่อกลับบิตของแต่ละไบต์หรือคำ

  • AND - ใช้สำหรับการเพิ่มแต่ละบิตในไบต์ / คำด้วยบิตที่เกี่ยวข้องในไบต์ / คำอื่น

  • OR - ใช้ในการคูณแต่ละบิตเป็นไบต์ / คำด้วยบิตที่เกี่ยวข้องในไบต์ / คำอื่น

  • XOR - ใช้เพื่อดำเนินการเฉพาะ - หรือในแต่ละบิตในไบต์ / คำโดยมีบิตที่สอดคล้องกันในไบต์ / คำอื่น

  • TEST - ใช้เพื่อเพิ่มตัวถูกดำเนินการเพื่ออัพเดตแฟล็กโดยไม่ส่งผลกระทบต่อตัวถูกดำเนินการ

คำแนะนำในการดำเนินการกะ

  • SHL/SAL - ใช้เพื่อเลื่อนบิตของไบต์ / คำไปทางซ้ายและใส่ศูนย์ (S) ใน LSB

  • SHR - ใช้เพื่อเลื่อนบิตของไบต์ / คำไปทางขวาและใส่ศูนย์ (S) ใน MSBs

  • SAR - ใช้เพื่อเลื่อนบิตของไบต์ / คำไปทางขวาและคัดลอก MSB เก่าลงใน MSB ใหม่

คำแนะนำในการดำเนินการหมุน

  • ROL - ใช้เพื่อหมุนบิตของไบต์ / คำไปทางซ้ายเช่น MSB เป็น LSB และเพื่อ Carry Flag [CF]

  • ROR - ใช้เพื่อหมุนบิตของไบต์ / คำไปทางขวาเช่น LSB เป็น MSB และเพื่อ Carry Flag [CF]

  • RCR - ใช้เพื่อหมุนบิตของไบต์ / คำไปทางขวาเช่น LSB เป็น CF และ CF เป็น MSB

  • RCL - ใช้หมุนบิตของไบต์ / คำไปทางซ้ายเช่น MSB เป็น CF และ CF เป็น LSB

คำแนะนำสตริง

String คือกลุ่มของไบต์ / คำและหน่วยความจำของมันจะถูกจัดสรรตามลำดับเสมอ

ต่อไปนี้เป็นรายการคำแนะนำในกลุ่มนี้ -

  • REP - ใช้เพื่อทำซ้ำคำสั่งที่กำหนดจนถึง CX ≠ 0

  • REPE/REPZ - ใช้เพื่อทำซ้ำคำสั่งที่กำหนดจนกว่า CX = 0 หรือค่าสถานะศูนย์ ZF = 1

  • REPNE/REPNZ - ใช้เพื่อทำซ้ำคำสั่งที่กำหนดจนกว่า CX = 0 หรือค่าสถานะศูนย์ ZF = 1

  • MOVS/MOVSB/MOVSW - ใช้เพื่อย้ายไบต์ / คำจากสตริงหนึ่งไปยังอีกสตริง

  • COMS/COMPSB/COMPSW - ใช้เพื่อเปรียบเทียบไบต์ / คำสองสตริง

  • INS/INSB/INSW - ใช้เป็นสตริงอินพุต / ไบต์ / คำจากพอร์ต I / O ไปยังตำแหน่งหน่วยความจำที่ให้มา

  • OUTS/OUTSB/OUTSW - ใช้เป็นสตริงเอาต์พุต / ไบต์ / คำจากตำแหน่งหน่วยความจำที่ให้ไปยังพอร์ต I / O

  • SCAS/SCASB/SCASW - ใช้เพื่อสแกนสตริงและเปรียบเทียบไบต์กับไบต์ใน AL หรือคำสตริงกับคำใน AX

  • LODS/LODSB/LODSW - ใช้ในการจัดเก็บไบต์สตริงเป็น AL หรือสตริงคำลงใน AX

คำแนะนำในการโอนย้ายโปรแกรม (คำแนะนำสาขาและวนซ้ำ)

คำแนะนำเหล่านี้ใช้เพื่อโอน / แยกคำสั่งระหว่างการดำเนินการ ประกอบด้วยคำแนะนำต่อไปนี้ -

คำแนะนำในการถ่ายโอนคำสั่งระหว่างการดำเนินการโดยไม่มีเงื่อนไขใด ๆ -

  • CALL - ใช้เพื่อเรียกโพรซีเดอร์และบันทึกที่อยู่ผู้ส่งลงในสแต็ก

  • RET - ใช้เพื่อกลับจากขั้นตอนไปยังโปรแกรมหลัก

  • JMP - ใช้เพื่อข้ามไปยังที่อยู่ที่ให้ไว้เพื่อดำเนินการตามคำแนะนำถัดไป

คำแนะนำในการถ่ายโอนคำสั่งระหว่างการดำเนินการโดยมีเงื่อนไขบางประการ -

  • JA/JNBE - ใช้เพื่อกระโดดหากคำสั่งสูงกว่า / ไม่ต่ำกว่า / เท่ากัน

  • JAE/JNB - ใช้เพื่อกระโดดหากตรงตามคำแนะนำด้านบน / ไม่ต่ำกว่า

  • JBE/JNA - ใช้เพื่อกระโดดหากตรงตามคำสั่งต่ำกว่า / เท่ากัน / ไม่สูงกว่า

  • JC - ใช้ในการกระโดดหากถือธง CF = 1

  • JE/JZ - ใช้เพื่อกระโดดถ้าธงเท่ากัน / ศูนย์ ZF = 1

  • JG/JNLE - ใช้ในการกระโดดถ้าคำสั่งมากกว่า / ไม่น้อยกว่า / เท่ากัน

  • JGE/JNL - ใช้เพื่อกระโดดถ้ามากกว่า / เท่ากับ / ไม่น้อยกว่าคำแนะนำ

  • JL/JNGE - ใช้เพื่อกระโดดหากคำสั่งน้อยกว่า / ไม่มากกว่า / เท่ากัน

  • JLE/JNG - ใช้ในการกระโดดถ้าน้อยกว่า / เท่ากับ / ถ้าไม่มากกว่าคำแนะนำที่เป็นไปตามข้อกำหนด

  • JNC - ใช้ในการกระโดดหากไม่มีธงนำ (CF = 0)

  • JNE/JNZ - ใช้เพื่อกระโดดหากไม่เท่ากัน / ธงศูนย์ ZF = 0

  • JNO - ใช้เพื่อกระโดดหากไม่มีแฟล็กล้นของ = 0

  • JNP/JPO - ใช้เพื่อกระโดดหากไม่ใช่พาริตี / พาริตีคี่ PF = 0

  • JNS - ใช้เพื่อกระโดดหากไม่ลงชื่อ SF = 0

  • JO - ใช้เพื่อกระโดดหากแฟล็กล้นของ = 1

  • JP/JPE - ใช้เพื่อกระโดดถ้า parity / parity แม้ PF = 1

  • JS - ใช้เพื่อกระโดดถ้า sign flag SF = 1

คำแนะนำในการควบคุมโปรเซสเซอร์

คำแนะนำเหล่านี้ใช้เพื่อควบคุมการดำเนินการของโปรเซสเซอร์โดยการตั้งค่า / รีเซ็ตค่าแฟล็ก

ต่อไปนี้เป็นคำแนะนำในกลุ่มนี้ -

  • STC - ใช้เพื่อตั้งค่าสถานะพกพา CF เป็น 1

  • CLC - ใช้เพื่อล้าง / รีเซ็ตแฟล็กพกพา CF เป็น 0

  • CMC - ใช้เพื่อเติมเต็มในสถานะของการถือธง CF

  • STD - ใช้เพื่อตั้งค่าสถานะทิศทาง DF เป็น 1

  • CLD - ใช้เพื่อล้าง / รีเซ็ตค่าสถานะทิศทาง DF เป็น 0

  • STI - ใช้เพื่อตั้งค่าแฟล็กเปิดใช้งานขัดจังหวะเป็น 1 เช่นเปิดใช้งานอินพุต INTR

  • CLI - ใช้เพื่อล้างค่าสถานะเปิดใช้งานการขัดจังหวะเป็น 0 เช่นปิดใช้งานอินพุต INTR

คำแนะนำในการควบคุมการทำซ้ำ

คำแนะนำเหล่านี้ใช้เพื่อดำเนินการตามคำแนะนำที่กำหนดเป็นจำนวนครั้ง ต่อไปนี้เป็นรายการคำแนะนำในกลุ่มนี้ -

  • LOOP - ใช้ในการวนซ้ำกลุ่มคำสั่งจนกว่าเงื่อนไขจะเป็นไปตามนั้นเช่น CX = 0

  • LOOPE/LOOPZ - ใช้เพื่อวนซ้ำกลุ่มคำสั่งจนกว่าจะเป็นไปตาม ZF = 1 & CX = 0

  • LOOPNE/LOOPNZ - ใช้เพื่อวนซ้ำกลุ่มคำสั่งจนกว่าจะเป็นไปตาม ZF = 0 & CX = 0

  • JCXZ - ใช้เพื่อข้ามไปยังที่อยู่ที่ระบุหาก CX = 0

คำแนะนำในการขัดจังหวะ

คำแนะนำเหล่านี้ใช้เพื่อเรียกการขัดจังหวะระหว่างการทำงานของโปรแกรม

  • INT - ใช้เพื่อขัดจังหวะโปรแกรมระหว่างดำเนินการและเรียกใช้บริการที่ระบุ

  • INTO - ใช้เพื่อขัดจังหวะโปรแกรมระหว่างการดำเนินการถ้า OF = 1

  • IRET - ใช้เพื่อกลับจากบริการขัดจังหวะไปยังโปรแกรมหลัก