- H ệ lệnh của MC : Là tập các lệnh mà người lập trình có thể sử dụng ñể lập trình, và người lập trình chỉ có thể sử dụng các lệnh trong hệ lệnh mà thôi.. Các chữ viết tắt dùng trong tập
Trang 1GV LÊ TIẾN DŨNG
Bộ môn Tự ựộng hóa Ờ Khoa điện
Trường đại học Bách khoa Ờ đại học đà Nẵng
Trang 3CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.1 Mở ñầu.
- Ch ương trình là chuỗi các lệnh mà MC phải xử lý, thực hiện.
- L ập chương trình là soạn thảo các lệnh bằng ngôn ngữ lập
trình ñể thực hiện một algorith (thuật toán) cụ thể.
Chương trình = Thuật toán + Cơ sở dữ liệu.
- Ch ương trình dịch : Ví dụ Assembler, thực hiện dịch từ mã ngữ sang mã máy.
- H ệ lệnh của MC : Là tập các lệnh mà người lập trình có thể sử dụng ñể lập trình, và người lập trình chỉ có thể sử dụng các lệnh trong hệ lệnh mà thôi.
- Mỗi họ MC có một tập lệnh riêng, chương trình viết cho MC họ nào thì chỉ chạy cho họ ñó.
Trang 4* Mã máy : Mỗi một lệnh tương ứng với một mã
nhị phân gọi là mã lệnh, do nhà sản xuất quy ñịnh MC chỉ hiểu
ñược các lệnh ở dạng mã máy Các lệnh có thể chiếm 1 byte, 2 byte hoặc 3 byte.
* Mã ng ữ : Các lệnh ñược mô tả ở dạng biểu trưng (Symbol) Symbol có thể là từ viết tắt như MOV, ADD, hoặc là ký hiệu các khối chức năng ở dạng Graphic.
Trang 5CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.1 Mở ñầu.
Các chữ viết tắt dùng trong tập lệnh
Rn : ðịnh ñịa chỉ thanh ghi sử dụng R0 - R7.
direct : ðịa chỉ trực tiếp 8 bit trong RAM nội (00H-FFH).
@Ri : ðịnh ñị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, hoặc direct hoặc @Ri dest : Toán hạng ñích, có thể là Rn, hoặc direct hoặc @Ri.
Trang 6bit : ðịa chỉ trực tiếp (8 bit) của 1 bit.
rel : offset 8-bit có dấu.
addr11 : ðịa chỉ 11 bit trong trang hiện hành.
ddr16 : ðịa chỉ 16 bit.
Trang 7Ví dụ: 01010101B
Trang 8CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.1 Mở ñầu.
CÁCH VIẾT SỐ
- Số Hexa: Số hex khi viết cần thêm phía sau giá trị
bằng kí tự "H" Nếu sô hex bắt ñầu là A,B,C,D,E,F thì cần thêm số "0" phía trước ñể trình biên dịch nhận biết ñược ñó là số Hex, không lầm giá trị số với các kí tự chữ khác
Số hex là cách viết ngắn gọn của số nhị phân.
Ví dụ : 69H, 0A3H
Cách viết khác : 0x69, 0xA3;
Trang 9sử dụng
Ví dụ : 45, 27, 68D
Trang 10CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 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
Trang 11+ Tuyệt ñối (Absolute).
+ Dài (Long).
+ Chỉ số (Indexed).
Trang 12CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 Các kiểu ñịnh ñịa chỉ.
+ Kiểu thanh ghi (Register).
Người lập trình 8051 có thể truy xuất 8 thanh ghi làm việc ñược ñánh số từ R0 ñến R7 Có 4 dãy thanh ghi "làm việc" nhưng ở một thời ñiểm chỉ có một dãy tích cực Ta dùng bit 3 và 4 của từ trạng thái chương trình PSW ñể chỉ
ra dãy thanh ghi tích cự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.
Trang 13CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 Các ki ể u ñị 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.
Ví dụ :
MOV 40H,A
MOV 40H,A ; Chuyển nd A vào thanh ghi có ñịa chỉ 40H
- 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
Trang 14CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 Các ki ể u ñị 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ụ ụ: MOV A,#55H ; Nạp vào A giá trị 55H
MOV R0,#40H ; Nạp vào con trỏ R0 = 40H MOV @R0,A ; Ghi A vào thanh ghi do R0 trỏ ñến INC R0 ; Tăng con trỏ Bây giờ R0 = 41H MOV @R0,A ; Ghi A vào thanh ghi do R0 trỏ ñến (41H) INC R0 ; Tăng con trỏ Bây giờ R0 = 42H
Trang 15CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 Các ki ể u ñị 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, hằng số này có thể ñưa vào lệnh và ñây là byte dữ liệu tức thời.
- Trong hợp ngữ, các toán hạng tức thời ñược nhận biết nhờ vào ký tự
# ñặt trước chúng 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 A,#65H
MOV R6,#55H MOV DPTR,#2343H MOV P1,#0FH
Trang 16CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 Các ki ể u ñị nh ñị a ch ỉ. ỉ
+ ðịnh ñịa chỉ tương ñối, ñịnh ñịa chỉ tuyệt ñối, ñịnh ñịa chỉ dài.
- ðược sử dụng cho các lệnh nhảy.
- Một ñịa chỉ tương ñối (hay còn 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 Tầm nhảy ñược giới hạn là -128 byte ñến 127 byte (8-bit có dấ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 trang 2K hiện hành của bộ nhớ chương trình.
- Kiểu ñịnh ñịa chỉ dài chỉ ñược dùng cho các lệnh LCALL và LJMP Các lệnh 3 byte này chứa ñịa chỉ ñích 16-bit
Trang 17CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.2 Các ki ể u ñị nh ñị a ch ỉ. ỉ
+ ðị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ố
Trang 20(A) ← ← (A) + (C) + (Source)
Trang 21(A) ← ← (A) - (C) - (source)
Trang 24Chia 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
DIV 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
MUL AB
MÔ TẢ LỆNH
Trang 25Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte
Thời gian thực hiện : 1 chu kì máy
Công dụng : Cộng giá trị dữ liệu trên thanh ghi A với giá trị
dữ liệu trên thanh ghi Rn, sau khi thực hiện lệnh kết quả ñược lưu ở thanh ghi A Lệnh này có ảnh hưởng ñến thanh ghi từ trạng thái chương trình PSW
Trang 26Kết quả : A = #0A3h R6 = #0BAh
Cờ C = 1
Trang 27(des) ← ← (des) AND (source)
Trang 28(des) ← ← (des) OR (source)
Trang 29(des) ← ← (des) XOR (source)
Trang 30Quay phải A
RR A
Quay trái A kể cả cờ nhớ RLC A
Quay trái A
RL A
Lấy bù A CPL A
Xóa A CLR A
MÔ TẢ LỆNH
Trang 36OR bit với C
OR NOT bit với C
Di chuyển bit ñến bit
Trang 38MÔ TẢ LỆNH
Trang 39JB bit,rel
Nhảy ñến ñịa chỉ(hoặc nhãn) chỉ ra trong
lệnh nêú nội dung A khác 0.
Jump if A Not Zero
JNZ rel
Nhảy ñến ñịa chỉ(hoặc nhãn) chỉ ra trong
lệnh nêú nội dung A bằng 0.
Jump if A Zero
JZ rel
MÔ TẢ LỆNH
Trang 40JBC bit,rel
Nếu bit ñược chỉ ra trong lệnh bằng 0, nhảy ñến ñịa chỉ ñược chỉ ra trong lệnh Ngược lại, thực hiện lệnh tiếp theo.
JNB bit,rel
MÔ TẢ LỆNH
Trang 41CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
3.3 T ậ p l ệ nh nh
5 Nhóm lệnh ñiều khiển rẽ nhánh
So sánh và nhảy ñến ñịa chỉ (hoặc
label) ñược chỉ ra trong lệnh nếu dest
và source không bằng nhau Nếu
bằng nhau, thực hiện lệnh tiếp theo.
Compare and jump if not equal
CJNE dest,source,rel
CJNE A,direct,rel CJNE A,#data,rel CJNE @Ri,#data,rel
CJNE Rn,#data,rel
MÔ TẢ LỆNH
Trang 42MÔ TẢ LỆNH
Trang 43CH ƯƠNG 3:
TÓM TẮT TẬP LỆNH
Bài t ậ p chương 2 2.
Trang 44THANK YOU !
SEE YOU IN NEXT CHAPTER.