[ บทความ : เรียนรู้ z80 ] ตอนที่ 14 เรื่อง คำสั่งจัดการกับบิต

เรียนรู้ Z80 ตอนที่ 14

คำสั่งจัดการกับบิต

คำสั่งกลุ่มนี้ จะเป็นการติดต่อกับข้อมูลในระดับบิต คือ เราสามารถตรวจสอบได้ว่า ค่า ณ บิตที่เราต้องการนั้น ใช่ 0 หรือ 1 หรือไม่ (ตรวจสอบด้วยคำสั่งกลุ่ม BIT) ... ซึ่งถ้าใช่หรือไม่ใช่ตามที่เราต้องการ เราก็สามารถกำหนดให้มันเป็น 0 (ใช้คำสั่ง RES) หรือ 1 (ใช้คำสั่ง SET) ก็ได้ ... ตัวอย่างเช่น ... เราต้องการจะทราบว่า ค่าใน register A นั้น เป็นเลขจำนวนแบบคี่ หรือคู่ ... วิธีการที่เราจะใช้ก็คือ ดูว่า บิตหลักแรก หรือบิต 0 นั้น มีค่าเป็น 1 หรือไม่ เราก็ใช้คำสั่ง BIT ในการทดสอบค่า ณ บิต หลักที่ 0 แล้วเราก็ดูผลตอบกลับจาก flag ซึ่ง ถ้า Zero flag มีค่าเป็น 1 ก็หมายความว่า บิตที่เราทดสอบนั้น มีค่าเป็น 0 แต่ถ้า Zero flag มีค่าเป็น 0 ก็แสดงว่า บอตนั้น มีค่าเป็น 1 นั่นเอง ... เรามาดูรูปแบบของคำสั่ง BIT, SET และ RES กันก่อนครับ

ตาราง 14-1 คำสั่งตรวจสอบค่าของบิตที่ b ของข้อมูล

Instruction
Source/Target
Flag
Operation
BIT
b, r
Z, N=0, H=1
Z <- complement of bit no.b in register r.
BIT
b, (HL)
Z, N=0, H=1
Z <- complement of bit no.b in (HL).
BIT
b, (IY+d)
Z, N=0, H=1
Z <- complement of bit no.b in (IY + d).
BIT
b, (IX + d)
Z, N=0, H=1
Z <- complement of bit no.b in (IX + d).

ตาราง 14-2 คำสั่งกำหนดให้ค่าของบิตที่ b เป็น 1

Instruction
Source/Target
Flag
Operation
SET
b, r
ไม่มีผลกับแฟล็ก
Bit no.b in r <- 1.
SET
b, (HL)
ไม่มีผลกับแฟล็ก
Bit no.b in (HL) <- 1.
SET
b, (IY+d)
ไม่มีผลกับแฟล็ก
Bit no.b in (IY + d) <- 1.
SET
b, (IX + d)
ไม่มีผลกับแฟล็ก
Bit no.b in (IX + d) <- 1.

ตาราง 14-3 คำสั่งกำหนดให้ค่าของบิตที่ b เป็น 0

Instruction
Source/Target
Flag
Operation
RES
b, r
ไม่มีผลกับแฟล็ก
Bit no.b in r <- 0.
RES
b, (HL)
ไม่มีผลกับแฟล็ก
Bit no.b in (HL) <- 0.
RES
b, (IY+d)
ไม่มีผลกับแฟล็ก
Bit no.b in (IY + d) <- 0.
RES
b, (IX + d)
ไม่มีผลกับแฟล็ก
Bit no.b in (IX + d) <- 0.

หมายเหตุ

r คือ B,C,D,E,H หรือ L
s คือ (HL), (IX + d), (IY + d), B,C,D,E,H หรือ L
b คือ หมายเลขหลักของบิตที่เราต้องการ อันได้แก่ 0,1,2,3,4,5,6 หรือ 7

ตัวอย่างโปรแกรมสำหรับ ET-BOARD V6 เป็นดังนี้เลยครับ

ผลลัพธ์ที่ได้สำหรับ Et-BOARD V6 เป็นดังนี้

,

ตัวอย่างโปรแกรมสำหรับ ET-BOARD V3 เป็นดังนี้เลยครับ

ผลลัพธ์ที่ได้สำหรับ Et-BOARD V3.5 เป็นดังนี้

,

ส่วนหลักการทำงานของโปรแกรม ก็มีอยู่ว่า เรากำหนดให้ A มีค่าจาก 7 ไปยัง 0 แล้วเราก็ตรวจสอบว่า บิตแรกของ A (บิตหมายเลข 0) นั้นถ้าเป็น 1จะทำการ RES บิต 3 และ 7 ของ Register D แต่ถ้าเป็น 0 จะทำการ SET บิต 3 และ 7 ของ D แล้ว จึงนำค่าของ D ไปแสดงที่พอร์ตของ Z80 (เราใช้ LED เป็นส่วนแสดงผล) ดังนั้น ผลที่ได้ก็คือ ถ้าบิต 0 ของ A เป็น 1 ที่ LED จะดับทั้งหมด แต่ถ้าค่าบิต 0 ของ A เป็น 0 ที่ LED จะสว่างเพียง 2 ดวง ดังรูปด้านบนนั่นเองครับ ... มาดู Flowchart กันครับ

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



เขียนโดย : ศุภชัย บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง : ๑๖ เม.ย. ๒๕๔๔