日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

外中斷

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

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

  • 15.1 接口芯片和端口

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


    15.2 外中斷信息

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

    在PC系統(tǒng)中,外中斷源一共有以下兩類。

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

    過程如下:

  • 如果IF=1,則執(zhí)行下面4步;反之,則不執(zhí)行
  • 取中斷類型碼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檢測到不可屏蔽中斷信息時,則在執(zhí)行完當前指令后,立即響應,引發(fā)中斷過程。

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

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


    15.3 PC機鍵盤的處理過程

    很通俗易懂,略過。

    鍵盤輸入的處理過程:

  • 鍵盤產(chǎn)生掃描碼
  • 掃描碼送入60h端口
  • 引發(fā)9號中斷
  • CPU執(zhí)行int 9中斷例程處理鍵盤輸入

  • 15.4 編寫int 9中斷例程

    內(nèi)容自己看,也很易讀。

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

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

    可以精簡為:

    pushf call dword ptr ds:[0]

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


    15.5 安裝新的int 9中斷例程

    略過。

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

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

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

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

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

  • 總結

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。