




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗六 擴充鍵盤處理功能的程序一、 實驗的目的與要求(一)實驗目的:掌握中斷的概念以及中斷服務程序的編寫(二)實驗要求:完成鍵盤處理基本功能的基礎上,增加left_shift 和 right_shift鍵的功能。要求實現(xiàn)左右SHIFT任何一個鍵處于按下狀態(tài)時輸入字符為鍵盤的上檔字符或大寫字母,否則輸出數(shù)字或小寫字母。二、實驗正文 實驗分析:本次實驗要求在示例3.6的基礎上,添加功能,關于left_shift和right_shift可以通過它們各自的掃描碼進行判斷,此外還應該設置標志變量便于程序的判斷,較示例的程序除了要添加判斷是否為shift鍵外,還應該再設置一張shifttab轉換表,這樣當
2、shift被按下時,應由這樣轉換表進行轉換,而其他情況下由,scantab轉換表轉換。在讀入信息時候需要在不同的端口讀入信息并判斷,通過檢測狀態(tài)和數(shù)據(jù)作出正確的操作。四、流程圖如下四、實驗結果附錄:程序源代碼如下: ;*stack segment db 256 dup(0)stack ends;*data segment buffer db 16h dup(0)bufpt1 dw 0bufpt2 dw 0kbflag db 0kbflag1 db 0prompt db -kbd_io program begin-,0dh,0ah,$scantab db 0,0,-=,8,0 db qwerty
3、uiop,0dh,0 db asdfghjkl,3bh,27h,0,0,0 db zxcvbnm,./,0,0,0 db ,0,0,0,0,0,0,0,0,0,0,0,0,0 db 789-456+1230.shiftab db 0,0,!#$%&*()_+,0,0 db QWERTYUIOP,0DH,0 db ASDFGHJKL:,0,0,0 db ZXCVBNM?,0,0,0 db ,26 dup(0)evenoldcs9 dw ?oldip9 dw ?data ends;*code segment ;-start proc far assume cs:code,ds:data push
4、ds mov ax,0 push ax mov ax,data mov ds,ax ; cli ;開中斷 mov al,09 ;中斷類型號 mov ah,35h ;DOS調用,取中斷向量 int 21h mov oldcs9,es ;ES:BX=中斷向量 mov oldip9,bx ; push ds mov dx,offset kbint mov ax,seg kbint mov ds,ax ;DS:DX=中斷向量 mov al,09 ;中斷類型號 mov ah,25h ;DOS調用,設置中斷向量 int 21h pop ds ; in al,21h and al,0fdh ;設置中斷屏蔽字
5、,只允許鍵盤中斷 out 21h,al ; mov dx,offset prompt mov ah,9 int 21h sti ;開中斷forever: call kbget test kbflag,80h jnz endint push ax call dispchar pop ax cmp al,0dh jnz forever mov al,0ah call dispchar jmp foreverendint: mov dx,oldip9 mov ax,oldcs9 mov ds,ax mov al,09h mov ah,25h int 21h ; retstart endp;-檢測并等
6、待鍵盤中斷kbget proc near push bx cli ;關中斷 mov bx,bufpt1 cmp bx,bufpt2 jnz kbget2 cmp kbflag,0 jnz kbget3 sti ;開中斷 pop bx jmp kbgetkbget2: mov al,buffer+bx inc bx cmp bx,16 jc kbget3 mov bx,0kbget3: mov bufpt1,bx pop bx retkbget endp;-鍵盤中斷程序kbint proc far push bx push ax ; in al,60h ;從PA口讀掃描碼 push ax in
7、al,61h ;從PB口讀信息 or al,80h out 61h,al ;置鍵盤應答位 and al,7fh out 61h,al ;復位鍵盤應答位 ; pop ax test al,80h ;檢測AL第8位是否為1,判斷鍵位是按下(1)還是放開 jnz kbint2 ; cmp al,2ah ;判斷是否為左Shift鍵 jnz shift5 cmp kbflag1,1 jz shift1 mov kbflag1,1 ;標志位置1 jmp shift1shift5: cmp al,36h ;判斷是否為右Shift鍵 jnz shift2 cmp kbflag1,1 jz shift1 mov
8、 kbflag1,1 jmp shift1shift2: cmp kbflag1,1 jnz shift3 lea bx,shiftab ;shifttab換碼 xlat ;(AL)-(BX)+(AL) jmp shift4shift3: lea bx,scantab ;santab換碼 xlat ;(AL)-(BX)+(AL)shift4: cmp al,0 ;判斷是否為其他控制符 jnz kbint4 mov kbflag,80h ;置退出標志 jmp kbint2kbint4: mov bx,bufpt2 mov buffer+bx,al inc bx cmp bx,16 jc kbin
9、t3 mov bx,0kbint3: cmp bx,bufpt1; empty? jz kbint2 mov bufpt2,bxkbint2: cmp al,0aah ;判斷左shift鍵是否松開 jnz shift6 mov kbflag1,0shift6: cmp al,0b6h ;判斷右shift鍵是否松開 jnz shift1 mov kbflag1,0shift1: cli ;關中斷 mov al,20h ;結束鍵盤中斷 out 20h,al pop ax pop bx sti ;開中斷 iretkbint endp;-BIOS調用,顯示字符dispchar proc near push bx mov bx,0 mov ah,0eh int 10h pop bx retdispchar endp;-code ends;* end start五、實驗總結 本次實驗涉及到了中斷,但實驗是在示例3.6的基礎上修改的,沒有自己編寫獨立的中斷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物化學(第4版)課件 第14章 酸堿平衡
- 志愿服務精神教育與實踐
- 少兒播音直播課件
- 健康素養(yǎng)監(jiān)測方案
- 健康小衛(wèi)士:趕走細菌我能行(中班)
- 頸椎與腦部健康課件
- 公積金常規(guī)業(yè)務操作指南
- 2025年四川省自貢市中考招生考試數(shù)學真題試卷(真題+答案)
- 護士健康科普比賽策劃與實施
- 預防疫情課件
- 2025年嘉興市恒光電力建設有限責任公司招聘筆試參考題庫附帶答案詳解
- 2025內蒙古鄂爾多斯農(nóng)商行烏海各機構員工社會招聘37人筆試歷年典型考題及考點剖析附帶答案詳解
- XX林場20XX年度森林質量精準提升項目實施方案(范文)
- 先天性甲狀腺功能減退癥診治指南(2025)解讀
- 雅思英文測試題及答案
- 肝癌中西醫(yī)治療
- 2025-2030付費自習室行業(yè)市場深度分析及競爭格局與投資價值研究報告
- 《自動化釀酒技術》課件
- 臨床成人患者經(jīng)膀胱腹內壓測量臨床實踐應用
- (二模)淮北市和淮南市2025屆高三第二次質量檢測英語試題(含答案詳解)
- 騰訊入職合同協(xié)議
評論
0/150
提交評論