Biên dịch chương trình Assembly chạy trên môi trường hệ điều hành 16 bit

Bài viết này hướng dẫn sử dụng các chương trình biên dịch 16 bít: Microsoft MacroAssembler và A86 MacroAssembler V4.05 để dịch các chương trình hợp ngữ (*.asm) sang chương trình thực thi (*.exe và *.com), chạy được trên nền hệ điều hành MS_DOS:
·        Chương trình A86 Macro Assembly (tập tin chính là: A86.com) thường được sử dụng để dịch chương trình hợp ngữ sang chương trình thực thi dạng COM.
·        Chương trình Macro Assembly (tập tin chính là: MASM.exe) thường được sử dụng để dịch chương trình hợp ngữ sang chương trình thực thi dạng EXE. Tuy nhiên, MASM chỉ có thể dịch tập tin chương trình hợp ngữ sang dạng tập tin đối tượng mã máy dạng Obj. Để chuyển tập tin Obj sang tập tin chương trình thực thi EXE ta phải sử dụng chương trình liên kết của MSDOS, đó là Link.exe. Để chuyển tập tin thực thi dạng EXE sang tập tin thực thi dạng COM ta phải sử dụng thêm một chương trình khác của MS_DOS, đó là EXE2Bin.com.
            Có thể sử dụng các tập tin TASM.Exe và TLINK.Exe để thay thế cho MASM.exe và Link.exe. Các tập tin này, và cả tập tin EXE2Bin.com, có thể tìm thấy trong bộ chương trình Turbo Pascal.
Chức năng của các tập tin biên dịch hợp ngữ liên quan:
Tập tin MASM.exe/TASM.exe: Hỗ trợ dịch chương trình hợp ngữ nguồn sang tập tin mã máy dạng Obj tương ứng.
Tập tin Link.exe/TLink.exe: Hỗ trợ liên kết các tập tin mã máy, dạng tập tin đối tượng (*.Obj), thành tập tin thực thi dạng EXE.
Tập tin EXE2Bin.exe: Hỗ trợ chuyển các tập tin EXE, viết theo cấu trúc dạng COM, thành tập tin thực thi dạng COM.
MASM có thể dịch tập tin chương trình hợp ngữ sang các tập tin: tập tin đối tượng (*.Obj), tập tin liệt kê thông tin (*.Lst), tập tin tham khảo chéo (*.Crf).
Tập tin đối tượng (Object File): Chứa bảng dịch mã máy của các lệnh trong chương trình nguồn hợp ngữ, và các thông tin cần thiết để có thể tạo nên một tập tin thực thi. Đây là tập tin chính để tạo nên tập tin thực thi.
Tập tin liệt kê thông tin (List File): Là một tập tin văn bản cho biết địa chỉ offset của từng lệnh trong đoạn Code; mã lệnh của các lệnh trong chương trình; danh sách các tên/nhãn dùng trong chương trình; các thông báo lỗi và một số thông tin khác. Đây là tập tin cơ sở hỗ trợ việc gỡ rối chương trình.
Tập tin tham khảo chéo (Cross Reference File): Liệt kê các tên sử dụng trong chương trình và dòng mà chúng xuất hiện.
            Hầu hết các chương trình biên dịch hợp ngữ 16 bít đều không hỗ trợ màn hình soạn thảo chương trình. Nhưng, nó cho phép chúng ta sử dụng bất kỳ chương trình/màn hình soạn thảo nào đó, như Turbo Pascal, C,…, để viết chương trình. Chúng ta có thể sử dụng chương trình soạn thảo Notepad trên Windows (Windows XP) để viết và chỉnh sửa chương trình hợp ngữ, trong trường hợp này ta nên đặt phần mở rộng cho tập tin chương trình là asm (*.asm).

Sử dụng A86 để dịch chương trình hợp ngữ sang chương trình dạng COM:

-     Trước hết, các bạn nên viết chương trình hợp ngữ theo cấu trúc chương trình dạng COM và lưu tập tin với phần tên mở rộng là asm.
                Các bạn nên đặt tập tin chương trình hợp ngữ cần dịch ở cùng thư mục với tập tin dịch a86.com. Ở đây chúng tôi giả sử chúng được đặt ở E:\ASSEM.
-     Sử dụng A86 để biên dịch chương trình:
                        Cú pháp :       A86     [đường dẫn]<Tập tin>;
                        Ví dụ:            E:\>\ASSEM\A86     In_Ascii.asm

            Trên môi trường hệ điều hành Windows các bạn phải chuyển về cửa sổ MSDOS (Cmd) để thực hiện việc biên dịch này.-  

Nếu chương trình không có lỗi thì màn hình sẽ xuất hiện thông báo như sau:

