You are on page 1of 11

TҰP LӊNH ASM THƯӠNG DÙNG CHO 8051

Ngưӡi báo cáo: Mai Thành Phương

Email:maigiapy@yahoo.com

1.MOV Rn, DIRECT

2.MOV @Rn,#DATA

3.MOV Rn,#DATA

4.CLR

5.SETB

6.RET

7.RETI

8.JMP

9.JB BIT,REL

10.JNB BIT,REL

11.INC

12.DEC

13.CJNE Rn,#Data,REL

14.ADD A,Rn

15.SUBB A,Rn
16.MULL A,B

17.DIV A,B

18.RLC

Chú giҧi:

Rn: ViӃt tҳt cho các thanh ghi tӯ R0-R7

DIRECT: đӏa chӍ cӫa ô nhӟ dӳ liӋu

1.Lҩy dӳ liӋu cҩt ӣ DIRECT bӓ vào trong thanh ghi Rn. VD Mov r1,21h

21h là đӏa chӍ Ram trên Chíp.Đӏa chӍ thưӡng viӃt dưӟi dҥng sӕ Hex, chӳ h ӣ sau chӍ sӕ
Hex, chӳ B chӍ sӕ nhӏ phân, không có chӳ theo sau là sӕ nguyên.
2.Nhұp 1 sӕ nguyên vào đӏa chӍ mà Rn đang nҳm giӳ.

Vd: mov r0,#21h

Mov @R0,#55

2 lӋnh trên sӁ nhұp sӕ 55 vào đӏa chӍ 21h, lӋnh thay thӃ 2 lӋnh trên: Mov 21h,#55

3.Nhұp 1 sӕ nguyên vào Rn

Hoһc có thӇ viӃt Mov r7,#11111111b. 255 ӣ hӋ thұp phân tương đương vӟi 1111111b ӣ
hӋ nhӏ phân

4.Xóa 1 bít, xóa 1 ô nhӟ


VD1: mov 21h,#11111111b

Clr 21h.0

Mov a,21h

Vӟi 3 lӋnh trên thì thanh ghi A sӁ chӭa sӕ 11111110B

VD2.CLR P1.0 lӋnh này làm cho điӋn áp trên chân sӕ 1 cӫa chíp AT89C51 xuӕng 0 vôn

5.Ngưӧc lҥi vӟi Clr

VD Setb p1.0, kӃt quҧ làm điӋn áp trên chân sӕ 1 lên 5 vôn

6.Quay lҥi chӛ mà chương trình rӁ nhánh

NӃu không gһp các lӋnh rӁ nhánh thì chương trình sӁ thӵc hiӋn theo thӭ tӵ tӯ trên xuӕng
dưӟi.

7.quay lҥi chӛ mà chương trình bӏ ngҳt

VD gia chӫ đang kӇ câu chuyӋn vӅ đӭa con gái cӫa ông ta, tӟi đoҥn ³Con tôi khóc nhiӅu
nên mҳt đã bӏ mù´ bӛng chuông điӋn thoҥi reo. Sau khi nghe xong điӋn thoҥi quay lҥi câu
chuyӋn, thay vì phҧi hӓi ³tôi kӇ tӟi đâu rӗi´ RETI là câu trҧ lӡi.

8. lӋnh nhҧy, lӋnh rӁ nhánh không điӅu kiӋn.

lӋnh cùng chӭc năng SJMP

9.LӋnh kiӇm tra 1 bít, NӃu bít đó bҵng 1 thì rӁ nhánh

VD Jb p0.0,xuong0

Setb p1.0

Xuong0:
Clr p1.0

Ret

Các lӋnh trên sӁ kiӇm tra 1 nút nhҩn nӕi Mass, nӃu nhҩn xuӕng thì đèn sáng, nӃu thҧ thì
đèn tҳt

10. LӋnh kiӇm tra bít, nӃu bít =0 thì rӁ nhánh

11.LӋnh tăng ô nhӟ lên 1 đơn vӏ

