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

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

5.1 Lập trình hợp ngữ

Hợp ngữ là 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 là mỗi kiến

trúc tập lệnh ISA chỉ có duy nhất một hợp ngữ.

pdf36 trang | Chuyên mục: C/C++ | Chia sẻ: yen2110 | Lượt xem: 483 | Lượt tải: 0download
Tóm tắt nội dung 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, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ự đầ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 nó 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 mã 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. 
 .STRINGZ 
 .STRINGZ 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) 
 Ví 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 
x3011: x0065 
x3012: x006C 
x3013: x006C 
x3014: x006F 
x3015: x002C 
x3016: x0020 
x3017: x0057 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
x3018: x006F 
x3019: x0072 
x301A: x006C 
x301B: x0064 
x301C: x0021 
x301D: x0000 
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 bộ dịch biết chương trình kết thúc ở đâu. Bất kỳ 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 là một quy định giới hạn, 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ụ 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
 5.3.1 Giới thiệu 
 Trước khi một chương trình hợp ngữ LC-3 được thực thi, nó 
phải được dịch ra thành một chương trình ngôn ngữ máy, có nghĩa 
là từng lệnh trong đó sẽ là từng lệnh ở ISA LC-3. Đây là công việc 
của bộ dịch hợp ngữ LC-3. 
 Với bộ hợp dịch LC-3 (mà chúng ta có thể download từ mạng), 
ta có thể dịch từ chương trình hợp ngữ ra chương trình ngôn ngữ 
máy. Trong giáo trình này, các chương trình hợp ngữ có thể được 
viết và được dịch ra dạng ISA bằng LC-3 Simulator mà chúng ta có 
thể tìm thấy trên mạng. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.2 Quá trình dịch 
 Gồm 2 giai đoạn: 
-Tạo bảng biểu,Constructing table 
-Dịch ra ngôn ngữ máy(nhị phân) 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.3 Bƣớc đầu tiên: Tạo bảng biểu trƣng 
 Bảng biểu trưng là một sự tương ứng giữa các tên tượng trưng 
với các địa chỉ 16 bit của chúng tính từ đầu chương trình. Nên nhớ 
rằng, chúng ta cần các nhãn ở nhưng chổ cần được tham khảo, hoặc 
đó là đích của một lệnh rẻ nhánh hoặc nơi đó chứa dữ liệu cần được 
nạp hay lưu. Vì vậy, nếu chúng ta không có bất kỳ một lỗi lập trình 
nào, và nếu chúng ta xác định được tất cả các nhãn, chúng ta hẳn sẽ 
xác định được tất cả các địa chỉ tượng trưng được dùng trong 
chương trình. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.3 Bƣớc đầu tiên: Tạo bảng biểu trƣng 
 Lệnh đầu tiên có nhãn là lệnh ở dòng 12. Vì nó là lệnh thứ năm 
của chương trình, nên lúc này LC chứa x3004, một đầu vào trong 
bảng biểu trưng được tạo ra như sau: 
Lệnh thứ hai có nhãn là lệnh ở dòng 1F. Tại đây, LC đã được tăng 
lên tới x300B. Như vậy một đầu vào trong bảng đã được tạo ra 
thêm như sau: 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.3 Bƣớc đầu tiên: Tạo bảng biểu trƣng 
 Tới lúc cuối của bước dịch đầu tiên, bảng biểu trưng có các đầu 
vào như sau: 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.4 Bƣớc thứ hai: Dịch ra ngôn ngữ máy 
 Bước dịch thứ hai gồm việc duyệt qua chương trình hợp ngữ lần 
thứ hai, theo từng dòng, lúc này với sự trợ giúp của bảng biểu 
trưng. Ở mỗi dòng, lệnh hợp ngữ được dịch ra lệnh ngôn ngữ máy 
LC-3. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.4 Bƣớc thứ hai: tạo chƣơng trỉnh ngôn ngữ máy 
 Lần này, khi bộ dịch lấy lệnh ở dòng 0C, nó có thể hoàn toàn 
dịch lệnh này vì nó biết nhãn PTR tương ứng với x3013. Lệnh là 
LD, có opcode là 0010. Thanh ghi đích là R3, nghĩa là 011. 
 PCoffset được tính như sau: chúng ta biết rằng PTR là nhãn cho 
địa chỉ x3013, và thanh ghi PC đã tăng là LC + 1, tức x3002. Vì 
PTR (x3013) phải là tổng của PC đã tăng (x3002) và PCoffset được 
mở rộng dấu, nên PCoffset phải là x0011. Ghép tất cả điều này lại 
với nhau, ta thấy lệnh ở x3001 là 0010011000010001, và LC được 
tăng lên x3002. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.3 Quá trình hợp dịch 
5.3.4 Bƣớc thứ hai: Dịch ra ngôn ngữ máy 
 Chương trình đã được 
 dịch và nhận được là 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.1 Bản thực thi 
 Khi máy tính bắt đầu thực thi một chương trình, tập tin thực thi 
