3. LẬP TRÌNH HỢP NGỮ
3.1. Khái niệm hợp ngữ.
+ Hợp ngữ
• CPU chỉ có thể làm việc với các số nhị phân , một chương
trình chứa các số 0 và 1 được gọi là ngôn ngữ máy.
• Các nguồn ngữ hợp ngữ đã được phát, đã cung cấp các từ gợi
nhớ cho các lệnh mã máy cộng với những đặc tính khác giúp
cho việc lập trình nhanh hơn và ít mắc lỗi hơn.
• Các chương trình hợp ngữ phải được dịch ra thành mã máy
bằng một chương trình được là trình hợp ngữ (hợp dịch).
• Hợp ngữ được coi như là một ngôn ngữ bậc thấp vì nó giao
tiếp trực tiếp với cấu trúc bên trong của CPU.
• Để lập trình trong hợp ngữ, lập trình viên phải biết tất cả các
thanh ghi của CPU và kích thước của chúng cũng như các chi
tiết khác.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.2. Cấu trúc hợp ngữ
+ Cấu trúc của hợp ngữ.
• Một chương trình hợp ngữ bao gồm một chuỗi các dòng
lệnh hợp ngữ.
• Một lệnh hợp ngữ có chứa một từ gợi nhớ (memonic)
Tùy theo từng lệnh mà sau nó có một hoặc hai toán
hạng.
• Các toán hạng là các dữ liệu cần được thao tác. Các từ
gợi nhớ thông báo CPU làm gì với các dữ liệu.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.2. Cấu trúc hợp ngữ
+ Cấu trúc của hợp ngữ.
ORG
00H
COUNT EQU
ORG
500H
DATA1: DB
MOV
MOV
MOV
; Bắt đầu (origin) tại ngăn nhớ 0
25
2BH
; Số thập phân (2B ở dạng Hex)
R5, #01101H
; Nạp 01101H vào R5
R7, #01101B
; Nạp 01101B vào R7
R6, #01101
; Nạp 01101 vào R6
Lap :
MOV
ADD
ADD
ADD
SJMP
END
lap
A, #0
; Nạp 0 vào thanh ghi A
A, R5
; Cộng nôi dụng R5 vào A (A = A + R5)
A, R7
; Cộng nội dung R7 vào A (A = A + R7)
A, #0AH ; Cộng giá trị 0AH vào A (A = A + 0AH)
; Nhảy đến vòng lặp này
; Kết thúc file nguồn hợp ngữ
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.2. Cấu trúc hợp ngữ
+ Cấu trúc câu lệnh của hợp ngữ
• Cấu trúc của một lệnh hợp ngữ có 4 trường như sau:
[nhãn:] [từ gợi nhớ]
[các toán hạng]
[; chú giải]
Ví dụ: Batdau: mov R0, #00H ; xóa thanh ghi R0
• Trường nhãn cho phép chương trình tham chiếu đến một
dòng lệnh bằng tên. Nó không được viết quá một số ký tự
nhất định.
• Từ gợi nhớ (lệnh) và các toán hạng là các trường kết hợp với
nhau thực thi công việc thực tế của chương trình và hoàn
thiện các nhiệm vụ mà chương trình được viết cho chúng.
• Trường chú thích luôn phải bắt đầu bằng dấu chấm phẩy (;).
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.2. Cấu trúc hợp ngữ
+ Chỉ lệnh của hợp ngữ
• Chỉ lệnh ORG: dùng để báo bắt đầu của địa chỉ.
• Số đi sau ORG có kể ở dạng Hex hoặc thập phân. Nếu số này có kèm
chữ H đằng sau thì là ở dạng Hex và nếu không có chữ H ở sau là số
thập phân và hợp ngữ sẽ chuyển nó thành số Hex. Một số hợp ngữ sử
dụng dấu chấm đứng trước “ORG” thay cho “ORG”.
• Chỉ lệnh EQU: Được dùng để định nghĩa một hằng số mà không chiếm
ngăn nhớ nào.
• Chỉ lệnh EQU không dành chỗ cất cho dữ liệu nhưng nó gắn một giá trị
hằng số với nhãn dữ liệu sao cho khi nhãn xuất hiện trong chương trình
giá trị hằng số của nó sẽ được thay thế đối với nhãn.
Ví dụ:
sang
tat EQU
EQU
0;
1;
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.2. Cấu trúc hợp ngữ
+ Chỉ lệnh của hợp ngữ
• Chỉ lệnh DB (định nghĩa byte): được dùng để định nghĩa dữ liệu 8
bit.
DATA1:
DATA2:
DATA3:
DB
DB
DB
2B
00110101B
39H
; Số thập phân (1C ở dạng Hex)
; Số nhị phân (35 ở dạng Hex)
; Số dạng Hex
•
Chỉ lệnh END: Nó báo cho trình hợp ngữ kết thúc của file nguồn
“asm” chỉ lệnh END là dòng cuối cùng của chương trình 8051
• Trong mã nguồn thì mọi thứ sau chỉ lệnh END để bị trình hợp ngữ
bỏ qua.
• Một số trình hợp ngữ sử dụng .END có dấu chấm đứng trước thay
cho END.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.2. Cấu trúc hợp ngữ
+ Lưu đồ thuật toán
•Công cụ trực quan để
diễn đạt các thuật toán.
•Biểu diễn thuật toán
bằng lưu đồ sẽ giúp
người đọc theo dõi được
sự phân cấp các trường
hợp và quá trình xử lý
của thuật toán.
•Phương pháp lưu đồ
thường được dùng trong
những thuật toán có tính
rắc rối, khó theo dõi
được quá trình xử lý.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
Bắt đầu/ kết thúc quá trìn
Vào/ ra dữ liệu
Thực thi
Ra quyết định
Bước tiếp theo
A
Nối với nhánh A
3.3. Các chế độ đị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.
-Dữ liệu có thể được chứa trong RAM, ROM
hoặc bộ nhớ ngoài.
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.3. Các chế độ định địa chỉ
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
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
R3
R2
Bit address
R1
R0
Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng
3.3. Các chế độ định địa chỉ
Đị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
3.3. Các chế độ định địa chỉ
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
3.3. Các chế độ định địa chỉ
Đị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
3.3. Các chế độ định địa chỉ
Đị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
3.3. Các chế độ định địa chỉ
+Định địa chỉ chỉ số (index).
- 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
3. Tập 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
3. Tập lệnh
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
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)
3. Tập lệnh
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)
3. Tập lệnh
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
3. Tập lệnh
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
3. Tập lệnh
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
3. Tập lệnh
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)
3. Tập lệnh
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)
3. Tập lệnh
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)