Liên kết các ngôn ngữ bậc cao với ASM Sinh viên :Nguyễn Công Trình Mục tiêu : Nắm chắc cấu trúc và tự lập trình được
Liên Kết Pascal với ASM Cú pháp : Các câu lệnh Pascal Các câu lệnh ASM End; Các câu lệnh Pacal
Liên Kết Pascal với ASM Cách dịch và liên kết : Cú pháp : tpc-ml-Ic:\tp\include-Lc:\tp\lib ss Với : TP.exe : đây là chương trình dịch của Tpvới các tùy chọn được xác lập bởi menu options TPC.exe : đây là các chương trình dịch của TP với các tùy chọn được xác lập trên dòng lệnh dịch
Viết tách biệt ngôn ngữ Pascal và tệp ASM Nếu đa tệp thì phải khai báo PUBLIC và EXTRN với các nhãn dùng chung. Với nhãn là biến nhớ : .Data extrn tên_biến_nhớ : Kiểu Kiểu của ASM TP Byte Char word Integer Dword Real
Viết tách biệt ngôn ngữ Pascal và tệp ASM Nếu đa tệp thì phải khai báo PUBLIC và EXTRN với các nhãn dùng chung. Với nhãn là tên chương trình con: .Code Public tên_chương_trình_con tên_chương _trình_con Proc : Ret tên_chương_trình_con endp
Vấn đề near/far của chương trình con Nếu chương trình con cùng nằm trên một tệp với chương trình chính hoặc chương trình con nằm ở phần thêm vào của khối thì chương trình con đó gọi là near. Nếu chương trình con nằm ở phần giao diện của khối thì chương trình con đó là Far
Vấn đề near/far của chương trình con Trong trường hợp ngoại lệ : Directive {$F+} : báo cho chương trình dịch TP nằm phía sau Directive {$F+} là Far. Directive {$F+} : Báo cho chương trình dịch của TP biết những chương trình con nào nằm sau Directive {$F-} là Near.
Vấn đề near/far của chương trình con Cách chương trình dịch TP tìm tệp để liên kết : Directive {$L} Cú pháp: {$L tên_tệp [.obj]} Tên hàm ASM mang giá trị trả về Nếu đặt tên vào thanh ghi AX trước khi có lệnh Ret thì tên hàm ASM mang giá trị quay về dạng 2 byte. Nếu đặt giá trị vào thanh ghi DX:AX trước khi có lệnh Ret thì tên hàm mang giá trị 4 bytes
Bài tập Bài 1 .Chỉnh sửa đoạn mã sau: program main; var k:integer; Bài 1 .Chỉnh sửa đoạn mã sau: program main; var k:integer; procedure one(LazyEval i:integer); begin writeln(i); end; procedure two(name j:integer); begin one(j); begin {main} k := 2; two(k);
Đáp án Trong trường hợp này ,nhãn là tên chương trình con thì ASM viết chương trình con nên Pascal sẽ sử dụng chương trình con Pascal phải xin phép sử dụng như sau: Chương trình con là thủ tục có dạng: Procedure tên_thủ_tục [đối]; external; đối chiếu với ví dụ trên : Procedure one(LazyEval i:integer); Sửa: Program main; uses crt; var ....:Integer; begin ASM procedure one(LazyEval i:integer); begin writeln(i); end; procedure two(name j:integer); begin one(j); begin {main} k := 2; two(k); END clrscr; writeln(‘’);readln(...); write(''); readln end.