กลุ่มคำสั่งการควบคุมโปรแกรม เช่น คำสั่ง Jump, Call และ Return
เป็นชุดคำสั่งที่สั่งให้ CPU แยก (Branch) ไปทำงานตามคำสั่งซึ่งเขียนไว้
ที่ตำแหน่งอื่น ของหน่วยความจำแทนที่จะไปตามลำดับคำสั่ง ซึ่งใน CPU เบอร์ Z-80 มี
Reg. ตัวหนึ่ง เรียกว่า Program Counter (Reg. PC)
ซึ่งทำหน้าที่เก็บตำแหน่งของคำสั่งถัดไปจากตำแหน่งคำสั่งที่กำลังปฏิบัติอยู่
เพื่อลำดับการทำงานของโปรแกรมได้ถูกต้อง และการนำค่าในแฟลกมาใช้เป็นเงื่อนไข
ก็เป็นการควบคุมโปรแกรมด้วย ซึ่งกลุ่มคำสั่งการควบคุมโปรแกรมมีดังนี้
- คำสั่งกระโดดแบบมีเงื่อนไข
- คำสั่งที่ใช้ควบคุม Loop
- คำสั่งเปรียบเทียบ
- คำสั่งควบคุมโปรแกรมย่อย
คำสั่งที่ใช้ควบคุม Loop
ตามปกติ CPU Z-80 จะทำงานตามคำสั่งที่เขียนในโปรแกรมทีละคำสั่งเรียงลำดับกันไป
แต่ในบางครั้งเราต้องการให้ CPU ทำงานอย่างหนึ่งซ้ำกันหลายๆ ครั้ง CPU
สามารถทำงานดังกล่าวได้ ซึ่งขึ้นอยู่กับเงื่อนไข ที่ผู้เขียนโปรแกรมตั้งไว้
โดยที่ไม่ต้องเขียนโปรแกรมซ้ำกันหลายๆ ครั้ง ตามเงื่อนไขที่ตั้งไว้ การที่ CPU
มีความสามารถดังกล่าวนี้เนื่อง จากมีคำสั่งเกี่ยวกับ "การกระโดด" และการตัดสินใจ"
นั่นเอง แสดงให้เห็นการทำงานของคำสั่งควบคุม Loop ดังตัวอย่าง
![]() |
แสดงการทำคำสั่ง JP C,05H |
คำสั่งเปรียบเทียบ
การเปรียบเทียบข้อมูลสามารถทำได้โดยนำข้อมูล 2 ข้อมูลมาคำนวนทางคณิตศาสตร์
หรือลอจิก และตัดสินผลการเเปรียบเทียบจากสภาพการเปลี่ยนแปลงของแฟลก
ตัวอย่างเช่น ถ้าอยากทราบว่า x เท่ากับ y หรือไม่ ก็ให้ทำการคำนวณ โดยใช้ x-y ถ้าคำตอบเป็น "0" แฟลกศูนย์จะมีค่า="1" ซึ่งแสดงว่า ตัวเลข ทั้งสองเท่ากัน ถ้าแฟลกศูนย์มีค่าเป็น "0" จะแสดงว่า มีค่าไม่เท่ากัน ดังนั้น การเปรียบเทียบข้อมูลจะประกอบด้วย 2 ขั้นตอน คือ การคำนวณ และการตัดสินใจ
ใน CPU เบอร์ Z-80 มีคำสั่งเกี่ยวกับการเปรียบเทียบข้อมูลดังนี้
CP s ซึ่ง s สามารถที่เป็น Reg. (B, C, D, E, H, L) หรือเป็นข้อมูลโดยตรงก็ได้เมื่อทำคำสั่ง CP s จะมีการนำค่า s ไปลบจากค่าใน Reg. A (โดย Reg. A ไม่เปลี่ยนแปลง ) และจะมีผลต่อแฟลกด้วย ดังตัวอย่างเช่น ต้องการเปรียบเทียบข้อมูลใน Reg. A กับ Reg. B สามารถทำได้โดยใช้คำสั่ง CP B ซึ่งจะมีผล คือ
ตัวอย่างเช่น ถ้าอยากทราบว่า x เท่ากับ y หรือไม่ ก็ให้ทำการคำนวณ โดยใช้ x-y ถ้าคำตอบเป็น "0" แฟลกศูนย์จะมีค่า="1" ซึ่งแสดงว่า ตัวเลข ทั้งสองเท่ากัน ถ้าแฟลกศูนย์มีค่าเป็น "0" จะแสดงว่า มีค่าไม่เท่ากัน ดังนั้น การเปรียบเทียบข้อมูลจะประกอบด้วย 2 ขั้นตอน คือ การคำนวณ และการตัดสินใจ
ใน CPU เบอร์ Z-80 มีคำสั่งเกี่ยวกับการเปรียบเทียบข้อมูลดังนี้
CP s ซึ่ง s สามารถที่เป็น Reg. (B, C, D, E, H, L) หรือเป็นข้อมูลโดยตรงก็ได้เมื่อทำคำสั่ง CP s จะมีการนำค่า s ไปลบจากค่าใน Reg. A (โดย Reg. A ไม่เปลี่ยนแปลง ) และจะมีผลต่อแฟลกด้วย ดังตัวอย่างเช่น ต้องการเปรียบเทียบข้อมูลใน Reg. A กับ Reg. B สามารถทำได้โดยใช้คำสั่ง CP B ซึ่งจะมีผล คือ
Registor
|
Flag
|
A=B
A>B A<B |
Z=1, C=0
Z=0, C=0 Z=0, C=1 |
ตัวอย่างคำสั่งเปรียบเทียบแสดงได้ดังนี้
คำสั่ง CP B (ในกรณีที่ Reg. A= Reg B)
คำสั่ง CP B มีรหัสเฮกซ์=B8H เมื่อ CPU Z-80 พบคำสั่ง B8H CPU จะทราบว่าให้นำข้อมูลใน Reg. B มาเปรียบเทียบกับ Reg. A ผลลัพธ์ที่ได้จะนำไปเก็บใน Reg. A พร้อมแสดงสถานะของแฟลกต่างๆ ด้วย แสดงการทำงานให้เห็นดังรูป
คำสั่ง CP B (ในกรณีที่ Reg. A= Reg B)
คำสั่ง CP B มีรหัสเฮกซ์=B8H เมื่อ CPU Z-80 พบคำสั่ง B8H CPU จะทราบว่าให้นำข้อมูลใน Reg. B มาเปรียบเทียบกับ Reg. A ผลลัพธ์ที่ได้จะนำไปเก็บใน Reg. A พร้อมแสดงสถานะของแฟลกต่างๆ ด้วย แสดงการทำงานให้เห็นดังรูป
![]() |
แสดงการทำคำสั่ง CP เมื่อรีสจิสเตอร์ A=B |
คำสั่ง CP B (ในกรณีที่ Reg. A> Reg B)
คำสั่ง CP B มีรหัสเฮกซ์=B8H เมื่อ CPU Z-80 พบคำสั่ง B8H CPU จะทราบว่าให้นำข้อมูลใน Reg. B มาเปรียบเทียบกับ Reg. A ผลลัพธ์ที่ได้จะนำไปเก็บใน Reg. A พร้อมแสดงสถานะของแฟลกต่างๆ ด้วย แสดงการทำงานให้เห็นดังรูป
คำสั่ง CP B มีรหัสเฮกซ์=B8H เมื่อ CPU Z-80 พบคำสั่ง B8H CPU จะทราบว่าให้นำข้อมูลใน Reg. B มาเปรียบเทียบกับ Reg. A ผลลัพธ์ที่ได้จะนำไปเก็บใน Reg. A พร้อมแสดงสถานะของแฟลกต่างๆ ด้วย แสดงการทำงานให้เห็นดังรูป
![]() |
แสดงการทำคำสั่ง CP เมื่อรีสจิสเตอร์ A>B |
คำสั่ง CP B (ในกรณีที่ Reg. A< Reg B)
คำสั่ง CP B มีรหัสเฮกซ์=B8H เมื่อ CPU Z-80 พบคำสั่ง B8H CPU จะทราบว่าให้นำข้อมูลใน Reg. B มาเปรียบเทียบกับ Reg. A ผลลัพธ์ที่ได้จะนำไปเก็บใน Reg. A พร้อมแสดงสถานะของแฟลกต่างๆ ด้วย แสดงการทำงานให้เห็นดังรูป
คำสั่ง CP B มีรหัสเฮกซ์=B8H เมื่อ CPU Z-80 พบคำสั่ง B8H CPU จะทราบว่าให้นำข้อมูลใน Reg. B มาเปรียบเทียบกับ Reg. A ผลลัพธ์ที่ได้จะนำไปเก็บใน Reg. A พร้อมแสดงสถานะของแฟลกต่างๆ ด้วย แสดงการทำงานให้เห็นดังรูป
![]() |
แสดงการทำคำสั่ง CP เมื่อรีสจิสเตอร์ A<B |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น