[ บทความ : มาเขียนโปรแกรมกับ 68HC11 กันเถอะ ตอนที่ 7 ]  คำสั่งเพิ่มค่า, ลดค่า, คอมพลีเมนต์  

 

                มาถึงตรงนี้ บทความเกี่ยวกับ 68HC11 ก็มาก้าวมาสู่ตอนที่ 7 กันแล้วครับ แต่เราไปไม่ถึงไหนกันเลย (ใช่ไหม) อันนี้ต้องขออภัยด้วยนะครับ เพราะผมมีภาระ (หนัก) ไปนิดนึง ทำให้การเขียนบทความนั้น ลดลงไปมากเลย (ดูได้จากช่วง 1 ปี ที่ผ่านมา จำนวนบทความของผมลดลงไปเยอะเลย) ... อย่างไรคงไม่ว่ากันนะครับ ... อีกอย่างหนึ่งครับ ผมได้เปลี่ยนบทความนี้เป็นการอธิบายคำสั่งนะครับ เพราะตัวอย่างนั้น ทาง ETT มีให้เราศึกษาเยอะกันอยู่แล้ว ขาดเพียงแต่เรื่องคำสั่งนั้น ยังไม่มีการอธิบาย ดังนั้น แทนที่จะทำอะไรที่ซ้อนกัน ผมก็เปลี่ยนเป็น เขียนบทความในแนวที่เสริมกับของที่มีอยู่แล้ว จะได้ไม่เกิด สิ่งที่เรียกว่า double standard ไงครับ (เอาตัวรอดเนอะ)

 จุดประสงค์

            ศึกษารูปแบบคำสั่ง เกี่ยวกับการเพิ่มค่า, ลดค่า, คอมพลีเมนต์

คำสั่ง/รูปแบบและผลการทำงาน  

    คำสั่งเพิ่มค่า

             คำสั่งสำหรับเพิ่มค่านั้น จะเป็นการเพิ่มค่าของเรจิสเตอร์, หน่วยความจำ ขึ้น 1 ค่า คำสั่งในกลุ่มนี้นั้นก็คือ INCA, INCB, INC, INX, INY และ INS รายละเอียดของคำสั่งเป็นดังนี้            

INCA

รูปแบบ INCA
ผลต่อ CCR N, Z, V, C
หน้าที่    เพิ่มค่าของเรจิสเตอร์ A ขึ้น 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ A อีกครั้ง
   

 INCB

รูปแบบ INCB
ผลต่อ CCR N, Z, V, C
หน้าที่   เพิ่มค่าของเรจิสเตอร์ B ขึ้น 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ B อีกครั้ง
   
INC
รูปแบบ INC    address
ผลต่อ CCR N, Z, V, C
หน้าที่   เพิ่มค่าของหน่วยความจำ ขึ้น 1 ค่า แล้วเก็บเข้าไปในหน่วยความจำอีกครั้ง
   

INX

รูปแบบ INX
ผลต่อ CCR Z
หน้าที่   เพิ่มค่าของเรจิสเตอร์ IXขึ้น 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ IX อีกครั้ง
   
INY
รูปแบบ INY
ผลต่อ CCR Z
หน้าที่   เพิ่มค่าของเรจิสเตอร์ IYขึ้น 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ IY อีกครั้ง
   
 INS
รูปแบบ INS
ผลต่อ CCR ไม่มี
หน้าที่  

เพิ่มค่าของเรจิสเตอร์ SPขึ้น 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ SP อีกครั้ง

   

     คำสั่งลดค่า

                คำสั่งสำหรับลดค่า ก็จะทำตรงกันข้ามกับการเพิ่มค่า นั่นคือ ลดค่าของเรจิสเตอร์ หรือหน่วยความจำ ลง 1 ค่า ซึ่งคำสั่งลดค่าได้แก่ DECA, DECB, DEC, DECX, DECY และ DES รายละเอียดของคำสั่งเป็นดังนี้

DECA

รูปแบบ DECA
ผลต่อ CCR N, Z, V, C
หน้าที่   ลดค่าของเรจิสเตอร์ A ลง 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ A อีกครั้ง
   
DECB
รูปแบบ DECB
ผลต่อ CCR N, Z, V, C
หน้าที่   ลดค่าของเรจิสเตอร์ B ลง 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ B อีกครั้ง
   
DEC
รูปแบบ DEC    address
ผลต่อ CCR N, Z, V, C
หน้าที่   ลดค่าของหน่วยความจำ ลง 1 ค่า แล้วเก็บเข้าไปในหน่วยความจำอีกครั้ง
   

DEX

รูปแบบ DEX
ผลต่อ CCR Z
หน้าที่   ลดค่าของเรจิสเตอร์ IX ลง 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ IX อีกครั้ง
   
DEY
รูปแบบ DEY
ผลต่อ CCR Z
หน้าที่   ลดค่าของเรจิสเตอร์ IY ลง 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ IY อีกครั้ง
   
DES
รูปแบบ DES
ผลต่อ CCR ไม่มี
หน้าที่  

ลดค่าของเรจิสเตอร์ SP ลง 1 ค่า แล้วเก็บเข้าไปในเรจิสเตอร์ SP อีกครั้ง

   

     คำสั่งคอมพลีเมนต์

                คำสั่งกลุ่มท้ายก็จะเป็นคำสั่งที่เกี่ยวกับการทำคอมพลีเมนต์ หรือที่เรียกว่าการกลับบิตนั่นเอง (1’s complement) หลักการทำงานของคอมพลีเมนต์ คือ นำค่า $FF ตั้ง ลบด้วยค่าที่อยู่ในเรจิสเตอร์ A หรือ B ดังนั้น หมายความว่า เราสามารถทำคอมพลีเมนต์ได้เฉพาะ 8 บิตเท่านั้น รายละเอียดของคำสั่งเป็นดังนี้ครับ

COMA

รูปแบบ COMA
ผลต่อ CCR N, Z, V=0, C=1
หน้าที่   ทำการคอมพลีเมนต์เรจิสเตอร์ A
   

COMB

รูปแบบ COMB
ผลต่อ CCR N, Z, V=0, C=1
หน้าที่   ทำการคอมพลีเมนต์เรจิสเตอร์ B
   
COM
รูปแบบ  COM   address
ผลต่อ CCR N, Z, V=0, C=1
หน้าที่   ทำการคอมพลีเมนต์หน่วยความจำ
   

   สรุป

                 ถึงแม้ผมไม่ได้ยกตัวอย่างประกอบ คงมองออกนะครับว่า สามารถนำไปใช้งานได้อย่างไร เพราะคำสั่งทั้ง 3 กลุ่มนี้ เป็นพื้นฐานที่มีอยู่ในทุกโปรเซสเซอร์ ข้อเสียคงเป็นที่ การทำคอมพลีเมนต์นั้น กระทำได้แค่ 8 บิตเท่านั้นเอง แต่ก็เพียงพอแล้วล่ะครับ สำหรับไมโครโปรเซสเซอร์ขนาด 8 บิต เพราะถ้าใส่คำสั่งมากกว่านี้ การทำงานก็จะสลับซับซ้อน ยิ่งทำให้ความเร็วนั้นตดลงไปอีก ... มีดีย่อมมีเสียล่ะครับ .. คราวหน้าจะเป็นคำสั่งที่เกี่ยวกับหน่วยความจำแบบสแตก (Stack)

  


เขียนโดย : ศุภชัย  บุศราทิจ
Author : Supachai  Budsaratij
วันที่ทำการปรับปรุง : ๑๖ พ.ค. ๒๕๔๖