รีจิสเตอร์ภายในของ Z80


        ภายในซีพียูจะมีการสร้างรีจิสเตอร์ไว้เป็นที่เก็บหรือเป็นพักข้อมูลเพื่อความสะดวกและรวดเร็วในการประมวลผล นอกจากนั้นยังมีรีจิสเตอร์ที่สร้างไว้เพื่อทำงานบางอย่างโดยเฉพาะในซีพียู Z80 จะแบ่งเป็น 3 กลุ่มดังนี้

รูปแสดงรีจิสเตอร์ภายในซีพียู Z80

        1. รีจิสเตอร์ใช้งานทั่วไป (General Purpose Register) เป็นรีจิสเตอร์ที่ใช้เก็บข้อมูลทั่วไป โดยจะแบ่งย่อยเป็น 2 ประเภทคือ รีจิสเตอร์หลักและรีจิสเตอร์สำรอง โดยรีจิสเตอร์หลักสามารถเก็บข้อมูลได้หลายด้านเช่นเก็บข้อมูลระหว่างรีจิสเตอร์กับหน่วยความจำ หรือ ระหว่างรีจิสเตอร์กับรีจิสเตอร์ด้วยกันเอง ส่วนรีจิสเตอร์สำรองจะใช้สำรองข้อมูลจากรีจิสเตอร์หลักเท่านั้น ไม่สามารถเก็บหรือสำรองข้อมูลจากส่วนอื่นได้ รีจิสเตอร์หลักของ Z80 ได้แก่ รีจิสเตอร์ A,F,B.C D.E.H และ L ส่วนรีจิสเตอร์สำรองได้แก่ A’ (อ่านว่า เอ-แดท) ,F’,B’,C’,D’,E’,H’ และ L’
        2. รีจิสเตอร์เฉพาะกิจ (Special Purpose Register) เป็นรีจิสเตอร์ที่ใช้ในงานบางอย่างโดยเฉพาะ เช่น
               - โปรแกรมเคาว์เตอร์ (PC) ใช้ระบุตำแหน่งแอดเดรสของคำสั่งที่จะประมวลผล
               - สแต็คพ๊อยเตอร์(SP)ใช้เป็บข้อมูลการดำเนินงานของระบบ
               - IX,IY เป็นอินเด็กรีจิสเตอร์ (Index Register) ใช้ชี้ตำแหน่งข้อมูลที่จะติดต่อ
               - รีจิสเตอร์ I (Interrupt Register)ใช้เก็บค่าอินเทอร์รัพเวกเตอร์ (Interrupt Vector)
               - รีจิสเตอร์ R (Refresh Register) ใช้กำหนดตำแหน่งของหน่วยความจำของไดนามิกแรมที่จะทวนข้อมูลซ้ำ
               - รีจิสเตอร์ A ที่ทำหน้าที่เป็นแอคคิวมูเลเตอร์ (Accumulator) ซึ่งจะใช้ในคำสั่งการคำนวณทางคณิตศาสตร์ และ การกระทำทางลอจิก
               - รีจิสเตอร์ F เป็นรีจิสเตอร์ที่ใช้เก็บสถานะในการทำงานซึ่งค่าของมันจะเปลี่ยนแปลงเมื่อซีพียูกระทำคำสั่งคำนวณทางคณิตศาสตร์หรือตัดสินใจ ดังนั้นเราจึงไม่ใช้รีจิสเตอร์ F ในการเก็บข้อมูล แต่จะใช้ตรวจสอบสถานะการทำงานของซีพียูจากสถานะของบิตต่างๆของรีจิสเตอร์ F ดังรูป

รูปแสดงบิตต่างๆของรีจิสเตอร์แฟลก

               - บิต 7 จะใช้เป็น แฟลกเครื่องหมาย (Sign Flag) ใช้ในการคำนวณแบบคิดเครื่องหมายโดยจะจัดเก็บเครื่องหมายว่าเป็นบวกหรือลบในบิตนี้ คือถ้าบิตนี้มีสถานะเป็น 0 หมายถึงข้อมูลเป็นบวก แต่ถ้าบิตนี้มีสถานะเป็น 1 จะแสดงว่าข้อมูลมีสถานะเป็น ลบ
               - บิต 6 ใช้เป็น แฟลกศูนย์ (Zero Flag) โดยเมื่อการประมวลผลของ ALU มีผลลัพธ์เป็นศูนย์ แฟลกนี้จะถูกเซตให้เป็นลอจิก 1
               - บิต 5 ไม่ได้ถูกใช้งาน
               - บิต 4 เป็น แฟลกตัวทดช่วย (Half Carry Flag) โดยจะมีค่าเป็นลอจิก 1 เมื่อการบวกใน 4 บิตแรก (หลักแรกของตัวเลขฐานสิบหก) มีตัวทดเกิดขึ้นหรือมีการยืมเกิดขึ้นในการลบของ 4 บิตแรก
               - บิต 3 ละไว้ไม่ได้ใช้
               - บิต 2 ใช้เป็น แฟลกพาริติ้หรือแฟลกโอเวอร์โฟล์ว (P/V:Parity&Over Flow Flag) โดยจะมี 2 ลักษณะคือ ในกรณีซีพียูประมวลผลทางคณิตศาสตร์ บิตนี้จะเป็น แฟลกค่าเกินหรือแฟลกโอเวอร์โฟล์วโดยจะมีสถานะเป็นลอจิก 1 เมื่อการประมวลผลเกิดสภาวะค่ามากเกินกว่าที่จะเก็บผลลัพธ์(Over Flow) ได้ และในกรณีกระทำการทางลอจิก บิตนี้จะเป็น แฟลกพาริติ้ โดยจะมีค่าเป็น 1 เมื่อค่าข้อมูลในแอคคิวมูเลเตอร์มีจำนวนของตัวเลข 1 เป็นจำนวนคู่ และ จะมีค่าเป็น 0 เมื่อจำนวนเลข 1 ในแอคคิวมูเลเตอร์เป็นจำนวนคี่
               - บิต 1 ใช้เป็น แฟลกตัวลบ (Negative Flag) โดยจะมีค่าเป็นลอจิก 1 เมื่อซีพียูกระทำคำสั่งลบ คือ คำสั่ง SUB หรือ SBC และ คำสั่งเปรียบเทียบค่า (CP) หรือลดค่า (DEC) และจะมีค่าเป็น 0 เมื่อซีพียูกระทำคำสั่งบวก คือ คำสั่ง ADD หรือ ADC และ คำสั่งเพิ่มค่า (INC)
               - บิต 0 เป็น แฟลกตัวทด (Carry Flag) ใช้เก็บค่าของตัวทดที่เกิดขึ้นจากการบวกหรือการเลื่อนบิต (Shift) หมุนบิต (Rotate)