[
บทความ :
มาเขียนโปรแกรมกับ 68HC11
กันเถอะ ตอนที่
7
]
คำสั่งเพิ่มค่า,
ลดค่า, คอมพลีเมนต์ |
จุดประสงค์
ศึกษารูปแบบคำสั่ง
เกี่ยวกับการเพิ่มค่า,
ลดค่า, คอมพลีเมนต์
คำสั่ง/รูปแบบและผลการทำงาน
คำสั่งเพิ่มค่า
คำสั่งสำหรับเพิ่มค่านั้น
จะเป็นการเพิ่มค่าของเรจิสเตอร์, หน่วยความจำ
ขึ้น 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 อีกครั้ง |
คำสั่งคอมพลีเมนต์
คำสั่งกลุ่มท้ายก็จะเป็นคำสั่งที่เกี่ยวกับการทำคอมพลีเมนต์
หรือที่เรียกว่าการกลับบิตนั่นเอง
(1s 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)