วันพฤหัสบดีที่ 20 กันยายน พ.ศ. 2555

กลุ่มคำสั่งการควบคุมโปรแกรม

กลุ่มคำสั่งการควบคุมโปรแกรม

        กลุ่มคำสั่งการควบคุมโปรแกรม เช่น คำสั่ง 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
ตัวอย่างการควบคุม Loop1 และ Loop2



 
คำสั่งเปรียบเทียบ

         การเปรียบเทียบข้อมูลสามารถทำได้โดยนำข้อมูล 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 ซึ่งจะมีผล คือ
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 เมื่อรีสจิสเตอร์ A=B
คำสั่ง 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 เมื่อรีสจิสเตอร์ A<B
 

 

ไม่มีความคิดเห็น:

แสดงความคิดเห็น