Tài liệu tham khảo Kỹ thuật Vi xử lý
GVHD: Trần Hoài Tâm
CHƯƠNG III: LẬP TRÌNH HỢP NGỮ
VÀ TÓM TẮT TẬP LỆNH
I. LẬP TRÌNH HỢP NGỮ:
Hợp ngữ (assembly language) là ngôn ngữ của máy tính có vị trí ở giữa ngôn ngữ máy
và ngôn ngữ cấp cao. Các ngôn ngữ cấp cao như Pascal, C sử dụng các từ và các phát biểu dễ
hiểu hơn. Ngôn ngữ máy (machine language) là ngôn ngữ ở dạng số nhị phân của máy tính.
Một chương trình viết bằng ngôn ngữ máy là một chuỗi các byte nhị phân biểu diễn các lệnh
mà máy tính thực thi được.
Hợp ngữ thay thế các mã nhị phân của ngôn ngữ máy bằng các mã gợi nhớ giúp ta dễ
nhớ và dễ lập trình hơn.
Ex : lệnh cộng có mã nhị phân là "10110011" được hợp ngữ thay thế bằng mã gợi nhớ
ADD
Một chương trình viết bằng hợp ngữ không thể được thực thi trực tiếp. Sau khi được viết
xong chương trình này phải được dịch thành ngôn ngữ máy.
Một chương trình viết bằng hợp ngữ là chương trình viết dưới dạng các ký hiệu, các mã
gợi nhớ … trong đó mỗi phát biểu tương ứng với một lệnh của ngôn ngữ máy.
Mỗi dòng lệnh được chia thành các trường cách biệt nhau bởi khoảng trắng hoặc Tab.
Khuôn dạng tổng quát của mỗi dòng lệnh như sau:
[ label: ]
mnemonic
[ operand ][,operand ][, … ]
[;comment]
Label: nhãn
thích các đặt trưng của chương trình.
II. TÓM TẮT TẬP LỆNH:
Cũng như các bộ vi xử lý 8 bit các lệnh của 8051 có các opcode 8 bit, do vậy số lệnh có
thể lên đến 256 lệnh (thực tế có 255 lệnh, 1 lệnh không được định nghĩa). Ngoài opcode một
số lệnh còn có thêm 1 hoặc 2 byte nữa cho dữ liệu hoặc địa chỉ. Tập lệnh có 139 lệnh 1 byte,
92 lệnh 2 byte và 24 lệnh 3 byte .
1. CÁC KIỂU ĐỊNH ĐỊA CHỈ:
Các kiểu định địa chỉ là phần cần thiết cho toàn bộ tập lệnh của mỗi một bộ vi xử lý, bộ
vi điều khiển. 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, có 8 kiểu định địa chỉ:
Thanh ghi (register)
Trực tiếp (direct)
Gián tiếp (indirect)
Tức thời (immediate)
Tương đối (relative)
Tuyệt đối (absolute)
Dài (long)
Chỉ số (index)
1.1. ĐỊNH ĐỊA CHỈ THANH GHI:
Kiểu định địa chỉ thanh ghi được ký hiệu là Rn, trong đó n có giá trị từ 0-7, A, DPTR,
15
Tài liệu tham khảo Kỹ thuật Vi xử lý
PC, C và cặp thanh ghi AB.
Ex:
GVHD: Trần Hoài Tâm
ADD A, R7
dụng các hằng số.
Ex :
MOV A, #12
MOV DPTR, #8000H
1.5. ĐỊNH ĐỊA CHỈ TƯƠNG ĐỐI:
Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địa chỉ tương đối
(còn được gọi là offset) là một giá trị 8 bit có dấu. Giá trị này được cộng với bộ đếm chương
trình để tạo ra địa chỉ của lệnh tiếp theo cần được thực thi.
16
Tài liệu tham khảo Kỹ thuật Vi xử lý
Ex : SJMP THERE
GVHD: Trần Hoài Tâm
DJNE …
CJNE …
Định địa chỉ tương đối có ưu điểm là cung cấp cho chúng ta mã không phụ thuộc vào vị
trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong phạm vi từ -128 byte đến 127
byte.
1.6. ĐỊNH ĐỊA CHỈ TUYỆT ĐỐI:
Kiểu định địa chỉ tuyệt đối chỉ được sử dụng với các lệnh ACALL và AJMP. Đây là các
lệnh 2 byte cho phép rẽ nhánh chương trình trong không gian 2K hiện hành của bộ nhớ
chương trình. Để không bị giới hạn ta có thể sử dụng lệnh LCALL, LJMP.
Ex :
LOOP:
GVHD: Trần Hoài Tâm
Rn: địa chỉ thanh ghi R0-R7
direct: địa chỉ 8 bit trong RAM nội (00H-0FH)
@Ri: địa chỉ gián tiếp sử dụng thanh ghi R0 hoặc R1
source: toán hạng nguồn - có thể là Rn, direct hoặc @Ri
destination: toán hạng đích - có thể là Rn, direct hoặc @Ri
#data: hằng số 8 bit ( Binary, Decimal, Hexa)
#data 16: hằng số 16 bit
bit: địa chỉ trực tiếp của một bit
rel: địa chỉ tương đối (offset) 8 bit
ex: nhãn
addr11: địa chỉ 11 bit trong trang hiện hành
addr16: địa chỉ 16 bit
2.1. CÁC LỆNH SỐ HỌC:
ADD A, source
: cộng toán hạng nguồn với A
ADD A, #data
ADDC A, source
: cộng toán hạng nguồn với A và cờ nhớ
ADDC A, #data
SUBB A, source
: trừ bớt A bởi toán hạng nguồn và số mượn (cờ nhớ)
SUBB A, #data
ANL A, #data
ANL direct, A
ANL direct, #data
18
Tài liệu tham khảo Kỹ thuật Vi xử lý
ORL A, source
: OR
GVHD: Trần Hoài Tâm
ORL A, #data
ORL direct, A
ORL direct, #data
XRL A, source
: XOR
XRL A, #data
XRL direct, A
XRL direct, #data
CLR A
: xóa thanh ghi A
CPL A
: lấy bù A
MOVC A, @A+DPTR
: di chuyển từ bộ nhớ chương trình
MOVC A, @A+PC
MOVX A, @Ri
: di chuyển từ bộ nhớ dữ liệu
MOVX A, @DPTR
MOVX @Ri, A
MOVX @DPTR, A
PUSH direct
: cất vào stack
POP direct
: lấy ra từ stack
XCH A, source
: trao đổi các byte
XCHD A, @Ri
: trao đổi các digit thấp
19
ORL C, /bit
: OR (NOT bit) với C
MOV C, bit
: di chuyển bit đến bit
MOV bit, C
JC rel
: nhảy nếu C bằng 1
JNC rel
: nhảy nếu C bằng 0
JB bit, rel
: nhảy nếu bit bằng 1
JNB bit, rel
: nhảy nếu bit bằng 0
JBC bit, rel
: nhảy nếu bit bằng 1 rồi xóa bit
CJNE A,#data, rel
CJNE Rn,#data, rel
20
Tài liệu tham khảo Kỹ thuật Vi xử lý
DJNZ Rn, rel
: giảm và nhảy nếu khác không
GVHD: Trần Hoài Tâm
DJNZ direct, rel
NOP
: không làm gì
III. CẤU TRÚC CHƯƠNG TRÌNH:
1. TỔ CHỨC CHƯƠNG TRÌNH:
Các phần của chương trình được sắp xếp theo trình tự sau :
Các phép gán
Các lệnh khởi động (thiết lập timer, ngắt, nạp các giá trị ban đầu …)
Thân chính của chương trình
Các chương trình con
Các định nghĩa hằng dữ liệu (DB và DW)
Gán:
Việc định nghĩa các hằng số bằng phát biểu gán làm cho chương trình dễ đọc và bảo trì
hơn. Các hằng số được dùng trong suốt chương trình bằng cách thay thế các giá trị bằng các ký
hiệu đã được gán. Khi chương trình được dịch thì các giá trị tương ứng được thay thế cho các
ký hiệu.
Chương trình con:
Tài liệu tham khảo Kỹ thuật Vi xử lý
BIT : chỉ dẫn BIT gán giá trị bit vào tên của ký hiệu.
Ex :
MOTOR
BIT
GVHD: Trần Hoài Tâm
P0.0
DB : chỉ dẫn DB dùng để gán một hằng số vào bộ nhớ chương trình, các biểu
thức theo sau có thể là một chuỗi của một hay nhiều giá trị byte. Chỉ dẫn DB cho
phép chuỗi ký tự (đặt trong hai dấu nháy đơn) dài hơn hai ký tự, mỗi ký tự trong
chuỗi được biến đổi thành mã ASCII. Nếu có một nhãn được dùng, nhãn được
gán địa chỉ của byte đầu tiên.
Ex :
SQUARES: DB
0, 1, 4, 9, 16, 25
MESSAGE: ' LAC HONG UNIVERSITY ', 0
; chuỗi ký tự kết thúc bởi 0
2. LƯU ĐỒ THUẬT GIẢI:
Lưu đồ thuật giải là các cộng cụ thường dùng cho các giai đoạn khởi đầu của lập trình
hợp ngữ. Lưu đồ thuật giải là công cụ trực quan giúp ta dễ dàng trình bày và hiểu chương trình
hợp ngữ một cách hệ thống. Lưu đồ thuật giải cho phép một yêu cầu được mô tả dưới dạng
MOV @R0, A
INC R0
CJNE R0, #61H, LOOP
END
23