Trình dịch hợp ngữ assembler cần thiết ñể dịch các mã gợi nhớ của lệnh thành các mã nhị phân của ngôn ngữ máy... MỞ ðẦU Hơn nữa có thể yêu cầu một trình liên kết linker ñể kết hợp các ph
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 2CH ƯƠNG 7
LẬP TRÌNH HỢP NGỮ
Trang 3NỘI DUNG CHƯƠNG 7
1 MỞ ðẦU
2 TRÌNH DỊCH HỢP NGỮ
3 KHUÔN DẠNG CỦA TRÌNH DỊCH HỢP NGỮ
4 CẤU TRÚC CHƯƠNG TRÌNH
Trang 41 MỞ ðẦU
Hợp ngữ (Assembly Language programming) 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 ñiển hình như Pascal, C sử dụng các
từ và các phát biểu dễ hiểu ñối với con người
Ngôn ngữ máy 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.
Trang 51 MỞ ðẦU
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ớ hơn và dễ lập trình hơn
Một chương trình viết bằng hợp ngữ không thể ñược thực thi trực tiếp bởi máy tính Sau khi viết xong, chương trình này phải trải qua quá trình dịch thành ngôn ngữ máy Trình dịch hợp ngữ (assembler) cần thiết ñể dịch các mã gợi nhớ của lệnh thành các mã nhị phân của ngôn ngữ máy
Trang 61 MỞ ðẦU
Hơn nữa có thể yêu cầu một trình liên kết (linker) ñể kết hợp các phần của chương trình ở các tập tin riêng rẽ và thiết lập ñịa chỉ trong bộ nhớ nơi mà chương trình ñược thực thi
CÁC ðỊNH NGHĨA:
- Một chương trình viết bằng hợp ngữ là chương trình ñược viết dưới dạng các ký hiệu, các mã gợi nhớ… trong ñó mỗi một phát biểu tương ứng với một lệnh của ngôn ngữ máy
Trang 71 MỞ ðẦU
dùng ñể dịch một chương trình hợp ngữ thành chương trình ngôn ngữ máy.
- Một segment là một ñơn vị của bộ nhớ chương
trình hoặc bộ nhớ dữ liệu.
- Một module chứa một hoặc nhiều segment Một
module ñược gán một tên bởi người sử dụng.
Trang 82 TRÌNH DỊCH HỢP NGỮ
Có nhiều trình dịch hợp ngữ và các chương trình hỗ trợkhác cho phép ta dễ dàng phát triển các ứng dụng trên chip
vi ñiều khiển 8051
Phần mềm Keil µsion3 là một phần mềm phép soạn thảo, lập trình cho chip 8051 của các hãng khác nhau Chương trình hỗ trợ biên dịch từ hợp ngữ, C sang mã máy, cho phép liên kết nhiều file chương trình với nhau, hỗ trợ
mô phỏng, gỡ rối …
Trang 93 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
Trang 103 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
Các l ệnh: Các mã gợi nhớ.
Các ch ỉ dẫn của trình dịch hợp ngữ: Là các lệnh của trình dịch
hợp ngữ dùng ñể ñịnh nghĩa cấu trúc chương trình, các ký hiệu, dữ liệu, hằng số v.v (như là ORG).
Các ñiều khiển của trình dịch hợp ngữ: Thiết lập các chế ñộ của
trình dịch hợp ngữ và các luồng dịch trực tiếp (như là $TITLE).
Các chú thích: Giúp cho chương trình dễ ñọc bằng cách ñưa ra các giải thích về mục ñích và hoạt ñộng của các chuỗi lệnh.
Trang 113 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
Các dòng chứa các lệnh và các chỉ dẫn phải ñược viết theo các quy luật mà trình dịch hợp ngữ hiểu ñược Mỗi một dòng ñượ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 một dòng như sau:
[Nhãn:] Mã gợi nhớ [Toán hạng][,Toán hạng][… ] [;Chú thích]
Trang 123 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
1 Trường nhãn:
- Nhãn hiển thị ñịa chỉ của lệnh (hoặc dữ liệu) theo sau Khi có sự rẽ nhánh ñến lệnh này, nhãn ñược chỉ ra trong trường hợp toán hạng của lệnh rẽ nhánh hoặc nhảy.
- Nhãn là một loại ký hiệu và ñược nhận dạng bằng dấu : (kết thúc nhãn).
- Một ký hiệu (hoặc nhãn) phải bắt ñầu bằng một ký tự chữ hoặc
dấu hỏi (?) hoặc dấu nối dưới ( _ ) và tiếp theo phải là các ký tự
chữ, các số, dấu “?” hoặc “_”, có thể dài 31 ký tự dưới dạng chữ thường hoặc chữ in Không ñược trùng với các từ khóa (các mã gợi nhớ, các chỉ dẫn, các toán tử hoặc các ký hiệu tiền ñịnh nghĩa).
Trang 133 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
2 Trường mã gợi nhớ:
- Mã gợi nhớ của các lệnh ví dụ: MOV, ADD, DIV …
- Mã gợi nhớ của chỉ dẫn ví dụ: ORG, EQU hoặc DB
3 Trường toán hạng:
- Chứa ñịa chỉ hoặc dữ liệu mà lệnh sẽ sử dụng
- Các khả năng của trường toán hạng phụ thuộc vào lệnh
Có lệnh không có trường toán hạng (ví dụ lệnh RET) trong khi các lệnh khác cho nhiều toán hạng cách nhau bởi dấu phẩy
Trang 144 Trường chú thích:
-Các ghi chú ñể làm rõ chương trình ñược ñặt trong trường chú thích ở cuối dòng lệnh Các chú thích cần ñược bắt ñầu bằng dấu “;”
5 Các ký hiệu ñặc biệt:
- Các ký hiệu ñặc biệt ñược dùng cho các kiểu ñịnh ñịa chỉthanh ghi Các ký hiệu này bao gồm A, R0 ñến R7, DPTR, PC, C và AB Dấu $ cũng là một ký hiệu ñặc biệt ñược dùng ñể tham chiếu ñến giá trị hiện hành của bộ ñếm
vị trí
Trang 153 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
6 ðịa chỉ gián tiếp:
-Với một số lệnh, trường toán hạng có thể xác ñịnh một
thanh ghi mà nội dung của thanh ghi là ñịa chỉ của dữ
liệu Dấu @ chỉ ra một ñịa chỉ gián tiếp và thanh ghi theo
sau có thể là R0, R1, DPTR hoặc PC tùy vào lệnh cụ thể
7 Dữ liệu tức thời:
- Các lệnh sử dụng kiểu ñịnh ñịa chỉ tức thời cung cấp dữliệu trong trường toán hạng và dữ liệu này trở thành một phần của lệnh Dữ liệu tức thời ñược ñứng trước bởi dấu #
Trang 163 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
8 ðịa chỉ dữ liệu:
-Nhiều lệnh truy xuất các vị trí nhớ bằng cách sử dụng kiểu ñịnh ñịa chỉ trực tiếp và yêu cầu một ñịa chỉ của bộ nhớ dữ
liệu trên chip (00H – 7FH) hoặc ñịa chỉ của một thanh ghi
ñặc biệt SFR (80H – FFH) trong trường toán hạng Các ký hiệu ñặc biệt có thể ñược dùng thay cho ñịa chỉ các thanh ghi ñặc biệt SFR Ví dụ:
MOV A,45H
MOV A,SBUF ; tương ñương lệnh MOV A,99H
Trang 173 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
8 ðịa chỉ bit:
- Một trong các ñặc trưng mạnh của 8051 là khả năng truy xuất các bit riêng rẽ mà không cần thao tác lập mặt nạ trên các byte
- Các lệnh truy xuất các vị trí ñược ñịnh ñịa chỉ bit phải cung cấp ñịa chỉ bit trong bộ nhớ dữ liệu nội (00H-7FH) hoặc ñịa chỉ bit trong các thanh ghi SFR (80H-FFH)
Trang 183 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
8 ðịa chỉ bit:
-Có 3 cách ñể xác ñịnh ñịa chỉ bit trong 1 lệnh:
1 ðịa chỉ bit ñã biết trước.
2 Sử dụng toán tử dot (.) giữa ñịa chỉ byte và vị trí bit.
3 Sử dụng ký hiệu tiền ñịnh nghĩa.
SETB 0E7H; ñịa chỉ biết trước SETB ACC.7; sd toán tử dot (.) JNB TI,$; TI là kí hiệu tiền ñịnh nghĩa
JNB 99H,$; Tương ñương với lệnh trên
Trang 193 KHUÔN DẠNG CỦA CHƯƠNG TRÌNH HỢP NGỮ
9 ðịa chỉ của lệnh:
Một ñịa chỉ của lệnh ñược dùng trong trường toán hạng cho các lệnh nhảy, bao gồm các lệnh nhảy tương ñối (SJMP và các lệnh nhảy có ñiều kiện), các lệnh nhảy và gọi tuyệt ñối (ACALL, AJMP) và các lệnh nhảy và gọi dài (LJMP, LCALL)
ðịa chỉ của lệnh thường cho dưới dạng nhãn Ví dụ:
HERE: …….
…….
Trang 204 CẤU TRÚC CHƯƠNG TRÌNH
Lập trình có cấu trúc (Structured programming) là kỹthuật dùng ñể tổ chức và viết chương trình sao cho giảm ñược ñộ phức tạp, cải thiện tính rõ ràng của chương trình ñồng thời dễ dàng gỡ rối, sửa chữa cũng như thay ñổi
Khả năng của phương pháp lập trình có cấu trúc có thể ñược ñánh giá bằng cách khảo sát phát biểu sau: mọi chương trình ñều có thể ñược viết chỉ sử dụng 3 cấu trúc:
“Các phát biểu”,”Các vòng lặp” và “Các lựa chọn”
Trang 21Một cách ñiển hình, một chương trình có cấu trúc chứa một trật tự có thứ bậc các chương trình con, mỗi chương trình con có một ñiểm nhập và một ñiểm thoát.
Trang 22Cả 2 phương pháp lưu ñồ và giả mã ñều là những
công cụ trực quan giúp ta dễ dàng trình bày và hiểu các bài tập một cách có hệ thống Cả 2 cho phép một bài
tập ñược mô tả dưới dạng “ñiều gì phải thực hiện” hơn
là “thực hiện bằng cách nào”.
Trang 234 CẤU TRÚC CHƯƠNG TRÌNH
Thông thường lời giải có thể ñược biểu diễn dưới dạng các lưu ñồ hoặc giả mã ở dạng các thuật ngữ ñộc lập với máy, không cần khảo sát những rắc rối khó hiểu của tập lệnh máy.
Có thể ta không sử dụng cả 2 phương pháp: giả mã
và lưu ñồ Việc lựa chọn phương pháp nào cho thích hợp tùy thuộc vào cá nhân của người lập trình.
Các ký hiệu thường dùng nhất cho việc lập lưu ñồ ñược trình bày như sau:
Trang 244 CẤU TRÚC CHƯƠNG TRÌNH
s
ñ
: Khối ñiều kiện
: ñường ñi của CT
: Hộp xử lý, thao tác.
: Khối xuất/nhập
: Khối kết thúc hoặc bắt ñầu CT.
: Khối kết nối qua trang.
: Xử lý tiền ñịnh nghĩa (chương trình con)
Trang 25ƯU VÀ KHUYẾT ðIỂM CỦA LẬP TRÌNH CÓ CẤU TRÚC
Trang 26ƯU VÀ KHUYẾT ðIỂM CỦA LẬP TRÌNH CÓ CẤU TRÚC
- Chỉ có một vài ngôn ngữ cấp cao như Pascal, C… chấp nhận trực tiếp các cấu trúc, các ngôn ngữ cấp cao khác yêu cầu thêm một giai ñoạn dịch nữa.
- Các chương trình có cấu trúc thực thi chậm hơn và ñòi hỏi nhiều
bộ nhớ hơn so với 1 CT tương ñương nhưng không có cấu trúc.
- Một số vấn ñề sẽ gặp khó khăn khi giải quyết nếu ta chỉ sử dụng
3 cấu trúc ñể lập trình.
- Các cấu trúc lồng vào nhau cũng có khó khăn ñi kèm.
Trang 28BA CẤU TRÚC
Các phát biểu cung cấp cho ta cơ chế cơ bản
gồm việc gán giá trị cho một biến, hoặc gọi một chương trình con …
Bất cứ nơi nào mà một phát biểu ñơn ñược sử dụng, ta ñều có thể sử dụng một nhóm các phát biểu hay khối phát biểu (statement block)
4.1 Các phát biểu
Trang 29BA CẤU TRÚC
Cấu trúc cơ bản thứ 2 là vòng lặp, cấu trúc này ñược dùng ñể lặp lại việc thực hiện một thao tác Cộng một chuỗi số hoặc tìm kiếm một giá trị trong danh sách
là 2 thí dụ của các bài tập lập trình ñòi hỏi phải có vòng lặp.
Thuật ngữ lặp lại (iteration) cũng ñược dùng trong ngữ cảnh này Mặc dù có vài dạng vòng lặp nhưng ta chỉ cần hai dạng: WHILE/ DO và REPEAT/ UNTIL.
4.2 Cấu trúc vòng lặp
Trang 30Cấu trúc While/Do
4.2 Cấu trúc vòng lặp
Quy luật chung: Các thao tác trong khối phát biểu phải ảnh hưởng ñến ít
nhất một biến trong biểu thức ñiều kiện, nếu không một lỗi ở dạng một
vòng lặp vô tận ñược tạo ra.
ðiểm nhập
ðiều kiện?
Phát biểu
Kết thúc sai
ñúng
Trang 32Cấu trúc IF/THEN/ELSE (cấu trúc lựa chọn)
Phát biểu 2
Trang 33Cấu trúc CASE (cấu trúc lựa chọn)
BT2?
Phát biểu 2
s ñ
BT3?
Phát biểu 3
s ñ
Trang 34THANK YOU !
SEE YOU IN NEXT CHAPTER.