ไมโครโปรเซสเซอร์ - ชุดคำสั่ง 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 - ใช้เพื่อกลับจากบริการขัดจังหวะไปยังโปรแกรมหลัก