Download as pdf or txt
Download as pdf or txt
You are on page 1of 26

CHƯƠNG 3

TẬP LỆNH
MCS - 51
Chương 3
TẬP LỆNH HỌ VI ĐIỀU KHIỂN MCS-51
I. Giới thiệu:
Tập lệnh của họ MCS-51 được tối ưu hóa cho các ứng dụng
điều khiển 8 bit.
Tập lệnh có 255 lệnh gồm:
- 139 lệnh 1 byte
- 92 lệnh 2 byte
- 24 lệnh 3 byte
- Đa số các lệnh qua A, bank thanh ghi, xử lý bit dài 1MC,
các lệnh khác 2MC, lệnh nhân/chia 4MC

Bài giảng môn Vi xử lý 2


GV: Lê Thị Kim Anh
Ý nghĩa các ký hiệu viết tắt trong tập lệnh
Ký hiệu Ý nghĩa
Rn Định địa chỉ thanh ghi bằng các thanh ghi R0 đến R7
direct Địa chỉ trực tiếp 8 bit (00H đến FFH)
@Ri Định địa chỉ gián tiếp dùng thanh ghi R0 hoặc R1
#data Hằng số 8 bit. Chú ý: với các số HEX nếu bắt đầu bằng chữ thì
phải thêm số 0 phía trước chữ đó.
#data16 Hằng số 16 bit. Chú ý: với các số HEX nếu bắt đầu bằng chữ
thì phải thêm số 0 phía trước chữ đó.
rel Offset 8 bit có dấu trong định địa chỉ tương đối
addr11 Định địa chỉ tuyệt đối 11 bit trong trang 2K hiện hành
addr16 Địa chỉ 16 bit
src Toán hạng nguồn (source), có thể là Rn, direct,#data hoặc @Ri
dest Toán hạng đích (destination), có thể là Rn, direct hoặc @Ri
X Nội dung của X. Ví dụ: A  nội dung của thanh ghi A
(X) Nội dung ô nhớ có địa chỉ là nội dung của X. Ví dụ: (20H) 
nội dung ô nhớ có địa chỉ 20H
Tham khảo tập lệnh

Mnemonic: cú pháp lệnh


Instruction code: định dạng mã máy
Hexa-Decimal: mã máy(số hex)
Explanation: Thao tác của lệnh
No. of MC: thời gian thực thi lệnh

Bài giảng môn Vi xử lý 4


GV: Lê Thị Kim Anh
II. CÁC PHƯƠNG PHÁP ĐỊNH ĐỊA CHỈ
- Tức thời (Immediate)
- Thanh ghi (Register)
- Trực tiếp (Direct)
- Gián tiếp (Indirect)
- Tương đối (Relative)
- Tuyệt đối (Absolute)
- Dài (Long)
- Chỉ số (Index)

Bài giảng môn Vi xử lý 5


