日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

外中断---汇编学习笔记

發布時間:2025/3/15 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 外中断---汇编学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

外中斷

要及時處理外設的輸入,顯然需要解決兩個問題:

  • 外設的輸入隨時可能發生,CPU如何得知?
  • CPU從何處得到外設的輸入?

  • 15.1 接口芯片和端口

    外設的輸入不直接送入內存和CPU,而是送入相關的接口芯片的端口中;CPU向外設的輸出也不是直接送入外設,而是先送入端口中,再由相關的芯片送到外設。CPU還可以向外設輸出控制命令,而這些控制命令也是先送到相關芯片的端口中,然后再由相關的芯片根據命令對外設實施控制。


    15.2 外中斷信息

    有一種中斷信息,來自于CPU外部,當CPU外部有需要處理的事情發生的時候,比如說,外設的輸入到達,相關的芯片將向CPU發出相應的中斷信息。CPU在執行完當前指令后,可以檢測到發送過來的中斷信息,引發中斷過程,處理外設的輸入。

    在PC系統中,外中斷源一共有以下兩類。

    (1)可屏蔽中斷
    可屏蔽中斷是CPU可以不響應的外中斷。CPU是否響應可屏蔽中斷,要看標志寄存器的IF位的設置。如果IF=1,則CPU在執行完當前指令后響應中斷,如果IF=0,則不響應可屏蔽中斷。

    過程如下:

  • 如果IF=1,則執行下面4步;反之,則不執行
  • 取中斷類型碼n
  • 標志寄存器入棧,IF=0,TF=0
  • CS、IP入棧
  • (IP)=(n?4),(CS)=(n?4+2)(IP)=(n?4),(CS)=(n?4+2)
  • 8086CPU提供的設置IF的指令如下:

    sti,設置IF=1 cli,設置IF=0

    (2)不可屏蔽中斷
    不可屏蔽中斷是CPU必須響應的外中斷。當CPU檢測到不可屏蔽中斷信息時,則在執行完當前指令后,立即響應,引發中斷過程。

    對于8086CPU,不可屏蔽中斷的中斷類型碼固定為2,所以中斷過程:

  • 標志寄存器入棧,IF=0,TF=0
  • CS、IP入棧
  • (IP)=(8),(CS)=(0AH)(IP)=(8),(CS)=(0AH)
  • 幾乎所有由外設引發的外中斷,都是可屏蔽中斷。當外設有需要處理的事件發生時,相關芯片向CPU發出可屏蔽中斷信息。不可屏蔽中斷是在系統中有必須處理的緊急情況發生時用來通知CPU的中斷信息。在這門課程中,主要討論可屏蔽中斷。


    15.3 PC機鍵盤的處理過程

    很通俗易懂,略過。

    鍵盤輸入的處理過程:

  • 鍵盤產生掃描碼
  • 掃描碼送入60h端口
  • 引發9號中斷
  • CPU執行int 9中斷例程處理鍵盤輸入

  • 15.4 編寫int 9中斷例程

    內容自己看,也很易讀。

    檢測點 15.1
    (1)仔細分析一下上面的int 9中斷例程,看看是否精簡一下?其實在我們的int 9中斷例程中,模擬int指令調用原int 9中斷例程的程序段可以精簡的,因為在進入中斷例程后,IF和TF都已經置0,沒有必要再進行設置了,對于程序段:

    pushf pushf pop ax and ah,11111100b push ax popf call dword ptr ds:[0]

    可以精簡為:

    pushf call dword ptr ds:[0]

    (2)仔細分析上面程序中的主程序,看看有什么潛在問題?在主程序中,如果在執行設置int 9中斷例程的段地址和偏移地址的指令之間發生了鍵盤中斷,則CPU將轉去一個錯誤的地址執行,將發生錯誤。找出這樣的程序段,改寫它們,排除潛在問題。(提示,注意sti和cli指令的用法)
    答:應該在執行設置int 9的CS之前將IF置0,設置int 9的IP之后將IF置1(設置新int 9的地方和設置舊int 9的地方,這2處需要將IF置0和置1)。


    15.5 安裝新的int 9中斷例程

    略過。

    CPU對外設輸入的通常處理方法:

  • 外設的輸入送入端口
  • 向CPU發出外中斷(可屏蔽中斷)信息
  • CPU檢測到可屏蔽中斷信息,如果IF=1,CPU在執行完當前指令后響應中斷,執行相應的中斷例程
  • 可在中斷例程中實現對外設輸入的處理

  • 實驗15 安裝新的int 9中斷例程

    安裝一個新的int 9中斷例程,功能:在DOS下,按下“A”鍵后,除非不再松開,如果松開,就顯示滿屏幕的“A”;其他的按鍵照常處理。
    分析:

  • 在安裝新int 9的時候,將原int 9的入口地址記錄下來(可以在int 9的code段之前定義一個data段,用來記錄原int 9中斷例程的CS和IP)
  • 安裝新的int 9中斷例程
  • 如果遇到A的斷碼,則執行新int 9的指令
  • 否則,執行原int 9的指令,而入口地址已經被我們記錄下來了

  • 總結

    以上是生活随笔為你收集整理的外中断---汇编学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。