[ บทความ : มาเขียนโปรแกรมกับ 68HC11 กันเถอะ ตอนที่ 6 ]  การถ่ายโอนข้อมูลขนาด 16 บิต

 

                  ในบทความที่ 5 ผมได้อธิบายคำสั่งการเคลื่อนย้ายข้อมูลไปแล้ว แต่คำสั่งดังกล่าวนั้น ใช้ได้กับข้อมูลขนาด 8 บิต เท่านั้น ดังนั้น ในบทความนี้ จะเป็นการเคลื่อนย้ายข้อมูลขนาด 16 บิต  … เอาล่ะ ลุย :D

 จุดประสงค์

            เรียนรู้ คำสั่งการถ่ายโอนข้อมูลแบบ 16 บิต อันได้แก่ LDD, LDX, LDY, LDS, STD, STX, STY, STS, XGDX, XGDY, TSX, TSY, TXS และ TYS

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

             คำอธิบายผมก็จะเหมือนเดิมครับ คือ มี3 หัวข้อคือ  รูปแบบของการเขียน , ผลที่เกิดต่อ CCR หลังจากที่คำสั่งนั้น ๆ ได้ประมวลผลไปแล้ว และ คำอธิบายสั้นๆ เพื่อบอกว่า คำสั่งนั้น มีการทำงานอย่างไร

LDD

รูปแบบ LDD                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า ณ ตำแหน่ง M ไปเก็บในเรจิสเตอร์ A และข้อมูล ณ ตำแหน่ง M+1  ไปเก็บใน เรจิสเตอร์ B
   

LDX

รูปแบบ LDX                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า ณ ตำแหน่ง M:M+1 ไปเก็บใน เรจิสเตอร์ IX
   

LDY

รูปแบบ LDY                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า ณ ตำแหน่ง M:M+1 ไปเก็บใน เรจิสเตอร์ IY
   

LDS

รูปแบบ LDS                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า ณ ตำแหน่ง M:M+1 ไปเก็บใน เรจิสเตอร์ SP ซึ่งเรจิสเตอร์ตัวนี้ จะมีหน้าที่ชี้ไปยังตำแหน่งเริ่มต้นของหน่วยความจำแบบ สแต็ก 
   
STD
รูปแบบ STD                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า  ในเรจิสเตอร์ A ไปเก็บในหน่วยความจำ ณ ตำแหน่ง M และนำค่าจาก เรจิสเตอร์ B ไปเก็บในหน่วยความจำตำแหน่ง M+1 
   
STX  
รูปแบบ STX                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า  ในเรจิสเตอร์ IX ไปเก็บในหน่วยความจำ ณ ตำแหน่ง M:M+1
   
STY
รูปแบบ STY                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า  ในเรจิสเตอร์ IY ไปเก็บในหน่วยความจำ ณ ตำแหน่ง M:M+1
   
STS
รูปแบบ STS                M
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า  ในเรจิสเตอร์ SP ไปเก็บในหน่วยความจำ ณ ตำแหน่ง M:M+1
   
XGDX
รูปแบบ XGDX
ผลต่อ CCR N, Z, V=0
หน้าที่   คำสั่งนี้จะนำค่า  ในเรจิสเตอร์ D สลับกับค่าใน เรจิสเตอร์ IX
   
XGDY
รูปแบบ XGDY
ผลต่อ CCR N, Z, V=0 
หน้าที่   คำสั่งนี้จะนำค่า  ในเรจิสเตอร์ D สลับกับค่าใน เรจิสเตอร์ IY
   
TSX
รูปแบบ TSX   
ผลต่อ CCR ไม่มีผลกับ CCR
หน้าที่   คำสั่งนี้จะนำค่า (SP+1) ไปเก็บในเรจิสเตอร์ IX
   
TSY
รูปแบบ TSY 
ผลต่อ CCR ไม่มีผลกับ CCR
หน้าที่   คำสั่งนี้จะนำค่า (SP+1) ไปเก็บในเรจิสเตอร์ IY
   

TXS

รูปแบบ TXS  
ผลต่อ CCR ไม่มีผลกับ CCR
หน้าที่   คำสั่งนี้จะนำค่า (IX-1) ไปเก็บในเรจิสเตอร์ SP
   
TYS
รูปแบบ TYS 
ผลต่อ CCR ไม่มีผลกับ CCR 
หน้าที่   คำสั่งนี้จะนำค่า (IY-1) ไปเก็บในเรจิสเตอร์ SP
   

 

ตัวอย่างโปรแกรม

ข้อมูลใน .ASM

 

; Filename  : hc11w04.asm

; Author    : Supachai Budsaratij

; Assembler : Cross-32 version 4

 

        CPU     "68HC11.TBL"

        HOF     "MOT8"

 

PORT_C: EQU     1003h

DDRC:   EQU     1007h

 

        ORG     0000h

DAT:    DFB     0AAh

DAT1:   DFB     055h

 

        ORG     0F800h

MAIN:

        LDS     #00Fh

        LDAB    #0FFh

        STAB    DDRC

 

        LDD     0           ; A=0, B=0

        LDX     DAT         ; IX = AA55h

        XGDX                ; D = IX , IX = D

        STS     DAT         ; DAT:DAT1 = SP (00:0Fh)

        LDAA    DAT1        ; A = DAT1 (0Fh)

        STD     DAT         ; DAT = A, DAT1 = B

        LDD     DAT       

 

        STAA    PORT_C

MAIN_LOOP:

        BRA     MAIN_LOOP

 

        ORG     0FFFEh

        DWM     MAIN

 

        END

 

    สรุป

                 ตอนนี้ผมก็ได้อธิบายคำสั่งเกี่ยวกับการเคลื่อยย้ายข้อมูลไปเรียบร้อยแล้วครับ ในตอนหน้าจะเป็น การเคลื่อนย้าย ข้อมูลอีกรูปแบบหนึ่ง ซึ่งเป็นการเคลื่อนย้ายข้อมูล โดยใช้โครงสร้างข้อมูลแบบสแต็ก ในการทำงาน

                สุดท้ายนี้ขอให้มีความสุขกับการเขียนโปรแกรมครับ … สวัสดีครับ

  


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