- 1、本文档共246页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电脑维修培训资料PPT
INT15h﹐ah=4Fh 在結束INT09h前﹐鍵盤會被重新開放﹐8042又可以開始處理按鍵信息﹒至于螢幕上顯示的相關字 符﹐這是另一個獨立的中斷INT16h的工作了﹒ INT09h 禁止KB中斷 CF=1? 開放中斷 Exit Al bit7=1? In al ,60h 處理按鍵 STC ﹒﹒﹒ IRET(INT15h) No Yes No Yes 圖8 - 6 INT09h和INT15h INT 15h 將ASCⅡ碼寫 入顯存 翻譯并執行指令 OS通過調用INT16h將可以訪問KB緩沖區﹒每一次調用會讀取2Bytes存入AX﹐其中ah存放系統掃描碼﹐al存放ASCⅡ碼﹒INT16h將對上述代碼作最后一次判別﹕ 對于擴展碼(擴展碼的判別方法見3 – 3 節)和非字符形式的指令碼將按系統定義作出相應指令﹒例如程式發現在AX中是L-Ctrl+C的擴展碼﹐系統將強行退出運行程式﹐并返回操作系統﹒ 而被讀取的若是字符ASCⅡ碼﹐這個ASCⅡ碼就會被直接存入指定的顯存﹐這時﹐螢幕的相應位址將會顯示出字符***** ﹒實際上﹐從一開始到這一步為止才是一個完整的按鍵過程﹒ 8.3.4 INT 16h ASCⅡ SYS Scan ASCⅡ=字符碼? No Exit Yes Exit AH AL 圖8 - 7 INT16h 鍵盤緩沖區內按鍵的處理 MEM 鍵盤緩沖區 INT16h讀出1 word INT16h直接從內存中的鍵盤緩沖區讀取按鍵﹐不需要通過复雜且易出錯的I/O指令去接触I/O Memory﹐ 因此在應用程序中這個中斷最常被調用﹒ 象調用INT16h的功能00h﹐以從AX中獲得按鍵﹒ 另外從兼容性的角度出發﹐應該調用OS中斷來獲取按鍵﹐如DOS中斷INT21h(ah=01h)﹒ 8.4常駐內存中的相關信息 8.4.1 鍵盤緩沖區 鍵盤緩沖區是一個32Bytes的FIFO區﹒在PC AT系統中﹐由40:80h和40:82h的兩個Bytes定義其在內存中的起始位址相對于段址40h的偏移量****** ﹒INT09h可以將按鍵寫入該緩沖區﹐INT16h可以從該緩沖區讀取按鍵﹒ 為了滿足先進先出的功能﹐該緩沖區設有頭﹑尾兩個指針﹒頭﹑尾指針分別表示緩沖區內第一個﹑最后一個按鍵相對于段址40h的偏移量﹒ 由于在緩沖區內每個按鍵都由系統掃描碼+ ASCⅡ碼构成﹐所以每一次訪問都將使某個指針變動兩個字節﹐以指向下一個Word的位址﹒具体的說﹐寫入時﹐尾指針將被加2﹔讀出時﹐頭指針被加2﹒若緩沖區是空的頭﹑尾指針重合﹔若緩沖區再寫入一個按鍵(這個按鍵并未被寫入)﹐尾指針就會等于頭指針﹐這時緩沖區被認為是滿的﹒此時將忽略繼續送來的鍵并使揚聲器發出“ Do” 的長鳴提示﹒ 圖8 - 8 鍵盤緩沖區結构 MEM MEM 鍵盤緩沖區 40:80h 40:82h 40:1Ah 40:1Ch 首指針 尾指針 8.4.2 LED狀態位 在INT09h處理按鍵時﹐對于改變KB上LED狀態的按鍵將不會將其轉換成ASCⅡ碼﹐而是直接向8042下達指令﹐讓8042去控制KB上的LEDs﹒ 在位址40:96h和40:97h的兩個Byte中﹐存有KB上LED和重要功能鍵的狀態相對應的質料﹒其中40:17h和40:96h有Ctrl等鍵是否被按下的信息﹐在8042向60h寫入系統掃描碼時﹐會更新此處的信息﹒稍后INT09h將會調用此Byte﹒ 位址40:18h和40:97h主要儲存KB LED的狀態﹐INT09h更新KB LED的同時也會更新此字節﹒OS將由此了解KB上 LED的狀態﹒ Caps Lock 開 右邊 Shift 鍵按下 左邊 Shift 鍵按下 Control 鍵按下 Alt 鍵按下 Scroll Lock 開 Num Lock 開 7 6 5 4 3 2 1 0 Insert開 40:17 h 圖8 - 9 常駐內存對應的鍵盤狀態 Caps Lock 鍵按下 Num Lock 鍵按下 Scroll Lock 鍵按下 Pause 激活 Sys Req 鍵按下 左Alt 鍵按下 7 6 5 4 3 2 1 0 Insert開 左Ctrl 鍵按下 7 6 5 4 3 2 1 0 讀鍵盤 ID 上次代碼是第一個 ID 字符 強制 Num Lock 101+鍵鍵盤 右 Alt 鍵按下 右 Ctrl 鍵按下 上次掃描碼是 E0h 上次掃描碼是 E1h 7 6 5 4 3 2 1 0 鍵盤傳送錯誤 LED 正在更新 鍵盤發
文档评论(0)