IRET
;--- ORG 70 ;chuyển các bit từ RAM vào AL
DB 0
MOV AL,[70]
NOT AL ;đảo các bit trong AL
AND AL,FE ;Bắt buộc bít bên phải ngoài cùng bằng 0 MOV [70],AL ;chuyển các bit đã đảo lại vào RAM
OUT 02 ;hiển thị số 8 trên Led 7 đoạn bên trái IRET
END
;---
Bài tập 10. Nhấn nút Play để xem.
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