VD mov r2,#1

Inc r2

Lúc này trong thanh ghi r2 sӁ chӭa sӕ 2

12. LӋnh giҧm 1 đơn vӏ

13.LӋnh kiӇm tra thanh ghi Rn , nӃu khác Data thì rӁ nhánh

VD chương trình đӃm sӕ ngưӡi đi qua cәng, đӫ 5 ngưӡi thì đә chuông, cҧm biӃn gҳn vào
chân sӕ 1 cӫa chíp

Mov r0,#0

Jnb p1.0,tang_so_nguoi

Ret

Tang_so_nguoi:

Inc r0 ;tăng biӃn đӃm lên 1


ĐV
Cjne r0,#5,quaylai ; nӃu khác 5 thì quay lҥi đӃm ngưӡi
Call do_chuong ; gӑi hàm đә chuông

Quaylai:

Ret

Do_chuong:

Setb p1.1 ; chuông nӕi vӟi chân sӕ 2 cӫa chíp

Ret

14. LӋnh cӝng, kӃt quҧ lưu vào A

VD mov A,#1

Mov R3,#4

Add a,r3

KӃt quҧ: A=4

15. LӋnh trӯ

16. nhân

17.chia

18. lӋnh quay dӏch

VD mov r1,#01110011B

Setb CF

RLC r1
KӃt quҧ: r1=11100111B, CF=0

NӃu thêm 1 lӋnh RLC r1 nӳa thì

Kq: r1=11001110, CF=1

II: TҰP LӊNH ĐҪY ĐӪ


