王爽《組合語言》第三版 第十五章 外中斷

2022-08-21 07:33:12 字數 1284 閱讀 5346

引言

cpu 除了有運算能力外,還要有 i/o( input/output ,輸入/輸出)能力。

15.1 介面晶元和埠

在pc系統的介面卡和主機板上,裝有各種介面晶元。這些外設介面晶元的內部有若干暫存器,cpu將這些暫存器當作埠來訪問。

外設的輸入不直接送入記憶體和cpu ,而是送入相關的介面晶元的埠中。

cpu向外設的輸出也不是直接送入外設,而是先送入埠中,再由相關的晶元送到外設。

15.2 外中斷資訊

當cpu 檢測到可遮蔽中斷資訊時:

1.如果if=1,則cpu 在執行完當前指令後響應中斷,引發中斷過程;

2.如果if=0,則不響應可遮蔽中斷。

可遮蔽中斷資訊來自於cpu外部,中斷型別碼是通過資料匯流排送入cpu的。

8086cpu 提供的設定if的指令如下:

1.sti,用於設定if=1;

2.cli,用於設定if=0。

對於8086cpu不可遮蔽中斷的中斷型別碼固定為2。所以中斷過程中,不需要取中斷型別碼。

15.3 pc機鍵盤的處理過程

鍵盤輸入的處理過程:

1.鍵盤輸入

2.引發9號中斷

3.執行int 9中斷例程

按下乙個鍵時,開關接通,該晶元就產生乙個掃瞄碼,掃瞄碼說明了按下的鍵在鍵盤上的位置。掃瞄碼被送入主機板上的相關介面晶元的暫存器中,該暫存器的埠位址為60h。

鬆開按下的鍵時,也產生乙個掃瞄碼,掃瞄碼說明了鬆開的鍵在鍵盤上的位置。鬆開按鍵時產生的掃瞄碼也被送入60h埠中。 

掃瞄碼長度為乙個位元組,通碼的第7位為0,斷碼的第7位為1,即:斷碼 = 通碼+80h。

bios鍵盤緩衝區可以儲存15個鍵盤輸入,因為int9中斷例程除了接收掃瞄碼外,還要產生和掃瞄碼對應的字元碼,所以在bios鍵盤緩衝區中,乙個鍵盤輸入用乙個字單元存放,高位位元組存放掃瞄碼,低位位元組存放字元碼。

0040:17 單元儲存鍵盤狀態位元組,該位元組記錄了控制鍵和切換鍵的狀態。鍵盤狀態位元組各位記錄的資訊如下:

15.4 編寫int 9中斷例程

15.5 安裝新的int 9中斷例程

《組合語言》王爽第三版 實驗9

datas segment 此處輸入資料段 db w 00000010b,e 00000010b,l 00000010b,c 00000010b,o 00000010b db m 00000010b,e 00000010b,0,t 00100100b,o 00100100b,0 db m 01110...

王爽 組合語言第三版實驗7

這個題目做了很久,使用了2中方法做出了結果,不過目前在單步除錯時還有點疑問。題目 power idea公司從1975成立一直到1995年的基本情況被定義到了datasg中,程式設計將datasg段中的資料寫入到table段中,並計算21年中的人均收入 取整 結果儲存到table段中 兩種方法我都使用...

《組合語言(第三版)》王爽,實驗九

不知道為什麼,在win7下用的emu8086,顯示會錯位,到不了中間位置 在網上找了下別人的 發現即使是在別人那裡能正常顯示在中間位置,複製到我這裡都會顯示為上圖所示的樣子。下面是 定義資料段的時候為了後面不用將ascii碼和屬性分開讀取,就定義成如下這樣比較繁瑣的形式了。其實做的時候第一時間沒想到...