匯編實驗 擴充鍵盤處理功能的程序_第1頁
匯編實驗 擴充鍵盤處理功能的程序_第2頁
匯編實驗 擴充鍵盤處理功能的程序_第3頁
匯編實驗 擴充鍵盤處理功能的程序_第4頁
匯編實驗 擴充鍵盤處理功能的程序_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論