1. NHÓM LӊNH DI CHUYӆN DӲ LiӊU:
1. LӋnh di chuyӇn dӳ liӋu trӵc tiӃp:
- Cú pháp: MOV <ĐÍCH>,
Trong đó:
. <ĐÍCH>: có thӇ là thanh ghi, đӏa chӍ ô nhӟ trong vùng RAM nӝi
. : có thӇ là thanh ghi, đӏa chӍ ô nhӟ trong vùng RAM nӝi hoһc #
- Thӵc hiӋn: di chuyӇn nӝi dung vào <ĐÍCH>
- Ví dө:
MOV A, 120
MOV B, #24
MOV 120,#10110010B
MOV R3, A
MOV P3,#3EH
2. Nhóm lӋnh di chuyӇn dӳ liӋu gián tiӃp:
a. Liên quan đӃn vùng nhӟ RAM nӝi:
+ LӋnh đӑc bӝ nhӟ:
- Cú pháp: MOV <ĐÍCH>, @Rp
Trong đó:
. <ĐÍCH>: thanh ghi, ô nhӟ
. Rp: là thanh ghi R0 hoһc R1
- Thӵc hiӋn: lҩy nӝi dung ô nhӟ trong vùng RAM nӝi có đӏa chӍ là nӝi dung thanh ghi Rp
đһt vào <ĐÍCH>
- Ví dө:
MOV 120,#47
MOV R1,#120
MOV A,@R1
; sau khi thӵc hiӋn xong đoҥn lӋnh nӝi dung thanh ghi A chӭa giá trӏ 47
+ LӋnh ghi bӝ nhӟ:
- Cú pháp: MOV @Rp,
Trong đó:
. : thanh ghi, ô nhӟ hoһc #
. Rp: là thanh ghi R0 hoһc R1
- Thӵc hiӋn: đһt nӝi dung vào ô nhӟ trong vùng RAM nӝi có đӏa chӍ là nӝi dung thanh ghi
Rp.
- Ví dө 1:
MOV R0,#100
MOV @R0, #0E3H
; sau khi thӵc hiӋn xong đoҥn lӋnh nӝi dung ô nhӟ 100 chӭa giá trӏ E3H
- Ví dө 2:
MOV A, #49
MOV R1,#127
MOV @R1, A ; (127) = 49
b. Liên quan đӃn vùng nhӟ dӳ liӋu ngoài:
+ LӋnh đӑc bӝ nhӟ:
- Cú pháp: MOVX A, @DPTR
- Thӵc hiӋn: lҩy nӝi dung ô nhӟ trong vùng dӳ liӋu ngoài có đӏa chӍ là nӝi dung thanh ghi
DPTR đһt vào thanh ghi A
- Ví dө:
MOV DPTR,#1000
MOVX A, @DPTR ; A (1000)
+ LӋnh đӑc bӝ nhӟ:
- Cú pháp: MOVX @DPTR, A
- Thӵc hiӋn: lҩy nӝi dung A đһt vào ô nhӟ trong vùng dӳ liӋu ngoài có đӏa chӍ là nӝi dung
thanh ghi DPTR.
- Ví dө:
MOV DPTR,#1000
MOV A, #4EH
MOVX @DPTR, A ; ghi giá trӏ 4EH vào ô nhӟ ngoài có đӏa chӍ 1000
c. LӋnh liên quan đӃn vùng nhӟ chương trình (đӑc mã lӋnh):
- Cú pháp: MOVC A,@A+DPTR
- Thӵc hiӋn: lҩy nӝi dung ô nhӟ trong vùng nhӟ chương trình có đӏa chӍ là nӝi dung thanh
ghi A + DPTR đһt vào thanh ghi A.
- Ví dө 1:
MOV A,#2
MOV DPTR,#500
MOVC A,@A+DPTR (502); A
- Ví dө 2:
MOV A, #4
MOV DPTR,#TABLE
MOVC A, @A+DPTR
TABLE: DB 12H, 4EH, 0C7H, 084H, 055H,««
3. Nhóm lӋnh liên quan đӃn ngăn xӃp:
+ Ghi vào ngăn xӃp:
- Cú pháp: PUSH Thanh ghi/ đӏa chӍ
- Thӵc hiӋn: cҩt nӝi dung thanh ghi hoһc ô nhӟ vào đӍnh ngăn xӃp
+ Đӑc ngăn xӃp:
- Cú pháp: POP Thanh ghi/ đӏa chӍ
- Thӵc hiӋn: lҩy nӝi dung ӣ đӍnh ngăn xӃp gán vào thanh ghi, ô nhӟ
+ ví dө: MOV A,#100
MOV 100,#3EH
PUSH ACC
PUSH 100
MOV A, #21H
MOV 100, #40
POP 100
POP ACC
4. LӋnh trao đәi dӳ liӋu:
- Cú pháp: XCH A,
Trong đó: có thӇ là thanh ghi, ô nhӟ hoһc @Rp
- Thӵc hiӋn: trao đәi nӝi dung thanh ghi A và
II. NHÓM LӊNH SӔ HӐC
1. LӋnh cӝng:
a. Cӝng không nhӟ:
- Cú pháp: ADD A,
Trong đó: có thӇ là thanh ghi, ô nhӟ, # hoһc @Rp
A +- Thӵc hiӋn: A

b. Cӝng có nhӟ:

- Cú pháp: ADDC A,
Trong đó: có thӇ là thanh ghi, ô nhӟ, # hoһc @Rp
A +- Thӵc hiӋn: A + C
2. LӋnh trӯ:
- Cú pháp: SUBB A,
Trong đó: có thӇ là thanh ghi, ô nhӟ, # hoһc @Rp
A -- Thӵc hiӋn: A - C (carry bit)

3. LӋnh nhân:
- Cú pháp: MUL AB

- Thӵc hiӋn: A * B = BA (B: byte cao cӫa kӃt quҧ; A: byte thҩp cӫa kӃt quҧ)

4. LӋnh chia:
- Cú pháp: DIV AB

- Thӵc hiӋn: A : B = A dư B (A: chӭa phҫn nguyên; B: chӭa phҫn dư)

5. LӋnh tăng mӝt đơn vӏ:


