NGẮT VÀ XỬ LÍ NGẮT TRONG 8086

Một phần của tài liệu Bài giảng kỹ thuật vi xử lý (Trang 40 - 45)

4.1 Sự cần thiết phải ngắt CPU

Ngắt là việc tạm dừng việc chương trình đang chạy để CPU có thể chạy một chương trình khác nhằm xử lý một yêu cầu do bên ngoài đưa tới CPU như yêu cầu vào/ra hoặc do chính yêu cầu của bên trong CPU như lỗi trong khi tính toán.

Trong cách tổ chức trao đổi dữ liệu thông qua việc thăm dò trạng thái sẵn sàng của thiết bị ngoại vi, trước khi tiến hành bất kỳ một cuộc trao đổi dữ liệu nào CPU phải dành toàn bộ thời gian vào việc xác định trạng thái sẵn sàng làm việc của thiết bị ngoại vi. Để tận dụng khả năng của CPU để làm thêm được nhiều công việc khác nữa, chỉ khi nào có yêu cầu trao đổi dữ liệu thì mới yêu cầu CPU tạm dừng công việc hiện tại để phục vụ việc trao đổi dữ liệu. Sau khi hoàn thành việc trao đổi dữliệu thì CPU lại phải quay về để làm tiếp công việc hiện đang bị gián đoạn.

Trong các tín hiệu của CPU 8086 có tín hiệu cho các yêu cầu ngắt che được INTR và không che được NMI, chính các tín hiệu này sẽ được sử dụng vào việc đưa các yêu cầu ngắt từ bên ngoài đến CPU.

4.2 Các loại ngắt trong hệ 8086

Trong hệ vi xử lý 8086 có thể xếp các nguyên nhân gây ra ngắt CPU vào 3 nhóm như sau:

 Nhóm các ngắt cứng: đó là các yêu cầu ngắt CPU do các tín hiệu đến từ các chân INTR và NMI.

Ngắt cứng INTR là yêu cầu ngắt che được. Các lệnh CLI và STI có ảnh hưởng trực tiếp tới trạng thái của cờ IF trong bộ vi xử lý, tức là ảnh hưởng tới việc CPU có nhận biết yêu cầu ngắt tại chân này hay không. Yêu cầu ngắt tại chân INTR có thể có kiểu ngắt N nằm trong khoảng 0-FFH. Kiểu ngắt này phải được đưa vào buýt dữ liệu để CPU có thể đọc được khi có xung trong chu kỳ trả lời chấp nhận ngắt.

 Nhóm các ngắt mềm: khi CPU thực hiện các lệnh ngắt dạng INT N, trong đó N là số hiệu (kiểu) ngắt nằm trong khoảng 00-FFH (0-255).

CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086/8088

 Nhóm các hiện tượng ngoại lệ: đó là các ngắt do các lỗi nảy sinh trong quá trình hoạt động của CPU như phép chia cho 0, xảy ra tràn khi tính toán.

Yêu cầu ngắt sẽ được CPU kiểm tra thường xuyên tại chu kỳ đồng hồ cuối cùng của mỗi lệnh. Error! Reference source not found. trình bày một cách đơn giản để đưa được số hiệu ngắt N vào buýt dữ liệu trong khi cũng tạo ra yêu cầu ngắt đưa vào chân INTR của bộ vi xử lý 8086.

Giả thiết trong một thời điểm nhất định chỉ có một yêu cầu ngắt IRi được tác động và sẽ có xung yêu cầu ngắt đến CPU. Tín hiệu IRi được đồng thời đưa qua mạch khuếch đại đệm để tạo ra số hiệu ngắt tương ứng, số hiệu ngắt này sẽ được CPU đọc vào khi nó đưa ra tín hiệu trả lời.

Bảng 2-6 Quan hệ giữa IRi và số hiệu ngắt N tương ứng.

IR6 IR5 IR4 IR3 IR2 IR1 IR0 N

1 1 1 1 1 1 0 FEH (254) 1 1 1 1 1 0 1 FDH (253) 1 1 1 1 0 1 1 FBH (251) 1 1 1 0 1 1 1 F7H (247) 1 1 0 1 1 1 1 EFH (239) 1 0 1 1 1 1 1 DFH (223) 0 1 1 1 1 1 1 BFH (191)

4.3 Đáp ứng của CPU khi có yêu cầu ngắt

Khi có yêu cầu ngắt kiểu N đến CPU và nếu yêu cầu đó được phép, CPU thực hiện các công việc sau:

1. SP  SP-2, [SP]  FR, trong đó [SP] là ô nhớ do SP chỉ ra.

(chỉ ra đỉnh mới của ngắn xếp, cất thanh ghi cờ vào đỉnh ngăn xếp)

2. IF  0, TF  0.

(cấm các ngắt khác tác động vào CPU, cho CPU chạy ở chế độ bình thường)

(chỉ ra đỉnh mới của ngăn xếp, cất phần địa chỉ đoạn của địa chỉ trở về vào đỉnh ngăn xếp)

4. SP  SP-2, [SP]  IP

(chỉ ra đỉnh mới của ngăn xếp, cất phần địa chỉ lệch của địa chỉ trờ về vào đỉnh ngăn xếp)

