
BÀI 3: T P L NH 8051Ậ Ệ
3.2.1.
MỞ
Đ UẦ
Gi ngố như m tộ câu văn đ cượ t oạ nên b ngằ cách ghép các ký tự l iạ v iớ nhau,
một ch ngươ trình cũng là m tộ sự k tế hợp các lệnh đi uề khi nể cơ b nả nh :ư ADD,
MOVE ho c JUMP, bài ặh c này s trình bàyọ ẻ v tề ập l nh c a h MCs 8051ệ ủ ọ thông qua các
cách định đ a ch d ị ỉ ữ li u ệvà các ch ng trình đi nươ ể hình.
T pậ l nhệ của MCs 8051 đ cượ t iố uư hóa cho các ngứ d ngụ 8 bít nh mằ tăng t cố đ ,ộ
v iớ các cách đ nhị đ aị chỉ RAM trong ng nắ g nọ giúp dể dàng cho vi cệ truy xu tấ các dữ li uệ
có c uấ trúc nh ,ỏ v iớ các l nhệ về bít r tấ thích hợp cho yêu c uầ đi uề khiển thi tế bị ngo iạ
vi cũng nh cưho các yêu c uầ xử lý logic. T pậ l nh c aệ ủ 8051 có mã l nhệ dài 8 bít nên tổng
s l nhố ệ là 28 = 256 l nh,ệ trong đó có 255 l nhệ đả đ nhị ngh aỉ và m tộ lệnh ch aư xác đ nh.ị
Một s l nh c nố ệ ầ b sung thổêm m t ho cộ ặ hai byte d ửli u ho c đ aệ ặ ị ch .ỉ
Trong t p lậ ệnh có 139 lệnh có đ dài 1 byte, 92 l nh 2 byte và 24 l nh 3ộ ệ ệ byte
3.2.2 CÁC CH Đ Đ A CH C A 8051Ế Ộ Ị Ỉ Ủ
Các ki u đ nh đ a ch cho phép đ nh rõ n i l y d li u ho c n i nh n d li u tùyể ị ị ỉ ị ơ ấ ữ ệ ặ ơ ậ ữ ệ
thu c vào cách th c s d ng l nh c a ng i l p trình. Vi đi u khi n 8051 có 8 ki u đ nhộ ứ ử ụ ệ ủ ườ ậ ề ể ể ị
đ a ch nh sau:ị ỉ ư
- Ki u đ nh đ a ch dùng thanh ghi.ể ị ị ỉ
- Ki u đ nh đ a ch tr c ti p.ể ị ị ỉ ự ế
- Ki u đ nh đ a ch gián ti p.ể ị ị ỉ ế
- Ki u đ nh đ a ch t c th i.ể ị ị ỉ ứ ờ
- Ki u đ nh đ a ch t ng đ i.ể ị ị ỉ ươ ố
- Ki u đ nh đ a ch tuy t đ i.ể ị ị ỉ ệ ố
- Ki u đ nh đ a ch dài.ể ị ị ỉ
- Ki u đ nh đ a ch ch s .ể ị ị ỉ ỉ ố
3.2.2.1 Ki u đ nh đ a ch dùng thanh ghi (Register Addressing)ể ị ị ỉ
Ki u này th ng đ c dùng cho các l nh x lý d li u mà d li u luôn l uể ườ ượ ệ ử ữ ệ ữ ệ ư
trong các thanh ghi. Đ i v i vi đi u khi n thì mã l nh thu c ki u này ch có 1 byte.ố ớ ề ể ệ ộ ể ỉ
Ví d :ụ
MOV A, R1 ;copy noi dung thanh ghi R1 vao thanh ghi
A
3.2.2.2 Ki u đ nh đ a ch tr c ti p (Direct Addressing)ể ị ị ỉ ự ế
Ki u này th ng đ c dùng đ truy xu t d li u c a b t kỳ ô nh nào trongể ườ ượ ể ấ ữ ệ ủ ấ ớ
256 byte b nh d li u n i c a vi đi u khi n 8051. ộ ớ ữ ệ ộ ủ ề ể
Các l nh thu c ki u này th ng có mã l nh 2 byte: byte th nh t là mã l nh,ệ ộ ể ườ ệ ứ ấ ệ
byte th 2 là đ a ch c a ô nhứ ị ỉ ủ ớ
Ví d :ụ
1