- Cú pháp: INC <ĐÍCH>
Trong đó: <ĐÍCH> có thӇ là thanh ghi, ô nhӟ
- Thӵc hiӋn: <ĐÍCH> = <ĐÍCH> + 1
6. LӋnh giҧm mӝt đơn vӏ:
- Cú pháp: DEC <ĐÍCH>
Trong đó: <ĐÍCH> có thӇ là thanh ghi, ô nhӟ
- Thӵc hiӋn: <ĐÍCH> = <ĐÍCH> - 1
III. NHÓM LӊNH NHҦY:
1. LӋnh nhҧy không điӅu kiӋn:
a. Nhҧy gҫn:
- Cú pháp: SJMP
Trong đó: là mӝt tӯ, hay nhóm tӯ viӃt liӅn nhau, theo sau bҵng dҩu ´:´ dùng đӇ đánh dҩu
vӏ trí chương trình.
- Thӵc hiӋn: nhày không điӅu kiӋn đӃn vӏ trí chương trình đưӧc chӍ đӏnh bӣi , khoҧng
cách tӯ lӋnh đӃn không vưӧt quá 128 byte mã lӋnh.
b. Nhҧy xa:
- Cú pháp: LJMP
- Thӵc hiӋn: nhҧy đӃn vӏ trí đưӧc chӍ đӏnh bӣi , có thӇ nҵm ӣ bҩt kì vӏ trí nào trong
chương trình.
2. LӋnh nhҧy có điӅu kiӋn:
a. LӋnh so sánh và nhҧy nӃu không bҵng (compare and jump if not equal)
- Cú pháp:
CJNE A, ,
Trong đó có thӇ là thanh ghi, ô nhӟ hoһc #
- Thӵc hiӋn: So sánh A và , nӃu:
+ A  : nhҧy đӃn và nӃu:
. A > : bit C = 0
. A < : bit C = 1
+ A = : thӵc hiӋn lӋnh kӃ tiӃp
- Mӝt dҥng khác cӫa lӋnh:
CJNE Ri/@Rp, #,
b. LӋnh giҧm nӝi dung Ri mӝt đơn vӏ và nhҧy nӃu bҵng zero (decrement Ri by 1 and
jump if not zero):
- Cú pháp: DJNZ Ri,
- Thӵc hiӋn: Ri = Ri - 1, nӃu:
+ Ri > 0: nhҧy đӃn
+ Ri =0: thӵc hiӋn lӋnh kӃ tiӃp
c. LӋnh nhҧy phө thuӝc vào trҥng thái bit kiӇm tra:
- Cú pháp: JB/ JNB BIT,
Trong đó: BIT có thӇ là các bit cӫa mӝt thanh ghi hoһc các chân I/O cӫa vi điӅu khiӇn
- Thӵc hiӋn: nhҧy đӃn vӏ trí chương trình đưӧc chӍ đӏnh bӣi nӃu BIT bҵng 1 hoһc bҵng 0
d. LӋnh nhҧy thông qua viӋc kiӇm tra cӡ CARRY:
- Cú pháp: JC/ JNC
- Thӵc hiӋn: nhҧy đӃn vӏ trí chương trình đưӧc chӍ đӏnh bӣi nӃu C bҵng 1 hoһc bҵng 0
e. LӋnh nhҧy thông qua viӋc kiӇm tra cӡ ZERO:
- Cú pháp: JZ/ JNZ
- Thӵc hiӋn: nhҧy đӃn vӏ trí chương trình đưӧc chӍ đӏnh bӣi nӃu Z bҵng 1 hoһc bҵng 0
IV. NHÓM LӊNH LOGIC:
1. ANL A,
2. ORL A,
3. XRL A,
4. CLR A ; xóa nӝi dung thanh ghi A
5. CPL A ; đҧo các BIT trong thanh ghi A
6. NOP ; lӋnh không thӵc hiӋn, bӓ qua khi gһp lӋnh này
7. SWAP A ; đҧo vӏ trí 4 bit cao và 4 bit thҩp trong thanh ghi A
8 Nhóm lӋnh quay vòng:
a. Quay phҧi thanh ghi A
- Cú pháp: RR A

You might also like