Tập lệnh asembly, tóm tắt chức năng
Trang 1BOOK n o 03.02
G i đ n: Đoàn Hi p, DMĐ, ĐTA, MTĐ, www.picvietnam.com
N i dung: T p l nh PIC Midrange
s trình bày d i kia, c t th 3 là tham s th nh t c a l nh, c t th t là tham s th hai c a
l nh Gi a tham s th nh t và tham s th 2 luôn cách nhau m t d u ph y (,) Các c tđ ccách nhau b ng ít nh t m t ký t TAB (kho ng tr ng r ng).Đ dài c a kho ng tr ng này có
th đ c quy đ nh sao cho d nhìn v i ng i l p trình.Gi a c t th 3 và c t th t không c n
có kho ng TAB Nh ngđ d dàng cho vi c đ c l i ch ng trình, chúng ta v n nên dùngkho ng TAB gi a hai c t này
N uđ m c đ nh nh khi cài đ t MPLAB, chúng tôi đ ngh s d ng hình th c nh sau:
tab - tab
[nhan] LENH thamso_1, thamso_2 :++++++++; :++++++++; :++++++++;
Chúng ta ph i vi t sao cho ch ng trìnhđ c vi t ph i phân bi t rõ thành t ng c t, v a
Trang 2[nhãn] đ c vi t trong c t th nh t c a dòng l nh [nhãn] không đ c b t đ u b ng các ký
t đ c bi t nh : *,&, kho ng tr ng, các con s (0,1,2…)… Gi a các ký t c a nhãn cễng không
đ c có các ký t đ c bi t *,^, kho ng tr ng,…
Đ dài c a m t [nhãn] không gi i h n, tuy nhiên, chúng ta ph i vi t sao cho [nhãn] luôn
n m trong c t th nh t c a dòng l nh,đ dài nhãn v a ph i đ d quan sát, đ thông tin g i
nh và thu n ti n khi l p trình
Chúng ta hoàn toàn có th ký hi u các [nhãn] là NHAN_1, NHAN_2… nh ng n i dung
thông tin c a nhãn khôngđ đ th hi n công vi c s đ c th c hi n, nh v y s r t khó nhkhi l p trình, nh t là khi ch ng trình c a các b n dài và cóđ n hàng ch c hàng trăm nhãntrong ch ng trình
2_hello nhãn sai (b t đ u b ng m t con s )
good^bye nhãn sai (có ký t đ c bi t trong nhãn)
bon jour nhãn sai (có kho ng tr ng trong nhãn)
welcome nhãn sai (b t đ u nhãn b ng ký t tr ng)
1.2 L NH và các tham s :
L NH là tên c a các l nh g i nh đ c li t kê theo b ng ch cái ABC bên d i L NH
đ c vi t vào c t th hai, m i dòng l nh ph i có tên L NH, n u không có thì s không bi tdòng l nhđó làm vi c gì L NH th hi n công vi c ph i làm c a dòng l nh
Tùy theo L NH mà có th có tham s 1 và tham s 2, ho c ch có tham s 1, ho c không cótham s nào h t Trong m t dòng l nh, ph i vi tđ tham s c a L NH đó
T p l nhđ c cung c p phía cu i ch ng Ý đ nh c a chúng tôi là trình bày song song t p
l nh và ph n chú gi i nàyđ các b n d đ i chi u, so sánh, tuy nhiên, t gi y cu n sách không
th g p làmđôi, chính vì th chúng tôi đ ngh các b n photo ho c in thêm m t b ng t p l nhdán lên tr c bàn làm vi cđ v a đ c ph n này v a so sánh, và khi l p trình có th d dàngtra c u
Trang 3W = Working register: thanh ghi W.
F = File register: thanh ghi F
d = destination (đích): n u d=0, k t qu c t vào W N u d=1, k t qu c t vào F.
k = Literal value: là s 8 bit ho c m t đ a ch trong b nh ch ng trình 11 bit
b = bit address : đ a ch c a bit trong 1 byte ( thanh ghi) nào đó.
1.3.1 Thanh ghi W:
Chúng ta th y r ng, b n ch t c a các dòng l nhđ c th c hi n trên máy tính là các phéptoánđ c thao tác trên các thanh ghi Do v y, b t k m t câu l nh nào cễng s th c hi n m tphép toán nàođó, và k t qu c a phép toán đó ph i đ c s d ng cho các l nh ti p theo, n ukhông dòng l nhđó tr nên m t dòng l nh vô nghĩa
Ngo i tr l nh NOP là l nh không th c hi n thao tác gì và t nđi m t chu k máy, nh ng
nó có tác d ngđ cân b ng th i gian th c hi n các đo n ch ng trình t ng đ ng Chúng ta
s nói v vi c cân b ng th i gian th c hi n ch ng trình b ng l nh NOP trong các ph n v gi ithu t l p trình phía sau
V nđ chúng tôi đ c p đây, đó là vi c tính toán s đ c x y ra nh th nào bên trong vi
đi u khi n N u các b n là ng i đã h c l p trình Pascal, C, ho c các ngôn ng c p cao khác,các b n s th y r ng khi th c hi n phép toán c ng hai bi n b và c, sauđó gán vào bi n a, các
b n có th làm m t cách tr c ti p nh sau:
Trang 4a: = b + c;
Tuy nhiên, vi c nàyđ i v i PIC không th th c hi n đ c, mà chúng ta ph i th c hi n theo
t ng b c nh sau, chuy n b vào thanh ghi W, sauđó l y W c ng v i c, r i gán l i vào thanhghi W, sauđó m i chuy n k t qu vào a Công vi c đ c th c hi n b ng m t chu i l nh sau:
Nh v y, đây, PIC ch cho phép trong m t th i đi m t ng tác v i 1 thanh ghi (hay m t
bi n) N u c n có s t ng tác gi a hai hay nhi u thanh ghi, ph i thông qua thanh ghi W nh
là m t thanh ghiđ m Chính vì v y, c có m t l nh t ng tác v i thanh ghi, thì d ng nh s
có m t l nh t ng ng t ng tác v i thanh ghi W
Ví d :t p l nh t ng tác thanh ghi W
ANDLW: W = W and k ANDWF: d = W and F
CLRW: xóa thanh ghi W CLRF: xóa thanh ghi F
IORLW: W = W or k IORWF: d = W or F
MOVWF: F = WSUBLW: W = k – W SUBWF: d = F – W
XORLW: W = W xor k XORWF: d = W xor F
1.3.2 Đích d:
Ngoài ra, các b n có th th y r ng d ch có th là 0, ho c 1 Khi d = 0, có nghĩa là k t qu l i
đ c l u vào thanh ghi W Nh v y, thanh ghi W v a có th coi là m t thanh ghi t m, l i v a
có th coi là m t thanh ghi ho tđ ng liên t c trong quá trình ch y ch ng trình c a b n B ncễng luôn luôn nh r ng t i m i th i đi m th c hi n m t dòng l nh, ch đ c phép thao tác
v i m t thanh ghi duy nh t, và (ho c) thanh ghi W Không có m t l nh nào cho phép t ngtác v i hai thanh ghi khác nhau mà m t trong hai thanh ghiđó không ph i thanh ghi W Đi u
th hai c n ghi nh ,đó là c có m t l nh t ng tác v i thanh ghi W, thì s có m t l nh t ng
Trang 5ng t ng tác v i thanh ghi (bi n) F.Đi u ng c l i không đúng Nh ng n u có m t l nh nào
t ng tác v i thanh ghi F, thì k t qu đ u có th đ c ghi vào thanh ghi W ho c thanh ghi F.Hãy chú ý t i c t bên ph i c a b ng trên d (đích) có th là thanh ghi W ho c thanh ghi F
L u ý: Chúng ta hòan toàn có th thay th d t ng ng v i 0 là W và 1 là F đ d nh Ch ng trình d ch MPASM cho phép ghi nh v y.
Ví d : hai câu l nh này là t ngđ ng
C hai câu l nh nàyđ u tăng BIEN_1 lên 1 đ n v và c t giá tr tăng lên đó vào l i BIEN_1
N u vi t b ng Pascal, câu l nh trên s nh sau :
BIEN_1 : = BIEN_1 + 1 ;
1.3.3 Đ a ch bit b:
Đi u chúng ta s quan tâm đây là tham s b trên Tham s b ch xu t hi n trong 4 l nh
t ng tác bit : BCF, BSF, BTFSS, BTFSC Tham s này ch có giá tr 0, 1, 2, 3, 4, 5, 6, 7 Ngoài rakhông th mang b t k m t giá tr nào khác Vì sao nh v y ? Vì chúng tađang làm vi c v i vi
đi u khi n PIC 8 bit, có nghĩa là d li u đ c tính toán trong vi đi u khi n ch có 8 bit và đ cđánh s nh sau :
Thanh ghi F :
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Chính vì v y, ch s b là v trí bit, cho nên ch có th mang giá tr t 0đ n 7 Các b n xem ví
d sau :
Ví d :Quan sát thanh ghiđ c đ t tên là A có giá tr 10110110
Sau khi th c hi n l nh này, thanh ghi A s có giá tr : 10010110
Sau khi th c hi n l nh này, thanh ghi A s có giá tr : 11010110
Trang 61.3.4 Chú thích:
À, và m tđi u n a xu t hi n, đó là các b n th y sau khi chúng tôi vi t dòng l nh ví d trênđây, phía bên ph i, chúng tôi đánh d u « ; » và vi t m t s ghi chú cho câu l nh Đây là m tchu nđúng ch không ph i chúng tôi vi t chú thích cho cu n sách mà vi t thêm vào
MPASM cễng nh các ngôn ng l p trình khác, cho phép ng i l p trình vi t chú thíchcho m i dòng l nh ho c m tđo n các dòng l nh đ sau này d ki m tra, s a ch a, ho c giúpcho ng i khác có th đ c đ c d dàng h n các n i dung mình vi t
T t c các chú thíchđ u ph i n m trên m t dòng và n m sau d u ch m ph y trên dòng đó
N u chú thích nào dài h n m t dòng thì ph i có d u ch m ph y đ u các dòng bên d i
CONG MOVF b, W ; chuy n giá tr t thanh ghi b vào W
ADDWF c, W ; c ng giá tr W và c, ghi l i vào W
V nđ n y sinh v i vi c vi t chú thích đó là ph i vi t làm sao v a đ đ có th d dàng
ki m tra l i sau này, và không vi t quá nhi u s ph i m t nhi u th i gian vi t chú thích h n là
vi t l nh th c thi Ch ng h n ví d v vi c vi t chú thích nh trên kia là quá th a, và chúng takhông c n ph i vi t quá nhi u nh th
Hãy th vi t th này thì sao?
Trang 7Ch đ n gi n nh v y thôi, b n s đ m t công vi t chú thích, và s cung c p đ n i dungcho b n khi b nđ c l i ch ng trình Vi t chú thích theo nh trong cu n sách T h c VisualC++ trong 21 ngày cễng chính là m t ngh thu t Vì v y, các b n cễng nên t p vi t chú thíchcho hi u qu đ i v i MPASM Trong quá trình th c hi n các bài t p, chúng tôi s c g ngtruy n cho b n các ý t ng khi vi t chú thích, và chúng tôi mong các b n ti p nh n nó, và s
d ng nóđ chúng ta s có cùng m t h th ng vi t chú thích, t đó v sau chúng ta s d đ c
và hi u nhau h n
Cu i cùng, chúng tôiđ a ra m t vài con s th ng kê mà có th nó s giúp ích cho các b n
d hình dung trong quá trình h c t p l nh c a PIC T ng c ng dòng PIC Mid Range có 35
l nh M i l nh th ng chi m 1 chu k máy, tr các l nh v đi u khi n con tr ch ng trình
Có 16 l nh t ng tác byte (bao g m thanh ghi F b t k và thanh ghi W), ch có 4 l nh t ng tác bit và 15 l nh đi u khi n.
2 Đ dài mã l nh và chu k máy
Nh n th y m t th c t r ng, các b n sinh viên m i làm quen v i viđi u khi n th ng l m
l n v hai khái ni m s chu k máy th c hi n l nh vàđ dài mã l nh Do đó, trong ph n này,chúng tôi ch c g ng gi i thích s quađ các b n có th phân bi t hai v n đ trên th t rõ ràng
2.1 Chu k máy
Xuyên su t t p tài li u này, chúng tôi ch mu n h ng d n các b n m t cách t o ra dao
đ ng cho PIC b ng th ch anh b i vì nh ng cách t o dao đ ng khác đ u có s n trong datasheet.(ch a vi t xong)
2.2 Đ dài mã l nh
Đ dài mã l nh c a dòng PIC midrange là 14 bit và đ c đánh s nh sau:
Hình 1: Mã l nh c a dòng PIC midrange
Cễng nh chúng ta đã nói trên, t p l nh PIC midrange có th đ c chia thành 3 lo i ch
y u, l nh t ng tác byte, l nh t ng tác bit và các l nhđi u khi n S khác nhau c a các l nhnày là gì?
Các b n chú ý r ng, v i l nh t ng tác byte, thì chúng ta luôn có 2 thông s là F và d, trong
đó F là đ a ch thanh ghi, hay nói ng n g n là thanh ghi, và d là bit đ ch n xem k t qu đ c
Trang 8l u ng c l i vào F hay l u ra W Trong khiđó, l nh t ng tác bit c n có 3 bit đ mã hoá v trí
c a bit trong m t thanh ghi nàođó (t 0 đ n 7, nghĩa là t 000 đ n 111)
V i các l nhđi u khi n và tính toán, thì chúng ta có các giá tr 8 bit k (t 0 đ n 255), và hai
l nhđ c bi t CALL và GOTO thì giá tr k là 11 bit (t 0 đ n 2047)
Chúng ta s xem xét cách t ch c mã l nh c a dòng PIC midrange các m c d iđây
Hình 2: Mã l nh c a các l nh t ng tác byte
Các b n chú ý m tđi u r ng, đ a ch c a m t thanh ghi, ch có 7 bit thôi, và n m t bit 0
đ n bit 6 M i thanh ghi m c dù có 8 bit, nh ng đ a ch c a nó ch có 7 bit
Ph n OPCODE đây là gì? Chính là ph n mã hoá c các l nh mà chúng ta vi t nh
ADDWF, ANDWF,… Khi vi t nh th này, là chúng ta vi t b ng các mã g i nh , trong khi
đó, vi đi u khi n hi u các l nh này d i d ng bit Vì v y, nó ph i đ c mã hoá đ vi đi ukhi n hi u
M tđi m l u ý là đ i v i các l nh t ng tác byte, ph n mã hoá c a nó dài 6 bit, n m t bit
8đ n bit 13 Trong đó, bit12 – bit13 = 00 (nh hình 2.2)
K t qu , chúng ta th y r ng, ph n OPCODE có 6 bit, nh ng hai bitđ u tiên đã là 00, chính
vì v y, ch còn l i 4 bitđ phân bi t các l nh v i nhau và chúng ta ch có t i đa 16 l nh t ng tác byte
Hình 3: Mã l nh c a các l nh t ng tác bit
T ng t nh trên, bit quyđ nh đ a ch c a thanh ghi F trong các l nh t ng tác bit là 7 bit,
n m t bit 0đ n bit 6 Các bit n m t bit 7 đ n bit 9 dùng đ quy đ nh v trí c a bit t 0 đ n 7trong thanh ghi (nghĩa là t 000 đ n 111)
Trang 9Ph n OPCODE c a các l nh t ng tác bit có mã hoá b tđ u b ng 01 ng v i bit 12 và 13.Chính vì v y, ph n còn l iđ phân bi t các l nh khi mã hoá ch còn l i 2 bit, nên ch có th mãhoáđ c 4 l nh Do đó, chúng ta th y r ng ch có 4 l nh t ng tác bit là BCF, BSF, BTFSC và BTFSS.
m t thanh ghi và 1 bit d dùngđ ch n v trí đích c a phép tính
Hai bit 12 và 13 c a nhóm l nh nàyđ c m c đ nh là 11 Ph n OPCODE 6 bit ch còn l i 4bitđ phân bi t các l nh trong nhóm này Tuy nhiên, trong nhóm l nh này, ng i ta không
dùng h t 16 l nh mà ch dùng 6 l nh là: ADDLW, ANDLW, IORLW, MOVLW, SUBLW và XORLW
Các l nhđi u khi n đ c bi t, là các l nh không t ng tác v i các thanh ghi có đ a ch trong
b nh d li u, bao g m các l nh: CLRWDT, NOP, RETURN, RETFIE, SLEEP
Trang 10Các l nh này vì không ch a các thanh ghi trong mã l nh, nên ph nđ u OPCODE c a nó s
là 000000 (6 bit t bit 13đ n bit 8 đ u là 0) Nh hình sau:
Trang 11Trong ph n t p l nh này, ph n ghi chú cho m i l nh là r t quan tr ng Nó là ph n chúngtôi mu n trình bày v
(ch a vi t xong)
Trang 12[nhãn] ADDLW k ; N i dung c a thanh ghi W
b n vi t h’XX’ ho c 0xXX
Ví d : d’50’, d’103’, b’01101101’, b’11011011’, h’C3’, 0xA8, 0x44 …
Dòng PIC mà chúng ta tìm hi u là các MCU 8 bit Do v y, không th nào m t thanh ghi
d li u có th ch a m t s mà giá tr c a nó l n h n giá tr có th th hi n b ng 8 bit
Nh c l i r ng, m t s 8 bit ch có th th hi n m t s nh phân t b’00000000’ đ nb’11111111’, hay m t s th p phân t d’0’ đ n d’255’ và s th p l c phân t 0x00 đ n0xFF M t khi phép toán c ng làm tràn 8 bit, nó ch có th gi l i k t qu là 8 bit, còn giá
tr tràn s b b qua Tuy nhiên, các bit tr ng thái C, Z, DC s báo cho chúng ta bi t r ngthanh ghi b tràn
Trang 13[nhãn] ADDWF F, d ; N i dung c a thanh ghi W
; đ c c ng v i n i dung c a thanh ghi F,
BIEN_2 RES 2 ;0x20 Hay nói cách khác, BIEN chính là
; thanh ghi cóđ a ch 0x20 Cách này dùng đ
;đ t tên cho hàng lo t bi n liên ti p nhau
; BIEN_2 s cóđ dài2 byteb tđ u t 0x21
Cách th hai dùng cblock Cách th ba dùng #DEFINE đ đ t tên cho h ng s ho c đ ttên cho bi n có đ a ch đ c đ nh s n Hai cách sau chúng ta s nh c t i trong ph nDIRECTIVE
Trang 14[nhãn] ANDLW k ; “And” n i dung c a thanh ghi W
Z thay đ i khi và ch khi k t qu đ c tr v có giá tr b’00000000’ Các b n ghi nh nó
m t cách r tđ n gi n Z = ZERO Khi k t qu c a m t phép tính toán nào đó b ng
ZERO thì bit Z = 1, và n u không ph i là ZERO thì bit Z = 0.
Trang 15[nhãn] ANDWF F, d ; N i dung c a thanh ghi W
; đ c and v i n i dung c a thanh ghi F,
Z thay đ i khi và ch khi k t qu đ c tr v có giá tr b’00000000’ Các b n ghi nh nó
m t cách r tđ n gi n Z = ZERO Khi k t qu c a m t phép tính toán nào đó b ng
ZERO thì bit Z = 1, và n u không ph i là ZERO thì bit Z = 0.
Trang 16[nhãn] BCF F, b ; Xoá bit th b c a thanh ghi F
Trang 17[nhãn] BSF F, b ; Đ t bit th b c a thanh ghi F
Trang 18[nhãn] BTFSC F, b ; N u bit th b c a thanh ghi F
FALSE_3 GOTO LAMVIEC_1 ; b qua l nh này, th c hi n NOP TRUE_3 GOTO LAMVIEC_2 ; th c hi n l nh này goto LAMVIEC_2
K t qu : Th c hi n l nh nhãn TRUE_3, ch không th c hi n l nh nhãn
FALSE_3
Các b n xem ti p thí d này
Ban đ u: REG = b’11000111’
FALSE_4 BCF REG, 0 ; th c hi n l nh này REG(0) = 0
TRUE_4 GOTO LAMVIEC_2 ; th c hi n l nh này goto LAMVIEC_2
K t qu : REG = b’11000110’, sauđó l nh nhãn TRUE_4 v n đ c th c hi n ti ptheo
Ghi chú:
N u nh l nh ki m tra là sai, có nghĩa bit b c a thanh ghi F là 1, l nh ti p theo s đ c
th c hi n nh trong ví d BIT_4 Khiđó, l nh BTFSC ch t n 1 chu k máy
Tuy nhiên, n u k t qu ki m tra là đúng, có nghĩa là bit b c a thanh ghi F là 0, thay vì
th c hi n l nh ti p theo nh ví d BIT_4, nó s th c hi n m t l nh NOP (không làm gì
c ), sauđó nó nh y xu ng TRUE_3 gi ng nh thí d BIT_3
Chính vì th c hi n m t l nh NOP, cho nên trong tr ng h p ki m trađúng, chúng ta
có th coi nh l nh BTFSC t n 2 chu k máy, và trong tr ng h p ki m tra không
đúng, nó v n ch t n 1 chu k máy.
Trang 19[nhãn] BTFSS F, b ; N u bit th b c a thanh ghi F
FALSE_5 GOTO LAMVIEC_3 ; b qua l nh này, th c hi n NOP TRUE_5 GOTO LAMVIEC_4 ; th c hi n l nh này goto LAMVIEC_4
K t qu : Th c hi n l nh nhãn TRUE_5, ch không th c hi n l nh nhãn
FALSE_5
Các b n xem ti p thí d này
Ban đ u: REG = b’01000111’
FALSE_6 GOTO LAMVIEC_3 ; th c hi n l nh này goto LAMVIEC_3 TRUE_6 GOTO LAMVIEC_4 ; con tr đã nh y sang LAMVIEC_3
K t qu : Nh yđ n LAMVIEC_3
Ghi chú:
Ví d BIT_6 là m t ví d đi n hình trong l nh r nhánh đi u ki n N u ki m tra m t
đi u khi n nào đó đúng hay sai, b n s ki m tra m t bit đ bi t đúng hay sai Thông
th ng, vi c r nhánh này th ngđ c th c hi n v i các bit tr ng thái nh Z, DC, C…
Trang 20[nhãn] CALL k ; G i m t ch ng trình con
Th c hi n l nh: (PC) + 1 > TOS
k > PC(10:0) (PCLATH(4:3)) > PC(12:11)
Các bit tr ng thái b nh h ng: Không bit nào b nh h ng
Trang 21[nhãn] CLRF F ; N i dung c a thanh ghi W
Trang 22[nhãn] CLRW ; N i dung c a thanh ghi W
Trang 23[nhãn] CLRWDT ; N i dung c a thanh ghi W