MOV A, 05H ;copy noi dung o nho co dia chi 05H vao
;thanh ghi A
3.2.2.3 Đ nh đ a ch gián ti p (Indirect Addressing)ị ị ỉ ế
Ki u đ nh đ a ch gián ti p đ c t ng tr ng b i ký hi u @ và đ c đ t tr cể ị ị ỉ ế ượ ượ ư ở ệ ượ ặ ướ
các thanh ghi R0, R1 (không s d ng các thanh ghi R2 – R7 trong ch đ đ a ch này)ử ụ ế ộ ị ỉ
hay DPTR. R0 và R1 có th ho t đ ng nh m t thanh ghi con tr , n i dung c a nó choể ạ ộ ư ộ ỏ ộ ủ
bi t đ a ch c a m t ô nh trong RAM n i mà d li u s ghi ho c s đ c. Còn DPTRế ị ỉ ủ ộ ớ ộ ữ ệ ẽ ặ ẽ ọ
dùng đ truy xu t ô nh ngo i. Các l nh thu c d ng này ch có 1 byte.ể ấ ớ ạ ệ ộ ạ ỉ
Ví d :ụ
MOV A, @R1 ;copy noi dung o nho co dia chi dat trong
;Thanh ghi R1 vao thanh ghi A
3.2.2.4 Đ nh đ a ch t c th i (Immediate Addressing)ị ị ỉ ứ ờ
Ki u đ nh đ a ch t c th i đ c t ng tr ng b i ký hi u # và đ c đ t tr cể ị ị ỉ ứ ờ ượ ượ ư ở ệ ượ ặ ướ
m t h ng s . L nh này th ng dùng đ n p 1 giá tr là 1 h ng s byte th 2 (ho cộ ằ ố ệ ườ ể ạ ị ằ ố ở ứ ặ
byte th 3) vào thanh ghi ho c ô nh .ứ ặ ớ
Ví d :ụ
MOV A, #30H ;nap du lieu 30H vao thanh ghi A
3.2.2.5 Đ nh đ a ch t ng đ iị ị ỉ ươ ố
Ki u đ nh đ a ch t ng đ i ch s d ng v i nh ng l nh nh y. N i nh y đ n cóể ị ị ỉ ươ ố ỉ ử ụ ớ ữ ệ ả ơ ả ế
đ a ch b ng đ a ch đang l u trong thanh ghi PC c ng v i 1 giá tr 8 bit [còn g i là giáị ỉ ằ ị ỉ ư ộ ớ ị ọ
tr l ch t ng đ i: relative offset] có giá tr t – 128 đ n +127 nên vi đi u khi n có thị ệ ươ ố ị ừ ế ề ể ể
nh y lùi [n u s c ng v i s âm] và nh y t i [ n u s c ng v i s d ng]. L nh nàyả ế ố ộ ớ ố ả ớ ế ố ộ ớ ố ươ ệ
có mã l nh 2 byte, byte th 2 chính là giá tr l ch t ng đ i:ệ ứ ị ệ ươ ố
N i nh y đ n th ng đ c xác đ nh b i nhãn (label) và trình biên d ch s tínhơ ả ế ườ ượ ị ở ị ẽ
toán giá tr l ch. ị ệ
Đ nh v t ng đ i có u đi m là mã l nh c đ nh, nh ng khuy t đi m là chị ị ươ ố ư ể ệ ố ị ư ế ể ỉ
nh y ng n trong ph m vi -128ả ắ ạ ÷127 byte [256byte], n u n i nh y đ n xa h n thì l nhế ơ ả ế ơ ệ
này không đáp ng đ c – s có l i.ứ ượ ẽ ỗ
Ví d :ụ
SJMP X1 ;nhay den nhan co ten X1 nam trong tam vuc
;256 byte
3.2.2.6 Đ nh đ a ch tuy t đ iị ị ỉ ệ ố
Ki u đ nh đ a ch tuy t đ i đ c dùng v i các l nh ACALL và AJMP. Các l nhể ị ị ỉ ệ ố ượ ớ ệ ệ
này có mã l nh 2 byte.ệ
Đ nh đ a ch tuy t đ i có u đi m là mã l nh ng n (2 byte), nh ng khuy t đi mị ị ỉ ệ ố ư ể ệ ắ ư ế ể
là mã l nh thay đ i và gi i h n ph m vi n i nh y đ n, g i đ n không quá 2 kbyte.ệ ổ ớ ạ ạ ơ ả ế ọ ế
Ví d :ụ
AJMP X1 ;nhay den nhan co ten X1 nam trong tam vuc
2

