3. TẬP LỆNH CỦA 8051
1. Các kiểu định địa chỉ.
-Khi một lệnh được thực thi và lệnh này yêu cầu
dữ liệu, một câu hỏi được đặt ra là "Dữ liệu chứa
ở đâu?" Câu trả lời cho câu hỏi này tạo ra các kiểu
(mode) định địa chỉ của 8051.
- Các kiểu định địa chỉ cho phép ta xác định rõ
nguồn và đích của dữ liệu theo nhiều cách khác
nhau phụ thuộc vào tình huống lập trình.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
• Bộ nhớ dữ liệu: RAM – 128 Byte
7F 7E 7D 7C 7B 7A 79 78
…
Byte address
7FH
2F
2E
RAM
đa mục đích
30H
2FH
RAM định địa
chỉ bit
20H
1FH
18H
17H
10H
0FH
08H
07H
00H
Bank 3
Bank 2
Bank 1 (Stack)
Default Register
Bank for R0-R7
R7
R6
R5
R4
R3
R2
1F
17
0F
07
1E 1D 1C 1B 1A
16 15 14 13 12
0E 0D 0C 0B 0A
06 05 04 03 02
19
11
09
01
…
18
10
08
00
20
Bit address
R1
R0
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Các kiểu định địa chỉ:
+ Tức thời (Immediate).
+ Thanh ghi (Register).
+ Trực tiếp (Direct).
+ Gián tiếp (Indirect).
+ Chỉ số (Indexed).
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Định địa chỉ tức thời (Immediate)
- Khi toán hạng nguồn là một hằng số thay vì là một biến và đây là
byte dữ liệu tức thời.
- Trước dữ liệu phải có dấu #
-Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng
dữ liệu 8-bit làm dữ liệu tức thời.
-Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng
dữ liệu 16-bit được cần đến.
Ví dụ:
MOV
MOV
MOV
MOV
A,#65H
R6,#55H
DPTR,#2343H
P1,#0FH
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Kiểu thanh ghi (Register)
- Sử dụng thanh ghi làm việc để lưu dữ liệu cần thao tác
Hợp ngữ của 8051 chỉ ra kiểu định địa chỉ thanh ghi bằng
ký hiệu Rn, trong đó n có giá trị từ 0 đến 7.
VD:
ADD A,R7.
- Thanh nguồn và đích phải phù hợp nhau về kích thước
- Không được phép chuyển trực tiếp giữa các thanh ghi Rn
với nhau
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Định địa chỉ trực tiếp (Direct)
-Địa chỉ của dữ liệu được chỉ ra trực tiếp trong lệnh.
-Chế độ định địa chỉ trực tiếp có thể dùng để truy cập toàn bộ
không gian của bộ nhớ trong RAM. Tuy nhiên, thực tế chế
độ này thường được dùng để truy cập các ngăn nhớ RAM từ
địa chỉ 30H đến 7FH.
-Cần phân biệt với chế độ định địa chỉ tức thời
-Các thanh ghi R0 đến R7 có thể truy cập bằng 2 cách: Thanh
ghi và trực tiếp
-Ngăn xếp và chế độ định địa chỉ trực tiếp
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Định địa chỉ gián tiếp (Indirect)
-Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có
trong bộ nhớ. Nếu dữ liệu ở trên chip thì các thanh ghi R0 và
R1 được sử dụng, hoạt động như những con trỏ (pointer).
-Kiểu định địa chỉ gián tiếp được nhận biết dựa vào ký hiệu
@.
Ví dụ:
dụ Ghi số 55H vào các ô nhớ từ 40H đến 44H trong RAM
MOV
MOV
MOV
INC
MOV
INC
A,#55H
R0,#40H
@R0,A
R0
@R0,A
R0
; Nạp vào A giá trị 55H
; Nạp vào con trỏ R0 = 40H
; Ghi A vào thanh ghi do R0 trỏ đến
; Tăng con trỏ. Bây giờ R0 = 41H
; Ghi A vào thanh ghi do R0 trỏ đến (41H)
; Tăng con trỏ. Bây giờ R0 = 42H
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
+ Định địa chỉ chỉ số.
- Sử dụng một thanh ghi nền (hoặc bộ đếm chương trình
hoặc con trỏ dữ liệu) và một offset (thanh chứa A) tạo
thành dạng địa chỉ hữu dụng cho lệnh JMP hoặc MOVC.
- Trong nhiều ứng dụng, các bảng nhảy hoặc các bảng tìm
kiếm được tạo ra dễ dàng bằng cách sử dụng kiểu định địa
chỉ chỉ số.
VD: Đọc giá trị từ x (0 đến 9) ở cổng P0 và xuất ra giá trị
bình phương ra cổng P1
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
2. Tập lệnh.
lệnh
Tập lệnh của 8051 được chia làm 5 nhóm
+ Nhóm lệnh số học.
+ Nhóm lệnh logic.
+ Nhóm lệnh di chuyển dữ liệu.
+ Nhóm lệnh xử lý bit.
+ Nhóm lệnh rẽ nhánh.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
1. Nhóm lệnh số học
LỆNH
ADD
ADD
ADD
ADD
ADD
A,source
A,Rn
A,direct
A,@Ri
A,#data
MÔ TẢ
Cộng toán hạng nguồn với A, kết
quả chứa trong A.
(A) (A) + (source)
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Nhóm lệnh số học (tiếp)
LỆNH
ADDC
ADDC
ADDC
ADDC
ADDC
A,source
A,Rn
A,direct
A,@Ri
A,#data
MÔ TẢ
Cộng đồng thời nội dung của
một byte ở địa chỉ được chỉ ra
trong lệnh với nội dung của thanh
chứa và cờ nhớ. Kết quả đặt vào
thanh chứa.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
(A) (A) + (C) + (Source)
[email protected]
Nhóm lệnh số học (tiếp)
LỆNH
SUBB
SUBB
SUBB
SUBB
SUBB
A,source
A,Rn
A,direct
A,@Ri
A,#data
MÔ TẢ
Trừ bớt nội dung của thanh chứa A
bởi nội dung của toán hạng chỉ ra
trong lệnh cùng với cờ nhớ và cất kết
quả vào thanh chứa.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
(A) (A) - (C) - (source)
[email protected]
Nhóm lệnh số học (tiếp)
LỆNH
INC
INC
INC
INC
INC
INC
source
A
Rn
direct
@Ri
DPTR
MÔ TẢ
(source) (source) + 1
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Nhóm lệnh số học (tiếp)
LỆNH
DEC
DEC
DEC
DEC
A
Rn
direct
@Ri
MÔ TẢ
(source) (source) - 1
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
Nhóm lệnh số học (tiếp)
LỆNH
MÔ TẢ
MUL AB
Nhân các số nguyên không dấu 8-bit chứa
trong A và B. Byte thấp của tích số 16-bit
cất trong A, byte cao cất trong B.
DIV AB
Chia số nguyên không dấu 8-bit chứa
trong A với số nguyên không dấu 8-bit chứa
trong B. Thương số cất trong A, còn số dư
cất trong B.
DA
Hiệu chỉnh thập phân nội dung của thanh
chứa đối với phép cộng.
A
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]
2. Nhóm lệnh Logic
LỆNH
ANL
ANL
ANL
ANL
ANL
ANL
ANL
des,source
A,Rn
A,direct
A,@Ri
A,#data
direct,A
direct,#data
MÔ TẢ
Thực hiện AND từng bit
giữa 2 toán hạng được chỉ ra
trong lệnh và lưu kết quả vào
toán hạng đích.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
(des) (des) AND (source)
[email protected]
Nhóm lệnh Logic (tiếp)
LỆNH
ORL
ORL
ORL
ORL
ORL
ORL
ORL
ORL
des,source
A,Rn
A,direct
A,@Ri
A,#data
direct,A
direct,#data
C,bit
MÔ TẢ
Thực hiện OR từng bit
giữa 2 toán hạng được chỉ ra
trong lệnh và lưu kết quả vào
toán hạng đích.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
(des) (des) OR (source)
[email protected]
Nhóm lệnh Logic (tiếp)
LỆNH
XRL
XRL
XRL
XRL
XRL
XRL
A,Rn
A,direct
A,@Ri
A,#data
direct,A
direct,#data
MÔ TẢ
Thực hiện XOR từng bit
giữa 2 toán hạng được chỉ ra
trong lệnh và lưu kết quả vào
toán hạng đích.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
(des) (des) XOR (source)
[email protected]
Nhóm lệnh Logic (tiếp)
CLR
LỆNH
A
Xóa A
CPL
A
Lấy bù A
RL
A
Quay trái A
RLC
A
Quay trái A kể cả cờ nhớ
RR
A
Quay phải A
RRC
A
Quay phải A kể cả cờ nhớ
SWAP A
MÔ TẢ
Hoán đổi 2 nibble (2 nửa 4-bit) của A
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
[email protected]