Bài tập 11

Chương trình ngắt cứng và gọi thủ tục ngắt

 

Mục đích-yêu cầu:

  • Bài tập này giới thiệu ngắt cứng và cách gọi thủ tục ngắt.
  • Sử dụng ngắt cứng trong trao đổi dữ liệu.

Kiến thức nền:

1/ Ngắt cứng:

Ngắt cứng là yêu cầu ngắt CPU do các tín hiệu điện đến từ chân INTR và NMI ( ngắt có che và không che). Khác với ngắt mềm, ngắt cứng không được khởi động bởi chương trình mà bởi các thiết bị có trong phần cứng. Loại ngắt này là một chế độ đặc biệt rất hiệu quả được trang bị để tạo cơ chế điều khiển mềm dẻo và linh hoạt (flexible) khi hệ có nhiều thiết bị ngoại vi. Bình thường CPU tiến hành công việc theo chế độ chính là chế độ làm việc theo chương trình, chỉ khi nào có sự tác động bởi tín hiệu điện từ phần cứng gởi đến CPU mới tạm dừng công việc hiện tại để phục vụ yêu cầu của thiết bị ngoại vi đó. Tín hiệu từ các thiết bị phần cứng gởi đến thì không biết trước về mặt thời gian, ví dụ như khi nhấn hay nhả một phím nhấn thì ngắt bàn phím sẽ được kích hoạt, nó sẽ gởi tín hiệu đến CPU. CPU tạm dừng công việc đang thực hiện và xử lý việc ngắt : cụ thể là chuyển ký tự này vào vùng nhớ đệm. Khi việc xử lý này hoàn thành thì CPU mới quay trở lại chương trình chính nơi mà trước đó chương trình tạm dừng.

Ngắt cứng trong ví dụ trên có thể bị che chắn lại khi cờ I trong thanh ghi trạng thái không được thiết lập cụ thể bằng lệnh CLI (Clear Interrupt Flag)  : nghĩa là sự xuất hiện của lệnh này khiến cho không có ký tự nào được nhập từ bàn phím nữa mặc dù vẫn còn xuất hiện ngắt (phím vẫn được nhấn hay nhả). Ðể huỷ bỏ chế độ cấm ngắt trên ( thiết lập lại cờ I), ta dùng lệnh STI (Set Interrupt Flag), nó cho phép các ngắt bị che tác động trở lại bình thường.

Các ngắt truyền qua chân NMI không hề bị che chắn :luôn được thực hiện, kể cả khi ngắt này được gọi ngay sau lệnh CLI.

Ngoài hai loại ngắt vừa nêu trên, CPU còn có ngắt cứng bên trong. Những ngắt này không bị kích hoạt bởi thiết bị ngoại vi mà bởi chính các IC bổ trợ nằm trong hệ vi xử lý.

Khác với ngắt mềm, ngắt cứng không được kích hoạt bởi chương trình phần mềm mà do các thiết bị tham gia trong phần cứng của hệ vi xử lý tác động. Ví dụ: khi phím được nhấn, hết giấy máy in, thao tác trên chuột, đưa dĩa mềm vào máy tính .

Khi có nhiều yêu cầu ngắt thuộc các loại ngắt khác nhau cùng lúc đòi hỏi CPU phục vụ thì CPU sẽ thực hiện xử lý yêu cầu ngắt theo thứ tự ưu tiên 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. Ngắt được phân công ưu tiên như ổ đĩa thì được ưu tiên trước máy in...Trong chương trình mô phỏng này ngắt cứng chính là INT 02. Nó được tạo ra bởi một bộ định thời. Tín hiệu ngắt được phát ra một cách đều đặn, khoảng cách giữa hai ngắt có thể đặt trước trong Configuration Tab. Ðể chỉnh khoảng thời gian xuất hiện giữa hai lần tín hiệu ngắt INT 02, chọn View > Configuration.

 

 

Chọn Increase (tăng) hay Reduce (giảm) để chỉnh tần số xuất hiện của lệnh INT 2. Lưu ý do ở đây là chỉnh chu kỳ nên muốn tăng tần số xuất hiện lệnh ngắt phải giảm thời gian chu kỳ.

 