;2Kbyte
3.2.2.7 Đ nh đ a ch dài (Long Addressing)ị ị ỉ
Ki u đ nh đ a ch dài đ c dùng v i l nh LCALL và LJMP. Các l nh này có mãể ị ị ỉ ượ ớ ệ ệ
l nh 3 byte – trong đó có 2 byte (16bit) là đ a ch c a n i đ n. C u trúc mã l nh là 3ệ ị ỉ ủ ơ ế ấ ệ
byte. Đ nh đ a ch dài là có th g i 1 ch ng trình con ho c có th nh y đ n b t kỳị ị ỉ ể ọ ươ ặ ể ả ế ấ
vùng nh nào vùng nh 64K.ớ ớ
Ví d :ụ
LJMP X1 ; nhay den nhan co ten X1 nam trong tam vuc
;64Kbyte
3.2.2.8 Đ nh đ a ch ch s (Index Addressing)ị ị ỉ ỉ ố
Ki u đ nh đ a ch ch s “dùng m t thanh ghi c b n: là b đ m ch ng trìnhể ị ị ỉ ỉ ố ộ ơ ả ộ ế ươ
PC ho c b đ m d li u DPTR” k t h p v i “m t giá tr l ch (offset) còn g i là giá trặ ộ ế ữ ệ ế ợ ớ ộ ị ệ ọ ị
t ng đ i [th ng l u trong thanh ghi]” đ t o ra 1 đ a ch c a ô nh c n truy xu tươ ố ườ ư ể ạ ị ỉ ủ ớ ầ ấ
ho c là đ a ch c a n i nh y đ n. Vi c k t h p đ c minh h a nh sau: ặ ị ỉ ủ ơ ả ế ệ ế ợ ượ ọ ư
Base Register Offset Effective Address
+ =
Ví d :ụ
MOVC A, @A + DPTR ;lay du lieu trong o nho DPTR+A de
;nap vao thanh ghi A
3.3.3 T P L NH C A 8051Ậ Ệ Ủ
Đ kh o sát t p l nh thì ph i th ng nh t m t s qui đ nh v các t ng kí hi uể ả ậ ệ ả ố ấ ộ ố ị ề ừ ữ ệ
trong t p l nh th ng đ c s d ng:ậ ệ ườ ượ ử ụ
- Direct t ng tr ng cho ô nh n i có đ a ch Direct.ượ ư ớ ộ ị ỉ
- Rn t ng tr ng cho các thanh ghi t thanh ghi R0 đ n thanh ghi R7.ượ ư ừ ế
- @Ri t ng tr ng cho ô nh có đ a ch l u trong thanh ghi Ri và Ri ch có 2 thanh ghiượ ư ớ ị ỉ ư ỉ
là R0 và R1.
- Các l nh th ng x y ra gi a các đ i t ng sau: ệ ườ ả ữ ố ượ
+ Thanh ghi A.
+ Thanh ghi Rn.
+ Ô nh có đ a ch direct.ớ ị ỉ
+ Ô nh có đ a ch l u trong thanh ghi @Ri.ớ ị ỉ ư
+ D li u 8 bit #data.ữ ệ
+ Addr11 là đ a ch 11 bit t A11 – A0: đ a ch này ph c v cho l nh nh y ho cị ỉ ừ ị ỉ ụ ụ ệ ả ặ
l nh g i ch ng trình con trong ph m vi 2 kbyte. ệ ọ ươ ạ
3
PC (or PDTR) A

