Chương trình thường trú và chương trình ngắt

Một phần của tài liệu CÁC CÔNG CỤ HỖ TRỢ (Trang 47 - 49)

- Ngắt 16h của BIOS

3.4.2 Chương trình thường trú và chương trình ngắt

a. Chương trình thường trú

- Khái niệm về chương trình thường trú

Chương trình thường trú (Terminate and Stay Resident- TSR) là chương trình có thể chạy “sau” chương trình khác, hỗ trợ khả năng kích hoạt, khả năng nằm lại bộ nhớ sau khi chạy xong. Sau đó khi ta chạy một chương trình khác với một điều kiện nào đó nó sẽđược kích hoạt để hoạt

Với chương trình bình thường khi chạy sẽ được một chương trình tải (Program Loader trong command.com) nạp vào vùng nhớ do DOS cấp phát. Khi chương trình thực hiện xong thì vùng nhớđã cấp phát cho nó được giải phóng và DOS sẽđánh dấu lại vùng nhớ này để cấp phát cho chương trình khác. Với chương trình thường trú thì bước cuối cùng không xảy ra, chương trình thường trú làm cho DOS đánh dấu lại miền dành cho DOS và vùng bị nó chiếm, do vậy sau này DOS sẽ không cấp phát vùng nhớ này cho chương trình khác, và như vậy nó được bảo vệ

chống bị viết đè bởi chương trình khác, bằng cách này thì chương trình thường trú trở thành một “bộ phận” của DOS.

Chỉ có file dạng COM với cấu trúc nằm gọn trong một đoạn mới dễ dàng trở thành chương trình thường trú. Ngoài hợp ngữ, người ta có thể viết chương trình thường trú trên các ngôn ngữ

lập trình bậc cao khác như ngôn ngữ C, Pascal … - Viết chương trình thường trú

Chương trình thường trú được viết giông như chương trình thông thường và thêm một đoạn mã của chương trình thường trú vào vùng nhớ dành cho DOS, đoạn mã đó sẽ không được kích hoạt nếu không được trao điều khiển. Việc thêm một đoạn mã tiếp dau vùng dành cho DOS được thực hiện bằng các chương tình con phục vụ ngắt. Đó là ngắt số 27H hoặc hàm 31H của ngắt 21H.

Có hai cách để làm cho chương trình thường trú được kích hoạt là: dùng ngắt và ấn một tổ

hơp phím (hot-key).

Các chương trình thường trú thường sửa nội dung của vector ngắt trong bẳng vector ngắt để

làm cho nó trỏđến địa chỉ của mình trong bộ nhớ, nhờ thế mỗi khi ngắt tương ứng được gọi thì chương trình thường trú lại được trao điều khiển. việc làm này được gọi là chặn vector ngắt. Chẳng hạn, nhiều chương trình POP-UP thường sửa ngắt bàn phím (vector ngắt bàn phím (số 9) nằm tại địa chỉ: 0:0024h) làm cho nó trỏđến địa chỉ của mình và cất địa chỉ của INT 9h để cho nó làm nhiệm vụ khi càn thiết.

- Các bước viết chương trình thường trú

Bước 1: Lấy và đặt lại vector ngắt bằng các dịch vụ của DOS

Ta luôn cần đến các chương trình con phục vụ ngắt đã có của hệ thống để không phải viết lại trong chương trình của mình đoạn chương trình đã có, vì vậy cần lấy nội dung của vector ngắt cũ cất vào miền dữ liệu của chương trình thường trú, khi nào cần sẽ trả lại giá trị này cho vector ngắt mà chương trình thường trú đã thay đổi. Giá trị của một vector ngắt là 2 từ tương ứng với

địa chỉđoạn (CS) và địa chỉ lệch (IP) của chương trình con phục vụ ngắt tương ứng. + Lấy vector ngắt (Get Interrupt Vector)

Hàm 35h:

Ý nghĩa: Lấy địa chỉ của một ngắt từ bảng vector ngắt.

Đầu vào: AH=35h

AL=số hiệu vector ngắt Int 21h

Đầu ra: ES:BX = giá trị của vector ngắt.

Ví dụ: Đoạn chương trình sau lấy vector ngắt của bàn phím (INT 9h) MODEL Tiny

Org 100h Jmp Load_Prog

; vùng dữ liệu SohieuNgat EQU 9h

NgatCu DW 2 DUP(0); luu dia chi ngat cu Load_Prog PROC

Mov AH,35

Mov AL, SohieuNgat Int 21h

Mov NgatCu,BX ; lay dia chi lech Mov NgatCu[2],ES ; lay dia chi doan ….

Một phần của tài liệu CÁC CÔNG CỤ HỖ TRỢ (Trang 47 - 49)

Tải bản đầy đủ (PDF)

(54 trang)