Xem mẫu

  1. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. CHƯƠNG 3 T P L NH C A 8051 I. M ð U: Khuông d ng t ng quát c a m t dòng l nh: [LABEL:] MNEMONIC [OPERAND][,OPERAND]… [;COMMENT] o Nhãn (Label): bi u th ñ a ch c a dòng l nh (ho c d li u) theo sau, ñư c dùng trong trư ng toán h ng c a l nh nh y, l nh r nhánh (SJMP AAA; ACALL BBB; CJNE A, #35H, LOOP; JNB P3.1, TEST_1…). Lưu ý v nhãn: Do ngư i l p trình t ñ t (không ñư c trùng v i t khoá, mã g i nh , ch d n, toán t ho c ký hi u ti n ñ nh nghĩa). B t ñ u b ng ký t ch , d u ch m h i (?), d u g ch dư i (_). Dài t i ña 31 ký t . K t thúc b ng d u hai ch m (:). o Mã g i nh (Mnemonic): bi u di n các mã c a l nh ho c các ch d n c a chương trình d ch h p ng (Mã g i nh : ADD, SUBB, INC, …; Ch d n: ORG, EQU, DB, …). o Toán h ng (Operand): ch a ñ a ch ho c d li u mà l nh s s d ng. S lư ng toán h ng trong m t dòng l nh ph thu c vào t ng dòng l nh (RET – không toán h ng, INC A – m t toán h ng, ADD A, R0 – hai toán h ng, CJNE A, #12H, ABC – ba toán h ng). Lưu ý v toán h ng: trong các l nh có 2 toán h ng thì toán h ng ñ u tiên còn ñư c g i là toán h ng ñích (Destination), toán h ng th hai còn ñư c g i là toán h ng ngu n (Source). o Chú thích (Comment): làm cho rõ nghĩa cho chương trình. Các chú thích ph i n m trên cùng m t dòng và b t ñ u b ng d u ch m ph y (;). Các chú thích n u n m trên nhi u dòng thì m i dòng cũng ph i b t ñ u b ng d u ch m ph y (;). Lưu ý: Chi ti t v ph n này xem thêm t i “Chương 7: L p trình h p ng ” trong sách “H vi ñi u khi n – T ng Văn On”. Giáo trình Vi x lý. 39 Biên so n: Ph m Quang Trí
  2. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. II. CÁC KI U ð NH ð A CH (ADDRESSING MODE): 1. ð nh ñ a ch thanh ghi (Register Addressing): • ðư c dùng ñ truy xu t d li u trong các thanh ghi t R0 ñ n R7. • S byte c a l nh: 1 byte. • C u trúc l nh: • Ví d : ADD A, R5 ⇒ L nh c ng n i dung thanh ghi A v i n i dung thanh ghi R5. (Gi s : (A)=05H, (R5)=9AH). ⇒ Mã l nh: ⇒ Mô t l nh: • Ngoài ra, m t s trư ng h p ñ c bi t ki u ñ nh ñ a ch này cũng dùng ñ truy xu t d li u trong các thanh ghi như: thanh ghi ch a A, thanh ghi con tr d li u DPTR, thanh ghi b ñ m chương trình PC, c nh C và c p thanh ghi AB. • Ví d : INC A L nh tăng n i dung thanh ghi A. INC DPTR L nh tăng n i dung thanh ghi DPTR. 2. ð nh ñ a ch tr c ti p (Direct Addressing): • ðư c dùng ñ truy xu t d li u trong các ô nh (00H - FFH) hay trong các thanh ghi (A, B, P0–P3, DPH, DPL,…) c a b nh bên trong chip. • S byte c a l nh: 2 byte. • C u trúc l nh: Giáo trình Vi x lý. 40 Biên so n: Ph m Quang Trí
  3. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Ví d : ADD A, P1 ⇔ ADD A, 90H ⇒ L nh c ng n i dung thanh ghi A v i n i dung thanh ghi port 1 hay ô nh 90H. (Gi s : (A) = 05H, (P1) = (90H) = 9AH). ⇒ Mã l nh: ⇒ Mô t l nh: 3. ð nh ñ a ch gián ti p (Indirect Addressing): • ðư c dùng ñ truy xu t d li u trong các ô nh “gián ti p” c a b nh bên trong chip. Các thanh ghi R0 và R1 ñư c dùng ñ ch a ñ a ch c a các ô nh gián ti p (00H - FFH) trong chip. Lưu ý r ng, trư c các thanh ghi R0, R1 c n ph i có d u “@”. • S byte c a l nh: 1 byte. • C u trúc l nh: • Ví d : ADD A, @R0 ⇒ L nh c ng n i dung thanh ghi A v i n i dung ô nh có ñ a ch ch a trong thanh ghi R0. (Gi s : (A) = 05H, (R0) = 3BH, (3BH) = 9AH). ⇒ Mã l nh: ⇒ Mô t l nh: 4. ð nh ñ a ch t c th i (Immediate Addressing): • ðư c dùng ñ truy xu t m t h ng s (giá tr bi t trư c) thay vì là m t bi n (giá tr không bi t trư c) như các ki u ñ nh ñ a ch trên. Lưu ý r ng, trư c d li u t c th i c n ph i có d u “#”. Ch ñ ñ nh ñ a ch t c th i có th dùng ñ n p d li u vào m i ô nh và thanh ghi b t kỳ (ñ i v i thanh ghi 8 bit: #00H - #0FFH, ñ i v i thanh ghi 16 bit: #0000H - #0FFFFH). • S byte c a l nh: 2 byte. • C u trúc l nh: • Ví d : ADD A, #9AH ⇒ L nh c ng n i dung thanh ghi A v i giá tr 9AH. (Gi s : (A) = 05H). ⇒ Mã l nh: ⇒ Mô t l nh: Giáo trình Vi x lý. 41 Biên so n: Ph m Quang Trí
  4. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. 5. ð nh ñ a ch tương ñ i (Relative Addressing): • ðư c s d ng cho các l nh nh y. • ð a ch tương ñ i (hay offset) là m t giá tr 8 bit có d u. • T m nh y gi i h n là: -128 byte … 127 byte t v trí c a l nh ti p theo sau l nh nh y. • S byte c a l nh: 2 byte. • C u trúc l nh: • Ví d 1: SJMP AAA ⇒ L nh nh y ñ n nhãn AAA (Gi s : nhãn AAA ñ t trư c l nh ñ a ch 0107H, l nh SJMP n m trong b nh t i ñ a ch 0100H và 0101H). ⇒ Mã l nh: ⇒ Mô t l nh: xem hình 3.5.2.1. • Ví d 2: SJMP AAA ⇒ L nh nh y ñ n nhãn AAA (Gi s : nhãn AAA ñ t trư c l nh ñ a ch 203BH, l nh SJMP n m trong b nh t i ñ a ch 2040H và 2041H). ⇒ Mã l nh: ⇒ Mô t l nh: xem hình 3.2.5.2. 6. ð nh ñ a ch tuy t ñ i (Absolute Addressing): • ðư c s d ng cho các l nh ACALL và AJMP. • ð a ch tuy t ñ i là m t giá tr 11 bit. • T m nh y gi i h n là: trong cùng trang 2K hi n hành (trang 2K ch a l nh nh y). • S byte c a l nh: 2 byte. • C u trúc l nh: Giáo trình Vi x lý. 42 Biên so n: Ph m Quang Trí
  5. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Ví d : AJMP AAA ⇒ L nh nh y ñ n nhãn AAA (Gi s : nhãn AAA ñ t trư c l nh ñ a ch 0F46H, l nh AJMP n m trong b nh t i ñ a ch 0900H và 0901H). ⇒ Mã l nh: ⇒ Mô t l nh: FFFFH 2K trang 31 0FFFH F800H F800H AAA 0F46H 1800H 32 x 2K 17FFH (64K) 2K trang 2 2K trang 1 1000H 0FFFH 0901H 46H 2K trang 1 AJMP AAA 0900H E1H 0800H 07FFH 2K trang 0 0000H 0800H Baûn ñoà nhôù 64K ñöôïc chia thaønh 32 trang 2K A15 A11A10 A0 Caùch thaønh laäp 5 bit xaùc ñònh 11 bit xaùc ñònh ñòa chæ trong ñòa chæ cuûa trang 2K 1 trang 2K nhaõn seõ nhaûy tôùi Töø 5 bit (A15...A11) Töø 11 bit (A10...A0) trong trong thanh ghi PC leänh nhaûy 7. ð nh ñ a ch dài (Long Addressing): • ðư c s d ng cho các l nh LCALL và LJMP. • ð a ch dài là m t giá tr 16 bit. • T m nh y gi i h n là: toàn b không gian nh 64K. • S byte c a l nh: 3 byte. • C u trúc l nh: Giáo trình Vi x lý. 43 Biên so n: Ph m Quang Trí
  6. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Ví d : LJMP AAA ⇒ L nh nh y ñ n nhãn AAA (Gi s : nhãn AAA ñ t trư c l nh ñ a ch A209H, l nh LJMP n m trong b nh t i ñ a ch 0100H, 0101H và 0102H). ⇒ Mã l nh: FFFFH AAA A209H 64K 0102H 09H LJMP AAA 0101H A2H 0100H 12H 0000H ⇒ Mô t l nh: 8. ð nh ñ a ch ch s (Indexed Addressing): • ðư c dùng trong các ng d ng c n t o các b ng nh y hay các b ng tìm ki m. Ki u ñ nh ñ a ch này dùng m t thanh ghi n n (PC hay DPTR) k t h p v i m t offset (A) ñ t o thành d ng ñ a ch hi u d ng cho l nh. • S byte c a l nh: 1 byte. • C u trúc l nh: • Ví d : JMP @A+DPTR ⇒ L nh nh y gián ti p. Giáo trình Vi x lý. 44 Biên so n: Ph m Quang Trí
  7. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. III. T P L NH C A 8051 (8051 INSTRUCTION SET): M t s ký hi u dùng trong l nh: Rn ð a ch thanh ghi s d ng (R0 – R7). direct ð a ch tr c ti p c a m t byte trong RAM n i (00H-FFH) @Ri ð a ch gián ti p s d ng (R0 ho c R1). source Toán h ng ngu n (Rn, direct ho c @Ri). dest Toán h ng ñích (Rn, direct ho c @Ri). #data H ng s 8 bit (#00H - #0FFH). #data16 H ng s 16 bit (#0000H - #0FFFFH). bit ð a ch tr c ti p c a m t bit (ñ a ch bit). rel Offset 8 bit có d u. addr11 ð a ch 11 bit. addr16 ð a ch 16 bit. ← ðư c thay th b i … () N i dung c a … (( )) N i dung ñư c ch a b i … rrr Thanh ghi c a dãy thanh ghi (000 = R0, 001 = R1, …, 111 = R7). i ð a ch gián ti p s d ng R0 (i = 0) ho c R1 (i = 1). dddddddd Các bit d li u. aaaaaaaa Các bit ñ a ch . eeeeeeee ð a ch tương ñ i. M t s lưu ý khi l p trình b vi ñi u khi n 8051: • ð thông báo ñó là m t giá tr t c th i thì c n ph i ñ t thêm ký hi u “#” vào trư c giá tr ñó. N u không có ký hi u “#” thì giá tr ñó ñư c hi u là ñ a ch c a ô nh . MOV A, #12H ;N p giá tr 12H vào thanh ghi A. MOV A, 12H ;Sao chép n i dung c a ô nh có ñ a ;ch 12H vào thanh ghi A. ñây ta cũng nên lưu ý r ng n u thi u ký hi u “#” thì l nh trên cũng không gây ra l i trong quá trình biên d ch. Vì trình d ch h p ng cho ñó là m t l nh h p l . Tuy nhiên, k t qu l p trình s không ñúng như ý mu n c a ngư i l p trình. • Các giá tr t c th i n u có thành ph n ch (A, B, C, …, F) ñ ng ñ u thì c n ph i thêm s 0 vào trư c thành ph n ch và sau ký hi u “#”. Vi c này ñ báo r ng thành ph n ch ñó là m t s HEX ch không ph i là m t ký t . MOV A, #BH ;Thi u s 0 → gây l i khi biên d ch. MOV A, #0BH ;Thêm s 0 → ñúng. MOV A, #F9H ;Thi u s 0 → gây l i khi biên d ch. MOV A, #0F9H ;Thêm s 0 → ñúng. Giáo trình Vi x lý. 45 Biên so n: Ph m Quang Trí
  8. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. ñây ta cũng nên lưu ý r ng vi c thi u s 0 thêm vào này s gây l i trong quá trình biên d ch ñ i v i các chương trình biên d ch cũ. Ngày nay, m t s ph n m m biên d ch ñã h tr vi c này. ði u này có nghĩa là ta có th thêm hay không thêm s 0 vào thì ñ u không nh hư ng gì ñ n quá trình biên d ch (không gây ra l i khi biên d ch). • Trong l nh, các giá tr t c th i hay ñ a ch c a ô nh có th ñư c bi u di n dư i b t kỳ d ng nào BIN (nh phân), DEC (th p phân) hay HEX (th p l c phân). o ð a ch ô nh : các câu l nh sau ñây là tương ñương nhau: MOV A, 64H ;Sao chép n i dung c a ô nh có ñ a ;ch 64H vào thanh ghi A. MOV A, 100 ;Sao chép n i dung c a ô nh có ñ a ;ch 64H vào thanh ghi A. MOV A, 01100100B ;Sao chép n i dung c a ô nh có ñ a ;ch 64H vào thanh ghi A. o Giá tr t c th i: các câu l nh sau ñây là tương ñương nhau: MOV A, #0C9H ;N p giá tr C9H vào thanh ghi A. MOV A, #201 ;N p giá tr C9H vào thanh ghi A. MOV A, #11001001B ;N p giá tr C9H vào thanh ghi A. Lưu ý các h u t ñi kèm tương ng cho t ng d ng: B – d ng BIN (nh phân), H – d ng HEX (th p l c phân), D ho c không có h u t – d ng DEC (th p phân). • Chuy n m t giá tr t c th i hay ñ a ch c a ô nh l n hơn kh năng ch a c a m t thanh ghi thì s gây ra l i (00H-FFH: cho thanh ghi ho c ô nh 8 bit; 0000H-FFFFH: cho thanh ghi 16 bit - DPTR). MOV A, #123H ;Không h p l vì 123H > FFH. MOV A, #214 ;H p l vì 214 (D6H) < FFH (255). MOV A, #0F2H ;H p l vì F2H < FFH. MOV A, 123H ;Không h p l vì 123H > FFH. MOV A, 200 ;H p l vì 200 (C8H) < FFH (255). MOV DPTR, #123H ;H p l vì 123H < FFFFH (16 bit). 1. Nhóm l nh s h c: 1.1. L nh ADD A, : • Ch c năng: C ng (Add). • Mô t : ADD c ng n i dung c a thanh ghi A (A) v i n i dung c a m t byte có ñ a ch ñư c ch ra trong l nh (src- byte) và ñ t k t qu vào thanh ghi A. Các c b nh hư ng. o C CY = 1 n u có s nh t bit 7. Ngư c l i CY = 0. o C AC = 1 n u có s nh t bit 3. Ngư c l i AC = 0. o C OV = 1 n u có s nh t bit 6 nhưng không có s nh t bit 7 ho c n u có s nh t bit 7 nhưng không có s nh t bit 6. Ngư c l i OV = 0. o Khi c ng hai s nguyên không d u và có d u: S không d u: CY = 1 Phép toán có nh . S có d u: CY = 1 S dương = S âm + S âm. S âm = S dương + S dương. Giáo trình Vi x lý. 46 Biên so n: Ph m Quang Trí
  9. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Các d ng l nh: ADD A, Rn S byte 1 S chu kỳ 1 Mã ñ i tư ng 00101rrr Ho t ñ ng (A) ← (A) + (Rn) ADD A, direct S byte 2 S chu kỳ 1 Mã ñ i tư ng 00100101 aaaaaaaa Ho t ñ ng (A) ← (A) + (direct) ADD A, @Ri S byte 1 S chu kỳ 1 Mã ñ i tư ng 0010011i Ho t ñ ng (A) ← (A) + ((Ri)) ADD A, #data S byte 2 S chu kỳ 1 Mã ñ i tư ng 00100100 dddddddd Ho t ñ ng (A) ← (A) + #data • Ví d : Cho bi t trư c (A)=C3H, (R0)=47H, (P1)=(90H)=AAH, (47H)=D2H. Sau khi th c thi l nh ADD A, R0 thì: (A)=0AH, CY=1, AC=0, OV=0 Sau khi th c thi l nh ADD A, 90H hay ADD A, P1 thì: (A)=6DH, CY=1, AC=0, OV=1 Sau khi th c thi l nh ADD A, @R0 thì: (A)=95H, CY=1, AC=0, OV=0 ADD A, @R0 A C3H C3H + D2H = 95H A 95H R0 47H 47H D2H Giáo trình Vi x lý. 47 Biên so n: Ph m Quang Trí
  10. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. Sau khi th c thi l nh ADD A, #4EH thì: (A)=11H, CY=1, AC=1, OV=0 1.2. ADDC A, • Ch c năng: C ng có c nh (Add with Carry). • Mô t : ADDC c ng ñ ng th i n i dung c a thanh ghi A (A) v i n i dung c a byte có ñ a ch ñư c ch ra trong l nh (src-byte) và c nh (CY), ñ t k t qu vào thanh ghi A. Các c b nh hư ng. o C CY = 1 n u có s nh t bit 7. Ngư c l i CY = 0. o C AC = 1 n u có s nh t bit 3. Ngư c l i AC = 0. o C OV = 1 n u có s nh t bit 6 nhưng không có s nh t bit 7 ho c n u có s nh t bit 7 nhưng không có s nh t bit 6. Ngư c l i OV = 0. o Khi c ng hai s nguyên không d u và có d u: S không d u: CY = 1 Phép toán có nh . S có d u: CY = 1 S dương = S âm + S âm. S âm = S dương + S dương. • Các d ng l nh: ADDC A, Rn S byte 1 S chu kỳ 1 Mã ñ i tư ng 00110rrr Ho t ñ ng (A) ← (A) + (C) + (Rn) ADDC A, direct S byte 2 S chu kỳ 1 Mã ñ i tư ng 00110101 aaaaaaaa Ho t ñ ng (A) ← (A) + (C) + (direct) ADDC A,@Ri S byte 1 S chu kỳ 1 Mã ñ i tư ng 0011011i Ho t ñ ng (A) ← (A) + (C) + ((Ri)) ADDC A, #data S byte 2 S chu kỳ 1 Mã ñ i tư ng 00110100 dddddddd Ho t ñ ng (A) ← (A) + (C) + # data Giáo trình Vi x lý. 48 Biên so n: Ph m Quang Trí
  11. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Ví d : Cho bi t trư c (A)=C3H, (R0)=47H, (P1)=(90H)=AAH, (47H)=D2H và c CY=1. Sau khi th c thi l nh ADDC A, R0 thì: (A)=0BH, CY=1, AC=0, OV=0 ADDC A, R0 CY A C3H C3H + 47H + 1H = 0BH A 0BH R0 47H Sau khi th c thi l nh ADDC A, 90H hay ADDC A, P1 thì: (A)=6DH, CY=1, AC=0, OV=1 Sau khi th c thi l nh ADDC A, @R0 thì: (A)=96H, CY=1, AC=0, OV=0 Sau khi th c thi l nh ADDC A, #4EH thì: (A)=11H, CY=1, AC=1, OV=0 ADDC A, #4EH A C3H C3H + 4EH + 1H = 12H A 12H 4EH 1.3. SUBB A, • Ch c năng: Tr có s mư n (Subtract with Borrow). • Mô t : SUBB tr n i dung c a thanh ghi A (A) v i n i dung c a byte có ñ a ch ñư c ch ra trong l nh (src-byte) cùng v i c nh và c t k t qu vào thanh ghi A. Các c b nh hư ng. o C CY = 1 n u có s mư n cho bit 7. Ngư c l i CY = 0. o C AC = 1 n u có s mư n cho bit 3. Ngư c l i AC = 0. o C OV = 1 n u có s mư n cho bit 6 nhưng không có s mư n cho bit 7 ho c n u có s mư n cho bit 7 nhưng không có s mư n cho bit 6. Ngư c l i OV = 0. o Khi c ng hai s nguyên không d u và có d u: S không d u: CY = 1 Phép toán có mư n. S có d u: CY = 1 S dương = S âm - S dương. S âm = S dương - S âm. Giáo trình Vi x lý. 49 Biên so n: Ph m Quang Trí
  12. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Các d ng l nh: SUBB A, Rn S byte 1 S chu kỳ 1 Mã ñ i tư ng 10011rrr Ho t ñ ng (A) ← (A) – (C) – (Rn) SUBB A, direct S byte 2 S chu kỳ 1 Mã ñ i tư ng 10010101 aaaaaaaa Ho t ñ ng (A) ← (A) – (C) – (direct) SUBB A, @Ri S byte 1 S chu kỳ 1 Mã ñ i tư ng 1001011i Ho t ñ ng (A) ← (A) – (C) – ((Ri)) SUBB A, #data S byte 1 S chu kỳ 1 Mã ñ i tư ng 100110100 dddddddd Ho t ñ ng (A) ← (A) – (C) – #data • Ví d : Cho bi t trư c (A)=83H, (R0)=78H, (P1)=(90H)=AAH, (78H)=C5H và c CY=1. Sau khi th c thi l nh SUBB A, R0 thì: (A)=0AH, CY=0, AC=1, OV=1 Sau khi th c thi l nh SUBB A, 90H hay SUBB A, P1 thì: (A)=D8H, CY=1, AC=1, OV=0 Sau khi th c thi l nh SUBB A, @R0 thì: (A)=BDH, CY=1, AC=1, OV=0 Giáo trình Vi x lý. 50 Biên so n: Ph m Quang Trí
  13. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. Sau khi th c thi l nh SUBB A, #D6H thì: (A)=ACH, CY=1, AC=1, OV=0 1.4. INC byte • Ch c năng: Tăng thêm 1 (Increment). • Mô t : Tăng n i dung c a byte có ñ a ch ñư c ch ra trong l nh (byte) thêm 1. Các c không b nh hư ng. • Lưu ý: Khi l nh này ñư c dùng ñ thay ñ i giá tr c a m t port xu t thì giá tr ñư c dùng làm d li u ban ñ u c a port ñư c l y t b ch t d li u xu t, không ph i ñư c l y t các chân nh p. • Các d ng l nh: INC A S byte 1 S chu kỳ 1 Mã ñ i tư ng 00000100 Ho t ñ ng (A) ← (A) + 1 INC Rn S byte 1 S chu kỳ 1 Mã ñ i tư ng 00001rrr Ho t ñ ng (Rn) ← (Rn) + 1 INC direct S byte 2 S chu kỳ 1 Mã ñ i tư ng 00000101 aaaaaaaa Ho t ñ ng (direct) ← (direct) + 1 INC @Ri S byte 1 S chu kỳ 1 Mã ñ i tư ng 0000011i Ho t ñ ng ((Ri)) ← ((Ri)) + 1 • Ví d : Cho bi t trư c (A)=C3H, (R0)=69H, (P1)=(90H)=AAH, (69H)=7FH. Sau khi th c thi l nh INC A thì: (A)=C4H Sau khi th c thi l nh INC 90H hay INC P1 thì: (P1)=(90H)=ABH Giáo trình Vi x lý. 51 Biên so n: Ph m Quang Trí
  14. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. Sau khi th c thi l nh INC @R0 thì: (@R0)=(69H)=80H Sau khi th c thi l nh INC R0 thì: R0=6AH 1.5. INC DPTR • Ch c năng: Tăng con tr d li u (Increment Data Pointer). • Mô t : Tăng n i dung c a thanh ghi con tr d li u 16-bit thêm 1. Các c không b nh hư ng. S byte 1 S chu kỳ 2 Mã ñ i tư ng 10100011 Ho t ñ ng (DPTR) ← (DPTR) + 1 • Ví d 1: Cho bi t trư c (DPTR)=1234H. Sau khi th c thi l nh INC DPTR thì: (DPTR)=1235H v i (DPH)=12H và (DPL)=35H • Ví d 2: Cho bi t trư c (DPH)=12H và (DPL)=FFH. Sau khi th c thi l nh INC DPTR thì: (DPTR)=1300H v i (DPH)=13H và (DPL)=00H • Lưu ý: Không có l nh giãm n i dung c a DPTR (DEC DPTR). N u mu n giãm n i dung c a DPTR ta ph i vi t m t ño n chương trình con ñ th c hi n ñi u này. Chương trình con ñư c minh h a như sau: DEC_DPTR: ;Chương trình con giãm DPTR. PUSH ACC ;C t t m giá tr ACC. DEC DPL ;Giãm byte th p c a DPTR. MOV A, DPL ;So sánh byte th p c a DPTR CJNE A,#0FFH, SKIP ;v i FFH. DEC DPH ;Giãm byte cao c a DPTR. SKIP: POP ACC ;Ph c h i giá tr ACC. RET Giáo trình Vi x lý. 52 Biên so n: Ph m Quang Trí
  15. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. 1.6. DEC byte • Ch c năng: Giãm b t 1 (Decrement). • Mô t : Giãm n i dung c a byte có ñ a ch ñư c ch ra trong l nh (byte) b t 1. Các c không b nh hư ng. • Lưu ý: Khi l nh này ñư c dùng ñ thay ñ i giá tr c a m t port xu t thì giá tr ñư c dùng làm d li u ban ñ u c a port ñư c l y t b ch t d li u xu t, không ph i ñư c l y t các chân nh p. • Các d ng l nh: DEC A S byte 1 S chu kỳ 1 Mã ñ i tư ng 00010100 Ho t ñ ng (A) ← (A) – 1 DEC Rn S byte 1 S chu kỳ 1 Mã ñ i tư ng 00011rrr Ho t ñ ng (Rn) ← (Rn) – 1 DEC direct S byte 2 S chu kỳ 1 Mã ñ i tư ng 00010101 aaaaaaaa Ho t ñ ng (direct) ← (direct) – 1 DEC @Ri S byte 1 S chu kỳ 1 Mã ñ i tư ng 0001011i Ho t ñ ng ((Ri)) ← ((Ri)) – 1 • Ví d : Cho bi t trư c (A)=C3H, (R0)=60H, (P1)=(90H)=AAH, (60H)=7AH. Sau khi th c thi l nh DEC A thì: (A)=C2H Sau khi th c thi l nh DEC 90H hay DEC P1 thì: (P1)=(90H)=A9H Sau khi th c thi l nh DEC @R0 thì: (@R0)=(60H)=79H Giáo trình Vi x lý. 53 Biên so n: Ph m Quang Trí
  16. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. Sau khi th c thi l nh DEC R0 thì: R0=5FH 1.7. MUL AB • Ch c năng: Nhân (Multiply). • Mô t : MUL AB nhân các s nguyên không d u 8-bit ch a trong thanh ghi A và thanh ghi B. Tích s là m t giá tr 16 bit, byte th p (8 bit th p) ñư c c t trong thanh ghi A còn byte cao (8 bit cao) ñư c c t trong thanh ghi B. N u tích s l n hơn 255 (0FFH) thì c tràn OV=1. C nh CY luôn luôn b xóa. S byte 1 S chu kỳ 4 Mã ñ i tư ng 10100100 Ho t ñ ng (B) ← HIGH BYTE OF (A) × (B) (A) ← LOW BYTE OF (A) × (B) • Ví d 1: Cho bi t trư c (A)=02H, (B)=7CH. Sau khi th c thi l nh MUL AB thì: (B)= 00H, (A)= F8H, CY=0, OV=0. • Ví d 2: Cho bi t trư c (A)=C3H, (B)=AAH. Sau khi th c thi l nh MUL AB thì: (B)= 81H, (A)= 7EH, CY=0, OV=1. 1.8. DIV AB • Ch c năng: Chia (Divide). • Mô t : DIV AB chia s nguyên không d u 8-bit ch a trong thanh ghi A cho s nguyên không d u 8-bit ch a trong thanh ghi B. Thương s ñư c c t trong thanh ghi A còn s dư ñư c c t trong thanh ghi B. C CY và c OV b xoá. N u ban ñ u B ch a 00H, giá tr tr v trong thanh ghi A và thanh ghi B không ñư c xác ñ nh và c OV=1. C CY ñư c xóa trong m i trư ng h p. S byte 1 S chu kỳ 4 Mã ñ i tư ng 10000100 Ho t ñ ng (A) ← QUOTIENT OF (A) / (B) (B) ← REMAINDER OF (A) / (B) Giáo trình Vi x lý. 54 Biên so n: Ph m Quang Trí
  17. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Ví d 1: Cho bi t trư c (A)=C3H, (B)=0AH. Sau khi th c thi l nh DIV AB thì: (B)= 05H, (A)= 13H, CY=0, OV=0. • Ví d 2: Cho bi t trư c (A)=00H, (B)=0AH. Sau khi th c thi l nh DIV AB thì: (B)= 00H, (A)= 00H, CY=0, OV=0. • Ví d 3: Cho bi t trư c (A)=C3H, (B)=00H. Sau khi th c thi l nh DIV AB thì: (B)= yyH, (A)= xxH, CY=0, OV=1. DIV AB A C3H B yyH C3H / 00H = xxH dö yyH B 00H A xxH 1.9. DA A • Ch c năng: Hi u ch nh th p phân n i dung c a thanh ghi A ñ i v i phép c ng (Decimal-adjust Accumulator for Addition) • Mô t : DA A hi u ch nh giá tr 8-bit trong thanh ghi A (giá tr này là k t qu phép c ng hai toán h ng có d ng BCD - gói trư c ñó) ñ t o ra hai digit 4 bit. Phép c ng ñư c th c hi n b i l nh ADD ho c ADDC, l nh DA A không áp d ng cho phép tr SUBB). N u c AC = 1 ho c n u 4 bit th p c a thanh ghi A có giá tr > “9” (xxxx1010 – xxxx1111), thì “6”ñư c c ng v i n i dung c a thanh ghi A ñ t o ra s BCD 4 bit th p. Sau khi c ng, c CY = 1 n u có s nh t 4 bit th p chuy n ñ n t t c 4 bit cao. N u c CY = 1 ho c n u 4 bit cao c a thanh ghi A có giá tr > “9” (1010xxxx – 1111xxxx), thì “6”ñư c c ng v i 4 bit cao ñ t o ra s BCD 4 bit cao. Sau khi c ng c CY = 1 n u có s nh t 4 bit cao nhưng c CY không b xóa. V y thì c CY ch ra r ng t ng c a 2 toán h ng BCD ban ñ u l n hơn 99. C OV không b nh hư ng. T t c s ki n trên ch x y ra trong m t chu kỳ máy. L nh này th c hi n phép bi n ñ i th p phân b ng cách c ng 00H, 06H, 60H hay 66H v i n i dung c a thanh ghi A tùy thu c vào n i dung ban ñ u c a thanh ghi A và các ñi u ki n c a t tr ng thái chương trình PSW. • Lưu ý: DA A không th ñơn gi n bi n ñ i s hex trong thanh ghi A thành s d ng BCD, DA A cũng không áp d ng cho phép tr th p phân. S byte 1 S chu kỳ 1 Mã ñ i tư ng 11010100 Giáo trình Vi x lý. 55 Biên so n: Ph m Quang Trí
  18. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. Ho t ñ ng Gi s n i dung c a thanh ghi A là BCD IF [[(A3 – A0) > 9] OR [(AC) = 1]] THEN (A3 – A0) ← (A3 – A0) + 6 AND IF [[(A7 – A4) > 9] OR [(C) = 1]] THEN (A7 – A4) ← (A7 – A4) + 6 • Ví d 1: Cho bi t trư c (A)=56H → bi u di n BCD c a s 56 (R3)=67H → bi u di n BCD c a s 67 Sau khi th c thi chu i l nh: ADD A, R3 DA A thì: c CY=1 và (A)=23 → bi u di n BCD c a s 123 (56+67) • Ví d 2: Cho bi t trư c (A)=59H → bi u di n BCD c a s 59 (R3)=28H → bi u di n BCD c a s 28 Sau khi th c thi chu i l nh: ADD A, R3 DA A thì: c CY=0 và (A)=87 → bi u di n BCD c a s 87 (59+28) • Ví d 3: Cho bi t trư c (A)=86H → bi u di n BCD c a s 86 (R3)=92H → bi u di n BCD c a s 92 Sau khi th c thi chu i l nh: ADD A, R3 DA A thì: c CY=1 và (A)=78 → bi u di n BCD c a s 178 (86+92) Giáo trình Vi x lý. 56 Biên so n: Ph m Quang Trí
  19. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Ví d 4: Cho bi t trư c (A)=56H → bi u di n BCD c a s 56 (R3)=67H → bi u di n BCD c a s 67 c CY=1 Sau khi th c thi chu i l nh: ADDC A, R3 DA A thì: c CY=1 và (A)=24 → bi u di n BCD c a s 124 (56+67+1) • Lưu ý: Các giá tr BCD có th ñư c tăng thêm 1 ñơn v ho c giãm ñi 1 ñơn v b ng cách c ng v i 01H (khi tăng) ho c c ng v i 99H (khi giãm). o Ví d 1: Gi s cho (A)=39H → bi u di n BCD c a s 39. Sau khi th c thi chu i l nh: ADD A, #01H DA A thì: c CY=0 và (A)=40H → bi u di n BCD c a s 40. o Ví d 2: Gi s cho (A)=30H → bi u di n BCD c a s 30. Sau khi th c thi chu i l nh: ADD A, #99H DA A thì: c CY=1 và (A)=29H → bi u di n BCD c a s 29. 2. Nhóm l nh logic: B ng tr ng thái c a các phép toán logic AND – OR – XOR – CPL A B A AND B A OR B A XOR B CPL A 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 2.1. ANL , • Ch c năng: AND hai toán h ng (Logical-AND). • Mô t : ANL th c hi n phép toán AND t ng bit gi a hai toán h ng ñư c ch ra trong l nh và lưu k t qu vào toán h ng ñích (dest-byte). Các c không b nh hư ng. • Lưu ý: Khi l nh này ñư c dùng ñ s a ñ i m t port xu t, giá tr ñư c dùng làm d li u ban ñ u c a port ñư c ñ c t b ch t d li u xu t, không ph i t các chân port. Giáo trình Vi x lý. 57 Biên so n: Ph m Quang Trí
  20. Chương 3: T p l nh c a 8051. Trư ng ðH Công nghi p Tp.HCM. • Các d ng l nh: ANL A, Rn S byte 1 S chu kỳ 1 Mã ñ i tư ng 01011rrr Ho t ñ ng (A) ← (A) AND (Rn) ANL A, direct S byte 2 S chu kỳ 1 Mã ñ i tư ng 01010101 aaaaaaaa Ho t ñ ng (A) ← (A) AND (direct) ANL A, @Ri S byte 1 S chu kỳ 1 Mã ñ i tư ng 0101011i Ho t ñ ng (A) ← (A) AND ((Ri)) ANL A, #data S byte 2 S chu kỳ 1 Mã ñ i tư ng 01010100 dddddddd Ho t ñ ng (A) ← (A) AND #data ANL direct, A S byte 2 S chu kỳ 1 Mã ñ i tư ng 01010010 aaaaaaaa Ho t ñ ng (direct) ← (direct) AND (A) ANL direct, #data S byte 3 S chu kỳ 2 Mã ñ i tư ng 01010011 aaaaaaaa dddddddd Ho t ñ ng (direct) ← (direct) AND #data • Ví d : Cho bi t trư c (A)=C3H, (R0)=2AH, (P3)=(B0H)=75H, (2AH)=55H. Sau khi th c thi l nh ANL A, R0 thì: (A)=02H ANL A, R0 A C3H C3H AND 2AH = 02H A 02H R0 2AH 11000011B AND 00101010B 00000010B Giáo trình Vi x lý. 58 Biên so n: Ph m Quang Trí