กลุ่มคำสั่งแลกเปลี่ยน


      นอกจากคำสั่งโหลดที่ใช้ในการนำข้อมูลจากแหล่งหนึ่งไปให้กับอีกแหล่งหนึ่ง แล้ว Z80 ยังมีคำสั่งแลกเปลี่ยนข้อมูล และ คำสั่งในการโหลดข้อมูลเป็นกลุ่ม โดยคำสั่งแลกเปลี่ยนข้อมูลจะมีความแตกต่างจากคำสั่งโหลดคือ ข้อมูลทั้งสองฝั่งจะสลับกัน เช่น ถ้ากรณีรีจีสเตอร์ A แลกเปลี่ยนข้อมูลกับรีจิสเตอร์ H ผลการกระทำจะเป็นดังรูป

รูปแสดงการแลกเปลี่ยนข้อมูล

      จากรูปจะเห็นว่าก่อนแลกเปลี่ยนข้อมูลรีจิสเตอร์ A มีค่าเป็น 00 และรีจีสเตอร์ H มีค่าเป็น 54 ภายหลังจากมีการแลกเปลี่ยนข้อมูลกันรีจีสเตอร์ A จะมีค่าเป็น 54 และรีจิสเตอร์ H จะมีค่าเป็น 00 คือ ข้อมูลทั้งสองฝั่งไม่ได้หายไปแต่มีการสลับที่กันปกติการกระทำตามรูปจะกระทำโดยตรงไม่ได้ต้องใช้คำสั่งโหลดเข้ามาช่วยดำเนินการดังนี้คือ
           LD B,H ; เก็บข้อมูลรีจิสเตอร์ H ไว้ในรีจิสเตอร์ B
           LD H,A ; โหลดข้อมูลจากรีจิสเตอร์ A ไปให้รีจิสเตอร์ H
           LD H,A ; โหลดข้อมูลจากรีจิสเตอร์ A ไปให้รีจิสเตอร์ H

1.) คำสั่งแลกเปลี่ยนข้อมูล จะมีเพียง 3 คำสั่งคือ
      - EX DE,HL เป็นคำสั่งแลกเปลี่ยนข้อมูลระหว่างรีจิสเตอร์ DE กับ HL
      - EX AF,AF เป็นคำสั่งแลกเปลี่ยนข้อมูลระหว่างรีจิสเตอร์ AF กับรีจิสเตอร์สำรอง AF
      - EXX เป็นคำสั่งในการแลกเปลี่ยนข้อมูลมักนำมาใช้เพื่อความรวดเร็วในการเก็บค่าข้อมูลโดยจะทำการสลับข้อมูลเพื่อเก็บค่าข้อมูลรีจิสเตอร์หลักไว้ในรีจิสเตอร์สำรอง ก่อนเข้าสู่โปรแกรมย่อยและจะสลับอีกครั้งเพื่อคืนค่าข้อมูลกลับมาเมื่อออกจากโปรแกรมย่อย

2.) คำสั่งโหลดข้อมูลเป็นกลุ่ม ส่วนใหญ่จะใช้ในการถ่ายโอนข้อมูลเป็นกลุ่มโดยมีคำสั่งใช้งานทั้งสิ้น 4 คำสั่งคือ
      - LDI เป็นคำสั่งโหลดมข้อมูลเป็นกลุ่มแบบเพิ่มค่า (Load Increment)
      - LDIR จะคล้าย LDI แต่จะทำงานซ้ำโดยอัตโนมัติ (Load Increment Repeat)
      - LDD เป็นคำสั่งโหลดข้อมูลเป็นกลุ่มแบบลดค่า (Load Decrement)
      - LDDR จะคล้าย LDD แต่จะทำงานซ้ำโดยอัตโนมัติ (Load Decrement Repeat) การทำงานโดยรวมจะคล้ายกันจึงขอกล่าวเพียง 2 คำสั่งแรกคือ LDI และ LDIR เท่านั้น