của chương trình được gọi là bản thực thi (Executable image). Bản 
thực thi thường được tạo ra từ nhiều modul do nhiều lập trình viên 
thiết kế ra một cách độc lập. Mỗi modul được dịch một cách riêng 
biệt và tạo thành một tập tin đối tượng (object). Nếu các modul 
được viết bằng hợp ngữ LC-3, chúng sẽ được dịch bằng bộ dịch 
hợp ngữ LC-3. Những modul được viết bằng C sẽ được dịch bằng 
bộ dịch C. Có những modul do lập trình viên viết khi thiết kế 
chương trình, và cũng có những modul là các chương trình con 
được cung cấp bởi hệ điều hành. Mỗi tập tin đối tượng bao gồm các 
lệnh trong kiến trúc tập lệnh (ISA) của máy tính đang được sử 
dụng, cùng với các dữ liệu liên quan. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.1 Bản thực thi 
 Bước cuối cùng là liên kết (link) tất cả các modul lại với nhau 
để có một tập tin gọi là bản thực thi. Trong suốt quá trình thực thi, 
các chu kỳ lệnh FETCH, DECODE,  được áp dụng cho các lệnh 
trong bản thực thi. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.2 Thiết kế với nhiều tập tin đối tượng 
 Khi thiết kế một chương trình, chúng ta thường dùng thư viện 
của hệ điều hành cũng như các modul được viết bởi các lập trình 
viên khác trong nhóm. Do đó, việc bản thực thi được tạo ra từ nhiều 
tập tin đối tượng khác nhau là rất phổ biến. 
 Trong chương trình ví dụ đếm số ký tự xuất hiện trong một tập tin 
là mảng, ta có thể thấy một áp dụng tiêu biểu của chương trình với 
hai modul, gồm modul chương trình và modul là tập tin dữ liệu. 
Với ví dụ 5.3, địa chỉ bắt đầu của tập tin mảng dữ liệu là x4000 ở 
dòng 2D không được quan tâm khi chương trình được viết. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.2 Thiết kế với nhiều tập tin đối tượng 
 Nếu chúng ta thay thế dòng 2D này bằng 
 PTR .FILL STARTofFILE 
 thì chương trình ví dụ này sẽ không được hợp dịch vì không có đầu 
vào cho STARTofFILE trong bảng biểu trưng. Chúng ta giải quyết 
việc này ra sao ? 
 Mặt khác, nếu hợp ngữ LC-3 có mã giả .EXTERNAL, chúng ta 
có thể xác định STARofFILE như là một tên biểu trưng của một địa 
chỉ không được biết lúc chương trình 5.3 được dịch. 
 Điều này có thể được thực hiện bằng dòng sau 
 .EXTERNAL STARTofFILE 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.2 Thiết kế với nhiều tập tin đối tượng 
 Mà sẽ báo cho bộ dịch LC-3 rằng sự vắng mặt của nhãn 
STARTofFILE không phải là một lỗi trong chương trình. Hơn nữa, 
STARTofFILE là một nhãn trong modul khác và modul này sẽ 
đuộc dịch một cách độc lập. Trong ví dụ 5.3, đó chính là nhãn của 
vị trí của ký tự đầu tiên trong tập tin mảng mà sẽ được chương trình 
đếm ký tự của chúng ta khảo sát. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.2 Thiết kế với nhiều tập tin đối tượng 
 Nếu hợp ngữ LC-3 có được mã giả .EXTERNAL, và nếu chúng 
ta đã thiết kế nhãn STARTofFILE theo .EXTERNAL, LC-3 có khả 
năng tạo một đầu vào trong bảng biểu trưng cho STARTofFILE, và 
thay vì gán cho nhãn này một địa chỉ, LC-3 sẽ đánh dấu biểu trưng 
tùy thuộc modul khác. Lúc liên kết, khi tất cả các modul được kết 
nối lại, bộ liên kết (tức chương trình phụ trách việc nối này) sẽ dùng 
đầu vào cho STARTofFILE trong bảng biểu trưng trong modul 
khác để hoàn tất việc dịch dòng 2D. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
5.4 Chƣơng trình với nhiều modul 
 5.4.2 Thiết kế với nhiều tập tin đối tượng 
 Theo cách này, mã giả .EXTERNAL cho phép việc tham khảo 
của một modul tới các vị trí biểu trưng trong một modul khác một 
cách dễ dàng. Quá trình dịch phù hợp được bộ liên kết giải quyết. 
CHƢƠNG 5 
LẬP TRÌNH HỢP NGỮ LC-3 
HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN 
NGÖÕ C 
 KEÁT THUÙC CHÖÔNG 5 

File đính kèm:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_5_lap_trinh.pdf
Tài liệu liên quan