5. [N*4]  IP, [N*4+2]  CS

(lấy lệnh tại địa chỉ mới của chương trình con phục vụ ngắt kiểu N tương ứng trong bảng vectơ ngắt)

6. Tại cuối chương trình phục vụ ngắt, khi gặp lệnh IRET [SP]  IP, SP  SP+2

[SP]  CS, SP  SP+2 [SP]  FR, SP  SP+2

(bộ vi xử lý quay lại chương trình chính tại địa chỉ trở về và với giá trị cũ của thanh ghi cờ được lấy ra từ ngăn xếp).

Về mặt cấu trúc chương trình, khi có ngắt xảy ra thì chương trình chính tạm dừng việc thực hiện và lưu các thanh ghi cần thiết như thanh ghi cờ. Sau đó con trỏ lệnh của CPU sẽ được trỏ tới đoạn mã của chương trình con phục vụ ngắt. Khi chương trình con phục vụ ngắt kết thúc, CPU khôi phục lại trạng thái các thanh ghi của chương trình chính và đặt con trỏ lệnh về vị trí bị ngừng khi phục vụ ngắt. Dưới đây là danh sách một số kiểu ngắt đặc biệt được xếp vào đầu dãy ngắt mềm INT N như sau: (adsbygoogle = window.adsbygoogle || []).push({});

+ INT 0: Ngắt mềm do phép chia cho số 0 gây ra,

+ INT1: Ngắt mềm để chạy từng lệnh ứng với trường hợp cờ TF=1, + INT2: Ngắt cứng do tín hiệu tích cực tại chân NMI gây ra,

+ INT3: Ngắt mềm để đặt điểm dừng của chương trình tại một địc chỉ nào đó + IN T4: (Hoặc lệnh INTO): ngắt mềm ứng với trường hợp cờ tràn OF=1.

Các kiểu ngắt khác còn lại thì được dành cho nhà sản xuất và cho người sử dụng định nghĩa:

+ INT 5-INT 1FH; dành riêng cho Intel trong các bộ vi xử lý cao cấp khác, + INT 20H-INT FFH: dành cho người sử dụng.

Các kiểu ngắt N trong INT N đều tương ứng với các địa chỉ xác định của chương trình con phục vụ ngắt mà ta có thể tra được trong bảng các vectơ ngắt. Intel quy định bảng này nằm trong RAM bắt đầu từ địa chỉ 00000H và dài 1 KB (vi xử lý 8086 có tất cả

CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086/8088

256 kiểu ngắt, mỗi kiểu ngắt ứng với 1 vectơ ngắt, 1 vectơ ngắt cần 4 byte để chứa địa chỉ đầy đủ cho CS:IP của chương trình con phục vụ ngắt).

Bảng 2-7. Bảng vectơ ngắt của 8086 tại 1KB RAM đầu tiên

03FEH-03FFH CS của chương trình con phục vụ ngắt INT FFH 03FCH-03FDH IP của chương trình con phục vụ ngắt INT FFH

0082H-0083H CS của chương trình con phục vụ ngắt INT 20H 0080H-0081H IP của chương trình con phục vụ ngắt INT 20H

000AH-000BH CS của chương trình con phục vụ ngắt INT 2 0008H-0009H IP của chương trình con phục vụ ngắt INT 2 0006H-0007H CS của chương trình con phục vụ ngắt INT 1 0004H-0005H IP của chương trình con phục vụ ngắt INT 1 0002H-0003H CS của chương trình con phục vụ ngắt INT 0 0000H-0001H IP của chương trình con phục vụ ngắt INT 0

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

Có một vấn đề rất thực tế đặt ra là nếu tại cùng một thời điểm có nhiều yêu cầu ngắt thuộc các loại ngắt khác nhau cùng đòi hỏi CPU phục vụ thì CPU sẽ phải có cơ chế để xử lý các yêu cầu ngắt này. Cơ chế phổ biến là chia các ngắt theo mức ưu tiên. CPU 8086 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:

+ ngắt trong: INT 0 (phép chia cho 0), INT N, INTO . . . cao nhất + ngắt không che được NMI

+ ngắt che được INTR

Theo thứ tự ưu tiên ngầm định trong việc xử lý ngắt của CPU 8086 thì INT 0 có mức ưu tiên cao hơn INTR, vì vậy đầu tiên CPU sẽ thực hiện chương trình phục vụ ngắt INT 0 để đáp ứng với lỗi đặc biệt cho phép chia cho 0 gây ra và cờ IF bị xóa về 0. Yêu cầu ngắt INTR sẽ tự động bị cấm cho tới khi chương trình phục vụ ngắt INT 0 được hoàn tất và trở về nhờ IRET, cờ IF cũ được trả lại. Tiếp theo đó CPU sẽ đáp ứng yêu cầu ngắt INTR bằng cách thực hiện chương trình phục vụ ngắt dành cho INTR.

CHƯƠNG 3.LẬP TRÌNH HỢP NGỮ VỚI 8086/8088

Chương 3. LẬP TRÌNH HỢP NGỮ VỚI 8086

Một phần của tài liệu Bài giảng kỹ thuật vi xử lý (Trang 40 - 45)