+ Addr16 là đ a ch 16 bit t A15 – A0: đ a ch này ph c v cho l nh nh y và l nhị ỉ ừ ị ỉ ụ ụ ệ ả ệ
g i ch ng trình con xa trong ph m vi 64 kbyte – đó chính là đ a ch nh yọ ươ ở ạ ị ỉ ả
đ n, ho c đ a ch c a ch ng trình con.ế ặ ị ỉ ủ ươ
3.3.3.1 NHÓM L NH S H CỆ Ố Ọ
1. L nh c ng không nhệ ộ ớ
ADD A, Rn ;C ng n i dung thanh ghi A v i n i dung thanh ghi Rn,ộ ộ ớ ộ
;k t qu l u trong thanh ghi A. ế ả ư
Ví dụ: ADD A, R0 ;A=91h, (C)=1.
ADD A, direct ;C ng n i dung c a ô nh có đ a ch direct v i n iộ ộ ủ ớ ị ỉ ớ ộ
dung
;thanh ghi A, k t qu ch a thanh ghi A. ế ả ứ ở
Ví dụ: Gi s A có n i dung 0D9h và ô nh có đ a ch 30h l u n i dung 0B8h,ả ử ộ ớ ị ỉ ư ộ
l nh:ệ
ADD A, 30h ;A=91h, (C)=1.
ADD A, @Ri ;C ng n i dung c a ô nh có đ a ch ch a trong thanhộ ộ ủ ớ ị ỉ ứ
ghi
;Ri v i thanh ghi A, k t q a l u tr trong thanh ghi A. ớ ế ủ ư ữ
Ví dụ: Gi s A có n i dung 0D9h, ô nh có đ a ch 30h có n i dung là 0B8h, R0ả ử ộ ớ ị ỉ ộ
có đ a ch đ t là 30H, l nh:ị ỉ ặ ệ
ADD A, @R0 ;A=91h, (C)=1.
ADD A, #data ;C ng d li u data 8 bit (d0 đ n d7) v i n i dungộ ữ ệ ế ớ ộ
thanh
;ghi A, k t qu l u tr trong A. ế ả ư ữ
Ví dụ: Gi s A có n i dung D9h, d li u tr c ti p là B8h, l nh:ả ử ộ ữ ệ ự ế ệ
ADD A, #0B8h ;A=91h, (C)=1.
2. L nh c ng có nhệ ộ ớ
ADDC A, Rn ;C ng n i dung thanh ghi A v i n i dung thanh ghi Rnộ ộ ớ ộ
;v i bit C, k t qu l u trong thanh ghi A. ớ ế ả ư
Ví dụ: Gi s A có n i dung 0D9h, R0 có n i dung là 0B8h, (C) =1, l nh: ả ử ộ ộ ệ
ADDC A, R0 ;A=92h, (C)=1.
ADDC A, direct ;C ng n i dung c a ô nh có đ a direct n i dung thanhộ ộ ủ ớ ị ộ
;ghi A và bit C, k t qu ch a thanh ghi A.ế ả ứ ở
Ví dụ: Gi s A có n i dung 47h, ô nh 30h có n i dung 32h và c (C) = 0, l nh:ả ử ộ ớ ộ ờ ệ
ADDC A, 30h ;A=79h, (C)=0.
ADDC A, @Ri ;C ng n i dung c a ô nh có đ a ch ch a trong thanhộ ộ ủ ớ ị ỉ ứ
ghi
4

;Ri v i thanh ghi A v i bit C, k t qu l u tr trongớ ớ ế ả ư ữ
thanh
;ghi A.
Ví dụ: Gi s A có n i dung 0D9h, ô nh 30h có n i dung là 0B8h, R0 có n iả ử ộ ớ ộ ộ
dung 30h và (C) =1, l nh: ệ
ADDC A, @R0 ;A=92h, (C)=1.
ADDC A, #data ;C ng d li u data 8 bit (d0 đ n d7) v i n i dungộ ữ ệ ế ớ ộ
thanh
;ghi A và bit C, k t qu l u tr trong A. ế ả ư ữ
Ví dụ: Gi s thanh ghi A có n i dung 37h, d li u tr c ti p 24h, c nh (C) =ả ử ộ ữ ệ ự ế ờ ớ
1, l nh:ệ
ADDC A, 24h ;A=5Ch, (C)=0.
3. L nh tr có nhệ ừ ớ
SUBB A, Rn ;Tr n i dung thanh ghi A cho n i dung thanh ghi Rnừ ộ ộ
và
;tr cho c Carry, k t qu l u trong thanh ghi A. ừ ờ ế ả ư
Ví dụ: Gi s A có n i dung 0B9h, thanh ghi R0 có n i dung là 5Ah và (C)=1,ả ử ộ ộ
l nh: ệ
SUBB A, R0 ;A=5Eh, (C)=0.
SUBB A, direct ;Tr n i dung thanh ghi A cho n i dung c a ô nh cóừ ộ ộ ủ ớ
đ aị
;ch direct và tr cho c Carry, k t qu ch a thanhỉ ừ ờ ế ả ứ ở
ghi
;A.
SUBB A, @Ri ;Tr n i dung c a thanh ghi A cho d li u c a ô nhừ ộ ủ ữ ệ ủ ớ
có
;đ a ch ch a trong thanh ghi Ri và tr cho c carry, k tị ỉ ứ ừ ờ ế
;qu l u tr trong thanh ghi A. ả ư ữ
SUBB A, #data ;Tr n i dung thanh ghi A cho d li u 8 bit d0 đ n d7ừ ộ ữ ệ ế
và
;tr cho c carry, k t q a l u tr trong A. ừ ờ ế ủ ư ữ
4. L nh tăng: (increment: tăng lên 1 đ n v )ệ ơ ị
INC A ;Tăng n i dung thanh ghi A lên 1. ộ
Ví dụ: Gi s A có n i dung FFh, l nh:ả ử ộ ệ
INC A ;A=00h.
INC Rn ;Tăng n i dung thanh ghi Rn lên 1.ộ
INC direct ;Tăng n i dung c a ô nh có đ a ch tr c ti p lên 1. ộ ủ ớ ị ỉ ự ế
5

