- Lệnh điều khiển #pragma inline
3.3.2 Ngôn ngữ Pascal và Hợp ngữ
Về nguyên lý, thì liên kết giữa hợp ngữ với Pascal giông như việc liên kết giữa hợp ngữ với C. tuy nhiên cũng có một số qui tắc riêng khi thực hiên liên kết giữa hợp ngữ và Pascal.
Cũng như hợp ngữ và C, có hai cách để liên kết giữa hợp ngữ và Pascal là dùng inline assembly và viết tách biệt giữa các module hợp ngữ và module Pascal.
a . Sử dụng inline assembly trong Pascal
Phương pháp này thích hợp cho người lập trình phát triển các chương trình nhỏ. Trong phương pháp này người lập trình sẽ chèn một khối lệnh hợp ngữ vào một chương trình được viết bằng ngôn ngữ Pascal. Đây là phương pháp khá đơn giản và nhanh.
asm [<Nhãn 1>:] <lệnh 1> <các toán hạng 1> [<Nhãn 2>:] <lệnh 2> <các toán hạng 2> …. [<Nhãn n>:] <lệnh n> <các toán hạng n> end;
Khi các chương trình dịch của Pascal gặp từ khóa asm trong dòng lệnh inline-assembly thì chương trình dịch sẽ chuyển khối lệnh hợp ngữ này vào và dịch với việc qui chiếu biến Pascal ra dạng tương ứng của hợp ngữđể thực hiện.
Dưới đây là một ví dụđơn giản để minh họa:
Ví dụ 1: viết chương trình tìm giá trị nhỏ nhất (min) cho hai số bằng ngôn ngữ Pascal có chèn các dòng lệnh dạng inline-assembly. Giả sử file chưong trình là Min.pas
Program Min; Uses crt; Var
m,n: integer;
function min(int x, int y): integer;
/*Chương trình con tìm min*/
begin asm mov ax,x; cmp ax,y; jb thoat; mov ax,y;
mov x,ax; thoat: min=x; end; end; Begin Clrscr; /*Nhập vào 2 số từ bàn phím*/ write (“m= ”); readln(m); write (“n= ”); readln(n); /*In min*/
write (“So be la: ”, min(m,n));
readln(); /*chờ người dùng gõ vào 1 phím*/
End.
Để thực hiện chương trình ta gõ lệnh: tpc Min.pas <enter>
Chương trình sẽđược dịch ra file exe.
b .Viết tách biệt nhiều module hợp ngữ và Pascal riêng rẽ
Giống như viết tách biệt module và hợp ngữ, khi viết tách biệt giữa Pascal và hợp ngữ cũng phải xử lý một số vấn đề tương tự như: các lệnh điều khiển dịch, các vấn đề liên kết thông tin qua các biến, bảo vệ và khôi phục giá trị các thanh ghi đoạn và sự tương thích về kiểu dữ liệu.
Trong các vấn đề trên, hầu hết các vấn đề đều được giải quyết tương tự như việc đối với C và hợp ngữ. Sự tương thích về kiểu dữ liệu có đôi chút khác biệt, dưới đây là bảng tương thích kiểu dữ liệu giữa hợp ngữ và Pascal.
Kiểu khai báo dữ liệu trong Pascal Kiểu khai báo dữ liệu trong hợp ngữ
Byte Byte Word Word Shortint Byte Integer Word Real Fword Single DWord Double QWord Extended TByte Comp Qword Pointer Dword
Ví dụ: Tính tổng các phần tử trong một dãy số nguyên dương khi biết sốđầu tiên và số các phần tử cần tính.
Chương trình được thành hai module. Module hợp ngữ có nhiệm vụ tính tổng của các phần tử. Module này được lưu vào file sum.asm
.MODEL Small .DATA
EXTRN _sodau: WORD,_sophantu: WORD .DATA ? Tong dw ? .CODE PUBLIC Sum Sum PROC Mov CX, [sophantu] Mov AX, [sodau] Mov [tong],AX TinhTong:
Inc AX
Add [tong],AX
Loop TinhTong ; tiep tuc tinh tong neu CX<>0 Mov AX, Tong
Ret
Sum ENDP
END
Module Pascal được lưu trong file InTong.pas Program Tong; Uses crt; {F+} Var Sodau: integer; Sophantu: integer;
function Sum: integer; external; {$I sum.obj}
{F-} Begin Begin
Clrscr;
write (“So dau: ”); readln(sodau);
write (“So phan tu: ”); readln(sophantu);
write (“Tong la: ”, Sum);
End.
Để tạo ra file chạy (.exe) ta tiến hành qua các bước sau: - Dịch module hợp ngữ (để tạo file sum.obj)
- Dịch module Pascal có lên kết với file sum.obj Tpc –ml Intong <enter>
3.4 CÁC CHƯƠNG TRÌNH NGẮT
Ngắt là một cơ chế yêu cầu CPU tạm dừng công việc (task) đang thực hiện để thực hiện 1 công việc khác. Nói cụ thế hơn, ngắt yêu cầu CPU tạm dừng chương trình đang thực hiện để thực hiện một chương trình con phục vụ ngắt.
Người ta tạm chia ngắt ra làm hai loại: ngắt cứng và ngắt mềm. Các ngắt mềm được kích hoạt bằng lệnh INT n trong đó n là số hiệu ngắt dưới dạng một số hexa. Ngắt cứng khác vơi ngắt mềm ở chỗ không được kích hoạt bằng một lệnh INT n trong chương trình mà được kích hoạt bằng các tác động của các tín hiệu linh kiện điện tử như bàn phím, ổđĩa,..
Phần này giới thiệu về các ngắt và các dịch vụở mức BIOS và mức hệđiều hành DOS và cách viết chương trình thường trú và chương trình con ngắt.