GV: Lê Thị Kim Anh
ĐỊNH ĐỊA CHỈ TỨC THỜI (#data, #data16)
- Toán hạng là một hằng số, sử dụng dấu #.
MOV A,#0C4H
MOV DPTR,#2000H
- Định dạng mã lệnh cho pp này là 2 byte , trừ trường hợp data16

Ví dụ
MOV A,#0C4H
 Mã máy: 74 C4

MOV DPTR,#2000H
 Mã máy: 98 20 00
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh 6
ĐỊNH ĐỊA CHỈ THANH GHI (Rn)
- Toán hạng là nội dung của một thanh
ghi.
MOV A, R1

- Định dạng mã lệnh cho pp này là 1


byte.
Ví dụ
MOV A,R1

 Mã máy: E9

Bài giảng môn Vi xử lý 7


GV: Lê Thị Kim Anh
ĐỊNH ĐỊA CHỈ TRỰC TIẾP (direct)
Truy xuất đến RAM nội và các thanh ghi chức năng đặc biệt
(ACC(E0H),PSW(D0H),P1(90H), P0(80H)…)

Vùng RAM đa
dụng

Vùng
RAM
định vị
bit

Vùng
bank
thanh
ghi
Các thanh ghi chức năng đặc biệt
ĐỊNH ĐỊA CHỈ TRỰC TIẾP (direct)

- Toán hạng là nội dung của một ô nhớ có địa chỉ là direct.
MOV A, 40H
MOV A, PSW
- Định dạng mã lệnh cho pp này là 2 byte.

Ví dụ
MOV A, 40H
 Mã máy: E5 40
MOV A, PSW
 Mã máy: E5 D0

Bài giảng môn Vi xử lý 9


GV: Lê Thị Kim Anh
SỰ KHÁC NHAU GIỮA PHƯƠNG PHÁP ĐỊNH ĐỊA CHỈ
TRỰC TIẾP VÀ TỨC THỜI

MOV A,30H MOV A,#30H

A 30H A 0 0 1 1 0 0 0 0

Trực tiếp Tức thời

Bài giảng môn Vi xử lý 10


GV: Lê Thị Kim Anh
SỰ TƯƠNG ĐƯƠNG LỆNH KHI DÙNG CÁC PHƯƠNG PHÁP
ĐỊNH ĐỊA CHỈ KHÁC NHAU
MOV A,07H  MOV A,7  MOV A,R7
MOV 07H,06H  MOV 7,6 ≠ MOV R7,R6

Bài giảng môn Vi xử lý 11


GV: Lê Thị Kim Anh
ĐỊNH ĐỊA CHỈ GIÁN TIẾP (@Ri (i=0,1), @DPTR)
- Toán hạng là nội dung của một ô nhớ có địa chỉ chứa trong thanh ghi.

Internal RAM
R1 0 0 1 1 0 0 0 0
7FH

A 30H 1 1 1 1 0 0 0 0

MOV R1,#30H 00H


MOV A,@R1
- Định dạng mã lệnh cho pp này là 1 byte.
Ví dụ
MOV A, @R1
 Mã máy: E7

Bài giảng môn Vi xử lý 12


GV: Lê Thị Kim Anh
SỰ KHÁC NHAU GIỮA PHƯƠNG PHÁP ĐỊNH ĐỊA CHỈ
THANH GHI VÀ GIÁN TIẾP

MOV A,R1
A R1
Thanh ghi

Internal RAM
R1
7FH
MOV A,@R1
Gián tiếp A

00H

Bài giảng môn Vi xử lý 13


GV: Lê Thị Kim Anh
ĐỊNH ĐỊA CHỈ TƯƠNG ĐỐI (rel)
- Toán hạng là một offset (độ dời có dấu 8 bit)
- Được sử dụng trong các lệnh nhảy ngắn hoặc rẽ nhánh:
SJMP, CJNE, DJNZ, JB, JNB …
- Phạm vi thực hiện : -128 ~ +127
- Cách tính offset (độ dời):

offset = byte thấp của(đ.chỉ nhảy đến – đ.chỉ lệnh kế (PCHH)) = rel

Bài giảng môn Vi xử lý 14


GV: Lê Thị Kim Anh
Ví dụ
BNCT PCHH CHƯƠNG TRÌNH PHẠM VI
0000H 0000H
……….. …… ……………. …
0F82H
BACK1:
….. (-128)
1000H 1000H SJMP BACK1 hoặc BACK2 BACK1
1002H …. 1002H
BACK2: BACK2
(+127)
…..
1081H
….

FFFFH
- Định dạng mã lệnh cho pp này là 2 byte.

Ví dụ
SJMP LABEL
Giả sử lệnh này được lưu trong
bộ nhớ tại vị trí 0100H và
0101H như hình bên. LABEL
được đặt tại địa chỉ 0107H

rel = byte thấp(LABEL – PCHH)


= 0107 – 0102 = 05
 Mã máy: 80 05
Trường hợp offset là một số âm

LABEL

PCHH

rel = byte thấp (LABEL – PCHH) = 2038 – 2042 = F6H (-10)


 Mã máy: 80 F6

Bài giảng môn Vi xử lý 17


GV: Lê Thị Kim Anh
ĐỊNH ĐỊA CHỈ TUYỆT ĐỐI (addr11)
- Được sử dụng trong AJMP, ACALL
- Phạm vi: mỗi trang 2K với địa chỉ PC của lệnh kế.

Bài giảng môn Vi xử lý 18


GV: Lê Thị Kim Anh
Ví dụ
BNCT PCHH CHƯƠNG TRÌNH PHẠM VI
0000H 0000H
……….. …… 0FFFH
1000H 1000H 1000H
….. …….
1006H 1006H ACALL DELAY DELAY
1008H ….

….
END
….. 17FFH
1800H
……

FFFFH
- Định dạng mã lệnh cho pp này là 2 byte.

Ví dụ
BNCT PCHH CHƯƠNG TRÌNH
0000H 0000H
……….. ……
2000H 2000H
…. ….. …….
2006H 2006H ACALL DELAY
2008H ….
….
END

Xem lệnh ACALL trong chương trình trên, phạm vi của nhãn DELAY sẽ
chỉ được phép nằm trong trang nào của bộ nhớ chương trình. Giả sử nhãn
DELAY đặt tại địa chỉ 20FFH thì có hợp lý không, khi đó mã máy được
tính là gì?
Địa chỉ nhãn: DELAY = 20FFH

addr11

a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0


0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1

 Mã máy: 11 FF
ĐỊNH ĐỊA CHỈ DÀI (addr16)
- Được sử dụng trong LJMP, LCALL
- Phạm vi: 64K.
Ví dụ
LJMP LABEL

LCALL SUBROUTINE

Trong đó:
LABEL và SUBROUTINE được phép đặt ở bất cứ vị trí nào
trong 64K bộ nhớ chương trình.

Bài giảng môn Vi xử lý 22


GV: Lê Thị Kim Anh
- Định dạng mã lệnh cho pp này là 3 byte.

Ví dụ
Hãy xác định mã máy cho lệnh LJMP MAIN, biết rằng nhãn
MAIN được đặt tại địa chỉ 2040H.

 Mã máy: 02 20 40
ĐỊNH ĐỊA CHỈ CHỈ SỐ (@A + DPTR , @A + PC)
- Sử dụng một thanh ghi nền (PC, DPTR) và một offset (thanh
ghi A) tạo thành địa chỉ hiệu dụng cho lệnh MOVC hoặc JMP.
- Ví dụ như các lệnh sau:
MOVC A, @A+DPTR (addr = DPTR + A)
MOVC A, @A+PC (addr = PC +A)
JMP @A+DPTR (addr = DPTR + A)
- PP này có mã lệnh cố định, địa chỉ của toán hạng được xác định bởi:

Ví dụ: với thanh ghi nền là DPTR


BNCT PCHH CHƯƠNG TRÌNH
0000H 0000H
……….. …… ………..
1000H 1000H MOV A, #n(0÷255)
…. 1002H MOV DPTR, #TAB
1005H 1005H MOVC A,@A+DPTR
1006H ….
……….
10F0H TAB: DB data1,data2,data3…
END

MOVC A,@A+DPTR : DPTR = 10F0H, giả sử n = 0


 Địa chỉ thật = 10F0H + 0 = 10F0H
 A = data1
Ví dụ: với thanh ghi nền là PC
BNCT PCHH CHƯƠNG TRÌNH
0000H 0000H
……….. …… ………..
1000H 1000H MOV A, #n(0÷255)
1002H ACALL READ_TABLE
…….. …………
1080H READ_TABLE: INC A
1081H MOVC A,@A+PC
1082H RET
1083H TAB: DB data1,data2,data3…
…..

MOVC A,@A+PC : PCHH = 1082H, giả sử n = 0


 Địa chỉ thật = 1082H + 1 = 1083H
 A = data1

You might also like