Thông tin tài liệu:
Nối tiếp nội dung phần 1 cuốn giáo trình "Ngôn ngữ lập trình Assembly (dùng trong các trường THCN)", phần 2 giới thiệu tới người học các kiến thức: Liên kết Assembly với ngôn ngữ Pascal, các bài toán lập trình. Phần phụ lục trình bày các ngắt của Bios và DOS. Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Giáo trình Ngôn ngữ lập trình Assembly (dùng trong các trường THCN): Phần 2 Chương 3 LIÊN K Ế T ASSEMBLY V Ớ I N G Ô N N G Ữ PASCAL Có hai cách liên kết giữa ngôn ngữ Pascal và Assembly: Cách 1: Chèn các khối lệnh Assembly vào chương trình được viết bằngngôn ngữ Pascal - inline Assembly. Đây là phương pháp khá đơn giản vànhanh vì với từ khoa asm và được kết thúc bằng end; chúng ta có thể dễ dàngđưa một khối các lệnh của Assembly vào giữa các dòng lệnh của Pascal. Tuynhiên phương pháp này có một số hạn chế mà chúng ta sẽ đề cập ở phần sau. Cách 2: Viết tách biệt các module: -bằng ngôn ngữ Pascal, và -bằng Assembly.sau đó tiến hành dịch và liên kết chúng lại với nhau. So với cách Ì, cách nàysẽ phức tạp hơn cho nguôi lập trình, song sẽ tránh được những nhược điểm màcách Ì gặp phải. ì. ASSEMBLY TRONG PASCAL Trong phương pháp này, chúng ta đặt các lệnh Assembly vào các dòngtrong chương trình được viết bằng ngôn ngữ Pascal tại nơi nào mà chúng tathấy cần thiết. Dạng tổng quát của Assembly trong chương trình viết bằng Pascal như sau: asm khối các lệnh Assembly end; Mỗi khi chương trình dịch của Pascal gặp từ khoa asm trong dòng lệnh 75Assembly thì chương trình dịch sẽ chuyển dòng lệnh Asembler này vào và dịchvới việc quy chiếu biến Pascal ra dạng tương ứng cùa Assembly để thực hiện. Chúng ta hãy xem xét cơ chế liên kết theo cách này thông qua một ví dụđơn giản. Ví dụ : Hãy viết chương trình nhập từ bàn phím một số và cất vào một biến bằngPascal, sau đó giảm giá trị của biến đó đi Ì bằng Assembly và hiện màn hìnhbằng Pascal với tên tệp là vidu.pas . PROGRAM baitap uses Crt; var x: integer; BEGIN clrscr; write ( Hay vào gia tri cua x: ); read (x); asm mov AX, x; đéc AX; mov X, AX; end; writeln ( Két qua cua X la : x); readln; END. Tiến hành dịch như sau: tpc vidu.pas đánh Pascal gặp từ khoa asm và lúc này biến X của Pascal sẽ được chuyển sangbiến tương ứng của Assembly và được đặt vào thanh ghi AX. Nói một cáchngắn gọn là từ khoa asm cho phép chúng ta nhét bất kỳ một dòng lệnhAssembly vào chương trình đang được viết bằng ngôn ngữ Pascal.76 Cách liên kết này khá đơn giản, song vì thế cũng có một số hạn chế: - Các lệnh của Assembly được dịch nhờ qua chương trình dịch củaPascal. - Các lệnh nhảy của Assembly chỉ có thể nhảy đến các nhãn Pascal, cónghĩa là lệnh nhảy chỉ có thể thực hiện từ Assembly ra phần ngôn ngữ Pascalchứ không cho phép theo chiều ngược lại và cũng không cho phép các lệnhnhảy trong lòng phần Assembly - nói một cách ngắn gọn không cho phép đặtnhãn nhảy trong phần Assembly. Ví dụ: ỉasm jz Thoát đéc CX; end; Thoát: Trường hợp này là cho phép vì nhãn thoát là nhãn Pascal nằm trong phầnngôn ngữ Pascal.asm jz Thoát đéc CX; Thoát: end; Trường hợp này là không cho phép vì nhãn Thoát là nhãn của Asemblynằm trong các phần lệnh Assembly. Lưu ý: Lệnh gọi chương trình con CALL không thể coi là lệnh nhảy, do vậy cáctoán hạng đi sau lệnh CALL có thể là tên của hàm Pascal hoặc các nhãnAssembly, song nhất thiết không thể là nhãn Pascal. li l i . VIẾT TÁCH BIỆT NHIÊU MODUL (trên nhiều tệp) RIÊNG LẺ Cũng như sự liên kết giữa ngón ngữ Pascal và Assembly, cách thường dùngtrong việc liên kết giữa các chương trình viết bằng ngôn ngữ Pascal vàAssembly là viết hoàn toàn tách biệt nhiều modul riêng lẻ trong ngôn ngữPascal và Asembly, tiến hành dịch các modul đó theo từng modul một và sauđó liên kết những modul này lại với nhau trước khi cho chạy. Và như vậychúng ta sẽ có được một tệp thực hiện được (đuôi .exe) bằng cách trộn các tệpđược viết bằng ngôn ngữ Pascal và Assembly. Viết tách biệt các modul ra với nhau rất có lợi cho các chương trình có sốlượng lệnh Assembly lớn vì trong trương hợp này có thể sử dụng toàn bộ khảnăng của chương trình dịch MASM và cho phép chúng ta viết và dịch phầnchương trình Assembly của chúng ta trong môi trường thuần túy Assemblychứ không phải dịch nhờ bởi từ khoa asm trong Pascal. Không những thếphương pháp này giúp chúng ta tránh được những nhược điểm mà Assemblyvấp phải. Tuy vậy để thực hiện được sự liên kết theo cách này, người lập trìnhcho modul của Assembly phải tuân theo tất cả các vấn đề liên quan đếnsegment, chuyển đổi thông số, các quy chiếu đến các biến của Pascal, sự bả ...