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 (GV. Nguyễn Nhật Nam). Bài giảng có nội dung trình bày về lập trình hợp ngữ; các thành phần của một chương trình hợp ngữ; quá trình hợp dịch; chương trình với nhiều module;... Mời các bạn cùng tham khảo!
CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 CHƢƠNG 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 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 LẬP TRÌNH HỢP NGỮ LC-3 5.1 Lập trình hợp ngữ Hợp ngữ ngôn ngữ cấp thấp bước nâng cấp nhỏ cho ISA máy tính Mỗi lệnh hợp ngữ thường xác định lệnh đơn ISA Không ngôn ngữ cấp cao, ngôn ngữ cấp thấp phụ thuộc nhiều vào ISA Thực tế, ta thấy kiến trúc tập lệnh ISA có hợp ngữ CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ Để hiểu rõ hợp ngữ LC-3, ta xét chương trình ví dụ sau CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ Để hiểu rõ hợp ngữ LC-3, ta xét chương trình ví dụ sau Chương trình nhân số ngun khởi tạo biến NUMBER với việc cộng số ngun lần Ví dụ, số ngun 123, chương trình tính tích việc cộng 123 + 123 +123 + 123 + 123 + 123 CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ 5.2.1 Lệnh Thay dùng dãy 16 bit để biểu diễn lệnh trường hợp ISA LC-3, 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 COMMENTS tùy chọn Còn OPCODE OPERANDS bắt buộc CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ 5.2.1 Lệnh: Opcodes Operands Hai phần phải có lệnh Một lệnh phải quy định mã thao tác OPCODE, tức mà lệnh cần phải làm, giá trị thích hợp tốn hạng OPERANDS, tức mà lệnh dùng với tác vụ có Đây thứ mà gặp học LC-3 OPCODE tên tượng trưng cho mã tác vụ 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 tên ADD, AND, hay LDR bit 0001, 0101, hay 0110 Hình 4.3 liệt kê toàn OPCODES 15 lệnh LC-3 CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ 5.2.1 Lệnh Số lượng toán hạng phụ thuộc vào thao tác thực thi Ví dụ, lệnh ADD dịng 0B chương trình AGAIN ADD R3, R3, R2 Lệnh LD dòng 06 LD R2, NUMBER Trong trường hợp toán hạng tức thời, giá trị thực cần ghi rõ lệnh (như trị 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, b cho nhị phân CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ 5.2.1 Lệnh Nhãn Nhãn tên tượng trưng dùng để xác định ô nhớ tham khảo tới chương trình Trong hợp ngữ LC-3, nhãn tạo từ tới 20 ký số hay ký tự, bắt đầu ký tự, LAPLAI, KETTHUC, LAP100,… Có hai lý cần cho việc tham khảo vị trí nhớ, - Ơ nhớ vị trí chứa đích lệnh rẻ nhánh, ví dụ AGAIN dịng 0B - Ơ nhớ vị trí chứa giá trị cần nạp hay lưu, ví dụ, NUMBER dịng 11, SIX dịng 12 CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ 5.2.1 Lệnh Vị trí tương ứng nhãn AGAIN tham khảo lệnh rẽ nhánh dòng 0E, BRp AGAIN CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 Các thành phần chƣơng trình hợp ngữ 5.2.1 Lệnh Ghi Ghi thông điệp cần thiết với người Các ghi khơng có ảnh hưởng q trình dịch không chịu tác động từ dịch hợp ngữ LC-3 Chúng quy định chương trình dấu chấm phẩy đặt trước, phần sau dấu chấm phẩy (nếu có) ghi dịch bỏ qua CHƢƠNG 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 chương trình hợp ngữ LC-3 thực thi, phải dịch thành chương trình ngơn ngữ máy, có nghĩa lệnh lệnh ISA LC-3 Đây công việc dịch hợp ngữ LC-3 Với hợp dịch LC-3 (mà download từ mạng), ta dịch từ chương trình hợp ngữ chương trình ngơn ngữ máy Trong giáo trình này, chương trình hợp ngữ viết dịch dạng ISA LC-3 Editor mà tìm thấy mạng CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.3 Q trình hợp dịch 5.3.2 Quá trình dịch Gồm giai đoạn: - Tạo bảng biểu, Constructing table - Dịch ngôn ngữ máy (nhị phân) CHƢƠNG 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 tương ứng tên tượng trưng với địa 16 bit chúng tính từ đầu chương trình Nên nhớ rằng, cần nhãn chổ cần tham khảo, đích lệnh rẻ nhánh nơi chứa liệu cần nạp hay lưu Vì vậy, khơng có lỗi lập trình nào, xác định tất nhãn, hẳn xác định tất địa tượng trưng dùng chương trình CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.3 Q trình hợp dịch 5.3.3 Bƣớc đầu tiên: Tạo bảng biểu trƣng Lệnh có nhãn lệnh dịng 12 Vì lệnh thứ năm chương trình, nên lúc LC chứa x3004, đầu vào bảng biểu trưng tạo sau: Lệnh thứ hai có nhãn lệnh dòng 1F Tại đây, LC tăng lên tới x300B Như đầu vào bảng tạo thêm sau: CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.3 Q 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 bước dịch đầu tiên, bảng biểu trưng có đầu vào sau: CHƢƠNG 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 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 dòng, lúc với trợ giúp bảng biểu trưng Ở dòng, lệnh hợp ngữ dịch lệnh ngôn ngữ máy LC-3 CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.3 Q 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, dịch lấy lệnh dòng 0C, hồn tồn dịch lệnh biết nhãn PTR tương ứng với x3013 Lệnh LD, có opcode 0010 Thanh ghi đích R3, nghĩa 011 PCoffset tính sau: biết PTR nhãn cho địa x3013, ghi PC tăng LC + 1, tức x3002 Vì PTR (x3013) phải tổng PC tăng (x3002) PCoffset mở rộng dấu, nên PCoffset phải x0011 Ghép tất điều lại với nhau, ta thấy lệnh x3001 0010011000010001, LC tăng lên x3002 CHƢƠNG 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 ngơn ngữ máy Chương trình dịch nhận CHƢƠNG 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 chương trình, tập tin thực thi chương trình gọi thực thi (Executable image) Bản thực thi thường tạo từ nhiều modul nhiều lập trình viên thiết kế cách độc lập Mỗi modul dịch cách riêng biệt tạo thành tập tin đối tượng (object) Nếu modul viết hợp ngữ LC-3, chúng dịch dịch hợp ngữ LC-3 Những modul viết C dịch dịch C Có modul lập trình viên viết thiết kế chương trình, có modul chương trình cung cấp hệ điều hành Mỗi tập tin đối tượng bao gồm lệnh kiến trúc tập lệnh (ISA) máy tính sử dụng, với liệu liên quan CHƢƠNG 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 liên kết (link) tất modul lại với để có tập tin gọi thực thi Trong suốt trình thực thi, chu kỳ lệnh FETCH, DECODE, … áp dụng cho lệnh thực thi CHƢƠNG 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ế chương trình, thường dùng thư viện hệ điều hành modul viết lập trình viên khác nhóm Do đó, việc thực thi tạo từ nhiều tập tin đối tượng khác phổ biến Trong chương trình ví dụ đếm số ký tự xuất tập tin mảng, ta thấy áp dụng tiêu biểu chương trình với hai modul, gồm modul chương trình modul tập tin liệu Với ví dụ 5.3, địa bắt đầu tập tin mảng liệu x4000 dịng 2D khơng quan tâm chương trình viết CHƢƠNG 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 thay dòng 2D PTR FILL STARTofFILE chương trình ví dụ khơng hợp dịch khơng có đầu vào cho STARTofFILE bảng biểu trưng Chúng ta giải việc ? Mặt khác, hợp ngữ LC-3 có mã giả EXTERNAL, xác định STARofFILE tên biểu trưng địa khơng biết lúc chương trình 5.3 dịch Điều thực dịng sau EXTERNAL STARTofFILE CHƢƠNG 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à báo cho dịch LC-3 vắng mặt nhãn STARTofFILE lỗi chương trình Hơn nữa, STARTofFILE nhãn modul khác modul dịch cách độc lập Trong ví dụ 5.3, nhãn vị trí ký tự tập tin mảng mà chương trình đếm ký tự khảo sát CHƢƠNG 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ó mã giả EXTERNAL, thiết kế nhãn STARTofFILE theo EXTERNAL, LC-3 có khả tạo đầu vào bảng biểu trưng cho STARTofFILE, thay gán cho nhãn địa chỉ, LC-3 đánh dấu biểu trưng tùy thuộc modul khác Lúc liên kết, tất modul kết nối lại, liên kết (tức chương trình phụ trách việc nối này) dùng đầu vào cho STARTofFILE bảng biểu trưng modul khác để hồn tất việc dịch dịng 2D CHƢƠNG 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 modul tới vị trí biểu trưng modul khác cách dễ dàng Quá trình dịch phù hợp liên kết giải ... HỢP NGỮ LC-3 5.3 Q trình hợp dịch 5.3.1 Giới thiệu Trư? ?c chương trình hợp ngữ LC-3 th? ?c thi, phải dịch thành chương trình ngơn ngữ máy, c? ? nghĩa lệnh lệnh ISA LC-3 Đây c? ?ng vi? ?c dịch hợp ngữ LC-3. .. dụ CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 C? ?c thành phần chƣơng trình hợp ngữ 5.2.3 Một ví dụ CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.2 C? ?c thành phần chƣơng trình hợp ngữ 5.2.3 Một ví dụ CHƢƠNG LẬP TRÌNH HỢP...CHƢƠNG LẬP TRÌNH HỢP NGỮ LC-3 5.1 Lập trình hợp ngữ Hợp ngữ ngôn ngữ c? ??p thấp bư? ?c nâng c? ??p nhỏ cho ISA máy tính Mỗi lệnh hợp ngữ thường x? ?c định lệnh đơn ISA Không ngôn ngữ c? ??p cao, ngôn ngữ