Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 5: Lập trình hợp ngữ LC-3

CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.1 Lập trình hợp ngữ  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.3 Quá trình hợp dịch  
5.4 Chƣơng trình với nhiều modul  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.1 Lập trình hợp ngữ  
Hợp ngữ một ngôn ngữ cấp thấp và là một bước nâng  
cấp nhỏ cho ISA của một máy tính. Mỗi lệnh hợp ngữ  
thường xác định một lệnh đơn trong ISA. Không như  
ngôn ngữ cấp cao, ngôn ngữ cấp thấp phụ thuộc rất nhiều  
vào ISA. Thực tế, ta sẽ thấy mỗi kiến trúc tập lệnh ISA  
chỉ có duy nhất một hợp ngữ.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
Để hiểu rõ hợp ngữ LC-3, ta hãy xét chương trình ví dụ sau.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
Để hiểu hợp ngữ LC-3, ta hãy xét chương trình ví dụ sau.  
Chương trình này nhân số nguyên được khởi tạo trong biến  
NUMBER với 6 bằng việc cộng số nguyên đó 6 lần. Ví dụ, nếu số  
nguyên đó là 123, chương trình sẽ tính tích bằng việc cộng 123 +  
123 +123 + 123 + 123 + 123.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.1 Lệnh  
Thay vì dùng dãy 16 bit 0 và 1 để biểu diễn một lệnh  
như trong trường hợp ISA LC-3, một lệnh hợp ngữ bao  
gồm bốn phần theo cấu trúc sau:  
LABEL OPCODE OPERANDS ; COMMENTS  
Hai phần LABEL và COMMENTS là tùy chọn. Còn  
OPCODE và OPERANDS là bắt buộc.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.1 Lệnh:  
1. Opcodes và Operands  
Hai phần này phải có trong lệnh. Một lệnh phải quy định một mã  
thao tác OPCODEàm, và giá trị thích  
hợp của toán hạng OPERANDS, tức là cái mà lệnh sẽ dùng với tác  
vụ đã có. Đây những thứ mà chúng ta đã gặp khi học LC-3.  
OPCODE là tên tượng trưng cho mã tác vụ của lệnh LC-3 tương  
ứng. Với tên tượng trưng này, lập trình viên dễ dàng nhớ thao tác  
qua các tên như ADD, AND, hay LDR hơn là 4 bit 0001, 0101, hay  
0110. Hình 4.3 liệt kê toàn bộ các OPCODES của 15 lệnh LC-3.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.1 Lệnh  
Số lượng các toán hạng phụ thuộc vào thao tác được thực thi. Ví dụ,  
lệnh ADD dòng 0B trong chương trình trên  
AGAIN AD
Lệnh LD dòng 06  
LD  
R2, NUMBER  
Trong trường hợp toán hạng tức thời, các giá trị thực cần được ghi  
rõ trong lệnh (như trị 0 trong dòng 07).  
AND  
R3, R3, #0  
; xóa R3 để giữ tích  
Chúng ta dùng dấu # cho số thập phân, x cho thập lục phân, và b  
cho nhị phân.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.1 Lệnh  
2. Nhãn  
Nhãn là các tên tượng trưng được dùng để xác định các ô nhớ  
được tham khảo tới trong chương trình. Trong hợp ngữ LC-3, một  
nhãn có thể được tạo từ một tới 20 ký số hay ký tự, bắt đầu bằng  
một tự, nLAPLAI, KETTHUC, LAP100,.  
Có hai lý do cần cho việc tham khảo một vị trí trong bộ nhớ, đó  
là  
- Ô nhớ vị trí đó chứa đích của một lệnh rẻ nhánh, ví dụ AGAIN  
trong dòng 0B.  
- Ô nhớ vị trí đó chứa một giá trị cần được nạp hay lưu, dụ,  
NUMBER dòng 11, và SIX dòng 12.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.1 Lệnh  
Vị trí tương ứng nhãn AGAIN được tham khảo bởi lệnh  
rẽ nhánh dòng 0E,  
BRp AGAIN  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.1 Lệnh  
3. Ghi chú  
Ghi chú là các thông điệp chỉ cần thiết với con người.  
Các ghi chú không có bất kỳ ảnh hưởng nào trong quá  
trình dịch cũng không chịu tác động nào từ bộ dịch hợp  
ngữ LC-3. Chúng được quy định trong chương trình bằng  
các dấu chấm phẩy đặt trước, phần sau dấu chấm phẩy  
(nlàếumcót)  
ghi chú và đượcbbqduac.h  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.2 Mã giả (Các hƣớng dẫn dịch)  
Bộ hợp dịch LC-3 là một chương trình lấy đầu vào là chuỗi tự  
biểu diễn một chương trình được viết bằng hợp ngữ LC-3, và dịch  
nó ra thành một cập lệnh (ISA) của  
LC-3.  
giả (pseudo-ops) giúp cho bộ dịch thực hiện nhiệm vụ này, còn  
được gọi bằng một tên khác là hướng dẫn dịch (assembler  
directives).  
Bộ hợp dịch LC-3 gồm năm giả: .ORIG, .FILL, .BLKW,  
.STRINGZ, và .END. Tất cả giả này đều dấu chấm như là  
tự đầu tiên của nó.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.2 Mã giả (Các hƣớng dẫn dịch)  
.ORIG  
.ORIG cho bộ dịch biết nơi bắt đầu chương trình LC-3 trong bộ  
nhớ. dòng 04, .ORIG x3050 nói rằng, chương trình bắt đầu ở vị  
trí x3050. Và tất nhiên, lệnh LD R1, SIX sẽ được đặt ở vị trí x3050.  
.FILL  
.FILL nói cho bộ hợp dịch biết việc cần dùng vị trí kế trong  
chương trình (và tất nhiên là sau này là bộ nhớ khi chạy chương  
trình), và khởi động bằng giá trị của toán hạng. dòng 12, vị trí  
thứ 9 (tính từ lệnh đầu tiên) trong chương trình LC-3 được khởi  
động trị x0006.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.2 Mã giả (Các hƣớng dẫn dịch)  
.BLKW  
.BLKW bắt bộ dịch để dành một số ô nhớ (tức BLocK Words)  
trong chương trình. Số ô nhớ thực sự là toán hạng của giả  
.BLKW. dòng 11, mã giả yêu cầu bộ dịch để dành một ô nhớ với  
nhản là NUMBER.  
.STRING  
.STRING bắt bộ dịch khởi tạo một chuỗi n +1 ô nhớ. Đối số là  
dãy n ký tự, bên trong cặp dấu nháy kép. Khi đó, n từ nhớ đầu tiên  
được khởi động bằng các ký tự mã ASCII 8 bit được mở rộng zero  
(để có 16 bit) trong chuỗi. Từ nhớ cuối cùng được khởi tạo là 0, tức  
x0000, là trị canh để truy xuất chuỗi các mã ASCII.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.2 Mã giả (Các hƣớng dẫn dịch)  
dụ 5.2: Đoạn mã sau:  
.ORIG  
x3010  
HELLO .STRINGZ  
“Hello, World!”  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.2 Mã giả (Các hƣớng dẫn dịch)  
x3010: x0048  
x3018: x006F  
x3011: x0065  
x3012: x006C  
x3013: x006C  
x3014: x006F  
x3015: x002C  
x3016: x0020  
x3017: x0057  
x3019: x0072  
x301A: x006C  
x301B: x0064  
x301C: x0021  
x301D: x0000  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.2 Mã giả (Các hƣớng dẫn dịch)  
.END  
.END nói cho kết thúc ở đâu.  
Bất kỳ tự nào đứng sau .END sẽ bị bộ hợp dịch bỏ qua.  
Như vậy, thực ra .END chỉ đơn giản một quy định giới  
hạn, đánh dấu sự kết thúc của chương trình nguồn.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.3 Một ví dụ  
Trong mục này chúng ta xét lại ví dụ ở mục 4.10, tính  
số lần xuất hiện của một ký tự trong một file cho trước.  
Ký tự cần kiểm tra được vào từ bàn phím, file ký tự được  
xem là mảng ký tự cần được khởi tạo trước khi chạy  
chương trình. Giải thuật ở dạng lưu đồ và chương trình ở  
dạng ISA LC-3 được trình bày trong hình 4.18 và 4.19.  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.3 Một ví dụ  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.3 Một ví dụ  
CHƢƠNG 5  
LẬP TRÌNH HỢP NGỮ LC-3  
5.2 Các thành phần của một chƣơng trình hợp ngữ  
5.2.3 Một ví dụ  
Tải về để xem bản đầy đủ
pdf 35 trang yennguyen 12/04/2022 6940
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 5: Lập trình hợp ngữ LC-3", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_5_lap_trinh.pdf