Bạn phải đặt một vectơ ngắt tại địa chỉ 02 để chỉ đến mã ngắt của bạn tại một địa chỉ nào đó trong RAM, khi có tín hiệu ngắt chương trình phục vụ ngắt của bạn sẽ thực thi. Hãy xem ví du minh hoạ ở phần sau. Trong chương trình mà bạn đã soạn thảo, dù lệnh ngắt có hay không thì CPU vẫn liên tục thăm dò xem trạng thái của các thiết bị phần cứng, cụ thể với chương trình mô phỏng này lệnh ngắt INT 02 liên tục được phát ra nhưng thực thi hay không là tuỳ thuộc vào chương trình của bạn. 

  2/ Gọi thủ tục ngắt:

  Lệnh ngắt INT 2 dù do phần cứng hay phần mềm tác động, CPU sẽ lấy ra nội dung của RAM tại địa chỉ 02. Sau khi lưu địa chỉ quay lại trên ngăn xếp, con trỏ lệnh IP được chỉ đến địa chỉ được xác định trong  RAM. Sau  đó mã ngắt được thực hiện. Khi hoàn thành lệnh IRET, chương trình quay trở về chương trình chính. Con trỏ lệnh IP của CPU được đặt đến địa chỉ được lưu trên ngăn xếp trước đó.

  Ngắt cứng có khác đôi chút so với ngắt mềm. Ngắt mềm được gọi với một lệnh giống như INT 02 và trở về ở lệnh ngay sau nó. IP+2 được cất vào ngăn xếp. Ngắt cứng không được gọi bởi một lệnh trong chương trình vì thế địa chỉ quay về không cần phải qua lệnh gọi. Nội dung trong IP được cất lên trên ngăn xếp.

 

Chương trình:

;-----------------------------------------------------------------------------------

; ví dụ này sử dụng ngắt cứng cho phép điều khiển song hành động cơ bước lẫn đèn giao thông

JMP        Start    ;nhảy đến nhãn Start (bảng của vectơ ngắt)

DB          50        ;vectơ tại địa chỉ 02 chỉ tới địa chỉ 50

Start:

STI                      ;set cờ I

MOV      AL,11

Rep:

OUT      05          ;điều khiển động cơ bước

ROR      AL        ;xoay bit trong AL sang phải

JMP       Rep

JMP       Start

 

;----------------------------------------------------------------------------------------

ORG      50     

PUSH    AL      ;lưu AL vào ngăn xếp

PUSH    BL      ;lưu BL vào ngăn xếp

PUSHF             ;lưu các cờ vào ngăn xếp

JMP       Pastdata

DB 84               ;đỏ 1 + xanh 2

DB C8              ;đỏ 1 + vàng 1 + vàng 2 

DB 30               ;xanh 1 + đỏ 2

DB 58               ;vàng 1 + đỏ 2 + vàng 2

DB 57               ;sử dụng kiểm tra tiến trình qua bảng

Pastdata:

            MOV    BL,[5B]         ;BL chỉ đến bảng dữ liệu

                        MOV    AL,[BL]        ;dữ liệu từ bảng đến AL

              OUT     01                  ; điều khiển đèn giao thông

                                                           ;Gửi dữ liệu trong AL ra đèn

                        CMP      AL,58          ;địa chỉ cuối trong bảng

                        JZ         Reset              ;nếu địa chỉ cuối được chỉ đến thì nhảy đến Reset

                        INC       BL                 ;tăng BL lên 1, BL chỉ đến địa chỉ kế tiếp trong bảng

              MOV     [5B],BL         ;lưu con trỏ vào trong Ram

    JMP       Stop              ;nhảy về nhãn Stop

Reset:

         MOV      BL,57       ;chỉ đến địa chỉ bắt đầu bảng dữ ;liệu

  MOV    [5B],BL      ;lưu con trỏ vào trong Ram

Stop:

            POPF                       ;khôi phục các cờ tới vị trí liền ;trước

            POP     BL               ;khôi phục BL tới giá trị liền ;trước

            POP      AL              ;khôi phục AL tới giá trị liền ;trước

            IRET                                         

END

; Lưu ý : để dễ quan sát kết quả, nên kết hợp chỉnh tần số xung Ck của CPU với tần số xuất hiện lệnh ngắt.

;-------------------------------------------------------------------------------------

Bài tập 11. Nhấn nút Play để xem.

Tải file phim về ở đây .