Xử lý ưu tiên ngắt

Một phần của tài liệu BÀI GIẢNG KỸ THUẬT VI XỬ LÝ (Trang 98 - 99)

DIV nguồn (Unsigned Divide)

G A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O7 00010110000111

6.2.3. Xử lý ưu tiên ngắt

Như đã đề cập đến, vấn đề trở nên phức tạp là tại cùng một thời điểm mà có nhiều tín hiệu yêu cầu ngắt tác động đến CPU (thuộc các kiểu ngắt khác nhau). Khi đó CPU sẽ xử lý như thế nào? Thực hiện (phục vụ) chương trình con phục vụ ngắt nào? Thực ra CPU xử lý các yêu cầu ngắt theo mức ưu tiên (theo thiết kế) với nguyên tắc ngắt nào có mức ưu tiên cao nhất sẽ được CPU nhận biết và phục vụ trước.

Ngay từ khi thiết kế và chế tạo (thường gọi là ngầm định) CPU 8088 có khả năng phân biệt các mức ưu tiên khác nhau cho các loại ngắt theo thứ tự từ cao xuống thấp như sau:

Yêu cầu ngắt

Chương trình hiện tại của CPU

CPU tự: Cất FR Xố IF, TF Cất CS, IP Lấy địa chỉ IR CPU tự: Cất FR Xoá IF, TF Cất CS, IP Lấy địa chỉ IR ISR Lệnh cất các thanh ghi Thân ISR

Lệnh lấy các thanh ghi IRET

Các ngắt Mức ưu tiên

Ngắt nội bộ: INT 0 (phép chia 0), INT N,

INTO 0: Cao nhất

Ngắt NMI 1

Ngắt INTR 2

Ngắt để chạy từng lệnh (INT 1) 3: Thấp nhất

Để thấy rõ sự hoạt động của CPU trong cơ chế ngắt ưu tiên này, ta có thể lấy mơtj ví dụ cụ thể như sau: Giả sử tại một thời điểm nào đó, khi CPU (ở trạng thái cho phép ngắt với cờ IF=1) đang thực hiện phép chia và có lỗi xảy ra do số chia bằng 0, tai thời điểm này CPU cũng nhận được yêu cầu ngắt từ đầu bào INTR. Theo thứ tự ưu tiên ngầm định trong việc xử lý ngắt của 8088 thì INT o có mức ưu tiên cao hơn ngắt che được INTR nên CPU sẽ thực hiện ISR tương ứng INT 0 để đáp ứng với lỗi đặc biệt do phép chia 0 gây ra và cờ IF được xoá về 0 => yêu cầu ngắt INTR sẽ (tự động) bị cấm cho tới khi ISR tương ứng INT 0 kết thúc và trở về nhờ lệnh IRET, cờ IF được khôi phục trở lại (tồn bộ thanh ghi cờ). Tiếp đó CPU sẽ đáp ứng yêu cầu ngắt INTR bằng cách thực hiện ISR tương ứng INTR đó.

Một phần của tài liệu BÀI GIẢNG KỸ THUẬT VI XỬ LÝ (Trang 98 - 99)