- Lệnh điều khiển #pragma inline
3.4.1 Ứng dụng các ngắt của BIOS & DOS
Máy tính có 256 ngắt được đánh số hiệu từ 00h đến FFh. Trong đó các ngắt có số hiệu từ
00h đến 1Fh là các ngắt của BIOS, còn các ngắt còn lại từ 20h đến FFh là các ngắt của DOS. Dưới đây ta sẽ tìm hiểu các ngắt theo từng nhóm ngắt.
a. Các ngắt của BIOS & DOS
Địa chỉ Số hiệu ngắt Chức năng
Các ngắt phục vụ hệ thống
0-3 0 CPU: chia cho 0
4-7 1 CPU: chạy từng bước của DEBUG 8-B 2 CPU: ngắt NMI (hiện thông báo halt) C-F 3 CPU: thực hiện đến điểm dừng (break point) 10-13 4 CPU: tràn số (overflow) 14-17 5 In nội dung ra mà hình 18-1B 6 Phục vụ liên lạc 1C-1F 7 Dự trữ Các ngắt cứng 20-23 8 IRQ0: CLK (18.2 lần/s) nối từ chip 8253 24-27 9 IRQ1: bàn phím 28-2B A IRQ2: đầu vào của 8259 thứ 2 2C-2F B IRQ3: giao diện nối tiếp
30-33 C IRQ4:giao diện nối tiếp
34-37 D IRQ5: thường nối với máy in nối tiếp 38-3B E IRQ6: phục vụđĩa mềm
3C-3F F IRQ5: thường nối với máy in song song Các ngắt thực sựđặc trưng cho BIOS
40-43 10 Màn hình (I/O video) 44-47 11 Xác định cấu hình
48-4B 12 Cho biết kich cỡ của RAM 4C-4F 13 Thâm nhập đĩa mềm, đĩa cứng. 50-53 14 Giao diện nối tiếp
54-57 15 Giao diện với cassete 58-5B 16 Kiểm tra bàn phím
5C-5F 17 Truy nhập máy in song song 60-63 18 Gọi BASIC trong ROM
64-67 19 Khởi động nóng hệ thống (Ctrl+Alt+Del) 68-6B 1A Thông báo thời gian
6C-6F 1B Quản lý phím Ctrl+Break 70-73 1C Dành cho dồng hồ 74-77 1D Địa chỉ bảng tham số cho màn hình 78-7B 1E Cho biết các tham số của đĩa mềm 7C-7F 1F Địa chỉ các bảng font các kí tự mở rộng Các ngắt của DOS 80-83 20 Kết thúc chương trình dạng COM 84-87 21 Các hàm của DOS 88-8B 22 Địa chỉ kết thúc chương trình 8C-8F 23 Địa chỉ thủ tục Ctrl+Break 90-93 24 Báo lỗi đĩa 94-97 25 Đọc đĩa mềm, đĩa cứng 98-9B 26 Ghi đĩa 9C-9F 27 Kết thúc chương trình và thường trú
liệu 29-3F Dự trữ 40 BIOS phục vụđĩa mềm 41 Địa chỉ của bảng đĩa cứng 1 42-49 Dự trữ 4A Hẹn giờ 4B-6F Dự trữ 70-77 Ngắt cứng của 8259 thứ 2 78-7F Dự trữ
80-F0 Dùng cho bộ thông dịch BASIC
F1-FF Dự trữ
b. Cơ chế hoạt động khi một ngắt được kích hoạt
Khi có một yêu cầu ngắt số hiệu N đến chân CPU và nếu yêu cầu ngắt này được CPU đáp
ứng Khi đó CPU sẽ thực hiện các công việc sau:
1. Cất nội dung của thanh ghi cờ (FR) vào đỉnh của ngăn xếp. (Bằng việc tự động thực hiện câu lệnh PUSHF).
2.Cấm các ngắt khác tác động vào CPU để CPU chạy ở chếđộ bình thường. Đặt các cờ
Ì=0 và TF =0 bằng cách thực hiện các lệnh: CLI và CLT.
3. Cất địa chỉđoạn (segment) của chương trình gọi chương trình ngắt vào ngăn xếp bằng lệnh PUSH CS.
4. Cất địa chỉ lệch (offset) của lệnh kế tiếp của chương trình gọi chương trình ngắt vào ngăn xếp PUSH IP.
5. Lấy địa chỉ mới của chương trình con phục vụ ngắt số hiệu N trong bảng vector ngắt bằng cách lấy địa chỉ offset và segment của ngắt N từ bảng vector ngắt.
IP=[N*4] CS=[N*4+2]
6. Khi gặt lệnh cuối cùng của chương trình con phục ngắt (lênh IRET). Bộ vi xử lý sẽ quay lại chương trình gọi ngắt tại địa chỉ trả về và khôi phục các giá trị của các thanh ghi từ ngăn xếp bằng các lệnh sau:
POP IP POP CS POPF
Giải thích cho mục 5. Ta biết rằng các địa chỉ của chương trình con phục vụ ngắt được lưu vào trong một bảng có kích thước 1K từđịa chỉ 0000h đến 03FFh của bộ nhớ RAM. Bảng vector ngăt lưu địa chỉ của 256 chương trình con phục vụ ngắt và mối địa chỉ chiếm 4 byte trong đó 2
byte dành cho địa chỉđoạn (segment) và 2 byte dành cho địa chỉ lệch (offset). Như bảng ở trên,
điạ chỉ của chương trình con phục vụ ngắt 0 chiếm byte 0-3, ngắt 1 chiếm byte 4-7 … và chương trình con phục vụ ngắt thứ N sẽ có địa chỉ 4*N. Trong đó 2 byte [4*N] và [4*N+1] là địa chỉ lệch (offset) và 2 byte [4*N+2] và [4*N+3] là địa chỉđoạn (segment).
c. Các ngắt của BIOS và DOS phục vụ bàn phím