• Các loại ngắt
Người ta chia ngắt thành hai loại: ngắt cứng và ngắt mềm
+ Ngắt cứng: còn gọi là ngắt ngoài vì do nguyên nhân bên ngoài. VXL có
các lối vào dành cho ngắt ngoài. Khi có tín hiệu vào lối vào này, chương trình VXL đang thực hiện sẽ bị dừng.
– Ngắt NMI ( Non maskable Interrupt) - Ngắt không che được : Khi có
ngắt này, VXL dừng chương trình sau lệnh đang thực hiện, thanh ghi địa chỉ lệnh (IP) và thanh ghi chỉ thị flag được lưu giữ, 2 bit IF (Interrupt Flag) va TF (Trap Flag) bị xoá về 0 để cấm ngắt ngoài tiếp theo và không có bẫy. Muốn cho phép hay không cho phép ngắt này xảy ra, chúng ta dùng một triger (flip – flop) để mắc lối vào ngắt trước khi đưa vào lối vào ngắt NMI.
– Ngắt INTR:
o Ngắt này được cho phép hay cấm ngắt bằng cách lập hay xoá bit IF của thanh ghi flag. Lập bởi lệnh STI (Set Interrupt), xoá bởi lệnh CLI (Clearinterupt)
o Thường được nối với lối ra yêu cầu ngắt của vi mạch xử lý ưu tiên ngắt (8214, 8259).
– Ngắt reset :
+ Ngắt mềm: (hay ngắt bên trong do lệnh của chương trình) do VXL gặp
các lệnh gây ra ngắt hoặc tình huống đặc biệt khi thực hiện lệnh (ngắt logic) và ngắt của hệ điều hành.
- Ngắt do lệnh: đó là ngắt khi thực hiện các lệnh CALL, HLT, INT
- Ngắt logic hay các ngoại trừ: xảy ra khi gặp các tình huống đặc biệt sau:
o Chia một số cho 0
o Tràn nội dung thanh ghi hay bộ nhớ o Thực hiện từng bước (vector 1)
o Điểm dừng ( Break point) chương trình do người dung chương trình sử dụng định trước (Vectơ 3)
- Ngắt của hệ điều hành: đó là các ngắt do hệ điều hành quy định để phục vụ traođổi tin của các TBN (bàn phím, máy in, vv) như INT 10, INT 16, INT 21,.v.v..)
+ Ngắt của Máy tính – PC (8086, 80286 )
Các ngắt không hoàn toàn được liên kết với các thiết bị ngoài. Họ VXL 8086 cung cấp 256 ngắt, đa phần trong số chúng là chỉ để phục vụ như ngắt phần mềm. Họ 8086 có một bảng vecter ngắt giữ địa chỉ của các chương trình phục vụ ngắt. Mỗi địa chỉ là 4 byte.
Trong các máy PC, chỉ có 15 ngắt dành cho phần cứng và 1 ngắt không che được.Phần còn lại được sử dụng cho các ngắt phần mềm và các bộ xử lý ngoại lệ. Bộ xử lý ngoại lệ là các chương trình tương tự như ISR nhưng xử lý các ngắt khi xuất hiện lỗi.
Ví dụ như vector ngắt đầu tiên giữ địa chỉ của ngoại lệ Divide by Zero (lỗi chia cho 0). Khi xuất hiện lỗi này VXL nhảy sang địa chỉ 0000:0000 và thực hiện chương trình có địa chỉ lưu ở đây.
INT (Hex)
IRQ Common Uses
00 - 01 Exception Handlers -
02 Non-Maskable IRQ Non-Maskable IRQ (Parity Errors)
03 - 07 Exception Handlers -
08 Hardware IRQ0 System Timer
09 Hardware IRQ1 Keyboard
0A Hardware IRQ2 Redirected 0B Hardware IRQ3 Serial Comms.
COM2/COM4 0C Hardware IRQ4 Serial Comms.
COM1/COM3
0D Hardware IRQ5 Reserved/Sound Card 0E Hardware IRQ6 Floppy Disk Controller 0F Hardware IRQ7 Parallel Comms.
10 - 6F Software Interrupts -
70 Hardware IRQ8 Real Time Clock 71 Hardware IRQ9 Redirected IRQ2 72 Hardware IRQ10 Reserved
73 Hardware IRQ11 Reserved 74 Hardware IRQ12 PS/2 Mouse
76 Hardware IRQ14 Hard Disk Drive 77 Hardware IRQ15 Reserved
78 -FF Software Interrupts - + Thủ tục xử lý (đáp ứng) ngắt chương trình
Khi có một tin hiệu yêu cầu ngắt chương chình đưa vào chân yêu cầu ngắt (INTR), quá trình ngắt chương trình được diễn ra theo các bước sau:
– Lưu giữ tin về trạng thái của VXL lúc có tín hiệu yêu cầu ngắt và nơi chương trình bị gián đoạn.
– VXL gửi tín hiệu xác nhận hay cho phép ngắt – INTA và đọc vector ngắt.
– Chuyển sang chương trình phục vụ ngắt.
– Trở về chỗ chương trình chính bị ngắt và tiếp tục thực hiện chương trình đó.
+ Lưu giữ tin về chỗ bị ngắt chương trình:
Ở cuối mỗi chu trình lệnh, VXL 8086 ( cũng như 80286) kiểm tra xem có yêu cầu ngắt nào gửi tới không. Nếu có yêu cầu, VXL tiến hành lưu trữ tin về nơi bị ngắt chương trình ( dùng lệnh PUSH vào vùng nhớ ngăn xếp mà địa chỉ chỉ thị bởi thanh ghi SP).
Các tin đó là:
- Thanh ghi cờ Flag FR (Flag Register) - Con trỏ lệnh IP (Instruction Pointer)
- Thanh ghi đoạn lệnh CS (Code Segment register)
+ Gửi tín hiệu cho phép (xác nhận ) ngắt và đọc vector ngắt:
Sau khi đã lưu trữ tin về vị trí bị ngắt của chương trình chính, VXL gửi tín hiệu xác nhận ngắt INTA (Interrupt Acknowledge) cho KGN của TBN. Tuỳ cách tổ chức ngắt và tạo vector ngắt, VXL sử dụng tín hiệu này để đọc vector ngắt tương ứng của KGN vào thanh ghi chứa A. VXL đọc nội dung của ô nhớ có địa chỉ là vector ngắt để biết được địa chỉ đầu tiên của chương trình con phục vụ ngắt ( chương trình trao đổi tin).
+ Thực hiện chương trình con phục vụ ngắt
Đó là chương trình mà địa chỉ lệnh đầu tiên nằm trong ô nhớ có địa chỉ là vector ngắt. Kết thúc chương trình con này, có lệnh trở về (RET - return) để VXL tiếp tục thực hiện chương trình chính.
+ Tiếp tục thực hiện chương trình chính:
Sau khi gặp lệnh trở về (RET), VXL tiến hành đọc và hồi phục các tin của VXL lúc bị ngắt chương trình đã ghi nhớ ở chỗ ngắt chương trình (bằng lệnh POP các ô nhớ ngăn xếp). Qua trình đọc ra này xảy ra ngược lại với quá trình ghi vào (o quy luật LIFO – Last In First Out) và nội dung của:
– Thanh ghi con trỏ lệnh (IP) trỏ về độ lệch (offset) của địa chỉ lệnh tiếp theo của chương trình chính bị ngắt trong mảng nhớ lệnh (CS).
– Thanh ghi mảng lệnh (CS) về địa chỉ đoạn đầu tiên của vùng nhớ dành cho chương trình chính bị ngắt.
– Thanh ghi flag lúc bị ngắt chương trình.