Thông báo này cho biết việc biên dịch chương trình đã thành công. Tập tin chương trình hợp ngữ In_Ascii.asm đã được dịch thành tập tin chương trình In_Ascii.COM (chính xác hơn là hình thành thêm 2 tập tin mới In_Ascii.COM và In_Ascii.SYM).
-     Nếu chương trình bị lỗi thì A86 sẽ xuất hiện thông báo lỗi như sau:
Thông báo này cho biết, trong quá trình biên dịch A86 đã phát hiện thấy lỗi trong chương trình In_Ascii.asm, tức là, chưa thể dịch chương trình In_Ascii.asm sang chương trình thực thi. Cụ thể:
-         Thông báo “Error message inserted into In_Asscii.asm” cho biết thông báo lỗi đã được chèn vào ngay trong tập tin chương trình In_Asscii.asm.
-         Thông báo “Original source renamed as In_Ascii.OLD” cho biết tập tin chương trình gốc đã được đổi tên thành In_Asscii.OLD.
Trong trường hợp này chúng ta phải quay về chương trình Notepad để mở (Open) lại tập tin chương trình In_Ascii.asm và tiến hành tìm và chỉnh sửa lỗi. Tập tin In_Ascii.asm xuất hiện các dòng thông báo lỗi như sau:
-     Sau khi sửa lỗi và ghi lại chúng ta tiếp tục dịch lại chương trình như ban đầu.

Chúng ta có thể sử dụng kết hợp cả 3 tập tin Masm.exe, Link.exe và EXE2Bin.com để dịch một chương trình hợp ngữ viết theo dạng COM thành tập tin thực thi dạng COM.

Sử dụng MASM để dịch chương trình hợp ngữ sang chương trình dạng EXE:

-     Trước hết, các bạn nên viết chương trình hợp ngữ theo cấu trúc của chương trình dạng EXE và lưu vào file với phần mở rộng là asm.

-     Quá trình biên dịch chương trình gồm 2 bước:

            Bước 1: Dùng MASM hoặc TASM để dịch chương trình hợp ngữ sang tập tin đối tượng ngôn ngữ máy. Cú pháp đơn giản như sau:

 - MASM        [đường dẫn] <File1.Asm>   <File2.Obj>;

 - TASM         [đường dẫn] <File1.Asm>   <File2.Obj>;

Ví dụ:             E:\>\ASSEM\Tasm        In_Ascii.asm        In_Ascii.obj
Nếu chương trình không có lỗi thì TASM sẽ xuất hiện thông báo như trên.
Thông báo này cho biết quá trình biên dịch chương trình đã thành công. Tập tin chương trình hợp ngữ In_Ascii.asm đã được dịch sang tập tin đối tượng ngôn ngữ máy In_Ascii.obj.

Nếu chương trình bị lỗi thì TASM sẽ xuất hiện thông báo lỗi, cùng với số thứ tự của dòng chương trình bị lỗi và nội dung lỗi trên màn hình, thông báo sau đây cho biết In_Ascii.asm bị lỗi tại dòng 10 và 11:

Trong trường hợp này chúng ta phải quay về chương trình Notepad để mở (Open) lại tập tin chương trình In_Ascii.asm và tiến hành tìm và chỉnh sửa lỗi.

            Chú ý: Để MASM/TASM tạo ra các tập tin LST và CRF trong khi biên dịch thì ta phải viết ra tên của các tập tin này trong câu lệnh biên dịch.

            Ví dụ:

      E:\>\ASSEM\Tasm     In_Ascii.asm, In_Ascii.obj, In_Ascii.lst, In_Ascii.crf

Với câu lệnh dịch này Tasm sẽ đồng thời tạo ra cả 3 tập tin In_Ascii.obj, In_Ascii.lst, In_Ascii.crf, các tập tin này rất thiết cho việc kiểm tra lỗi và gỡ rối chương trình.

Bước 2: Dùng Link hoặc Tlink để liên kết một hoặc nhiều file đối tượng thành một file thực thi duy nhất. Cú pháp đơn giản:    

LINK              [đường dẫn]<File1.Obj>;

TLINK            [đường dẫn]<File1.Obj>;

            Ví dụ:             E:\>\ASSEM\TLink      In_Ascii.obj;

            Nếu việc liên kết không bị lỗi (đối với các chương trình đơn giản chỉ có một file đối tượng thì bước này thường không gây ra lỗi) thì màn hình sẽ xuất hiện thông báo:

                        Microsoft (R) Overlay Linker Version 3.64

                        Copyright (c) Microsoft Corp 1981, 1988. All right reserved.

Thông báo này cho biết việc liên kết các tập tin đối tượng chương trình đã thành công. Tập tin chương trình hợp ngữ In_Ascii.asm đã được dịch thành tập tin chương trình In_Ascii.exe.

            Sau khi biên dịch chương trình hợp ngữ thành chương trình thực thi EXE hoặc COM chúng ta tiến hành cho chạy thử chương trình để kiểm tra, nếu kết quả không đúng như mong muốn thì phải xem và thay đổi lại nội dung chương trình và sau đó thực hiện biên dịch trở lại từ đầu.
Mới hơn Cũ hơn

Biểu mẫu liên hệ