匯編實(shí)驗(yàn) 擴(kuò)充鍵盤處理功能的程序_第1頁
匯編實(shí)驗(yàn) 擴(kuò)充鍵盤處理功能的程序_第2頁
匯編實(shí)驗(yàn) 擴(kuò)充鍵盤處理功能的程序_第3頁
匯編實(shí)驗(yàn) 擴(kuò)充鍵盤處理功能的程序_第4頁
匯編實(shí)驗(yàn) 擴(kuò)充鍵盤處理功能的程序_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)六 擴(kuò)充鍵盤處理功能的程序一、 實(shí)驗(yàn)的目的與要求(一)實(shí)驗(yàn)?zāi)康模赫莆罩袛嗟母拍钜约爸袛喾?wù)程序的編寫(二)實(shí)驗(yàn)要求:完成鍵盤處理基本功能的基礎(chǔ)上,增加left_shift 和 right_shift鍵的功能。要求實(shí)現(xiàn)左右SHIFT任何一個鍵處于按下狀態(tài)時輸入字符為鍵盤的上檔字符或大寫字母,否則輸出數(shù)字或小寫字母。二、實(shí)驗(yàn)正文 實(shí)驗(yàn)分析:本次實(shí)驗(yàn)要求在示例3.6的基礎(chǔ)上,添加功能,關(guān)于left_shift和right_shift可以通過它們各自的掃描碼進(jìn)行判斷,此外還應(yīng)該設(shè)置標(biāo)志變量便于程序的判斷,較示例的程序除了要添加判斷是否為shift鍵外,還應(yīng)該再設(shè)置一張shifttab轉(zhuǎn)換表,這樣當(dāng)

2、shift被按下時,應(yīng)由這樣轉(zhuǎn)換表進(jìn)行轉(zhuǎn)換,而其他情況下由,scantab轉(zhuǎn)換表轉(zhuǎn)換。在讀入信息時候需要在不同的端口讀入信息并判斷,通過檢測狀態(tài)和數(shù)據(jù)作出正確的操作。四、流程圖如下四、實(shí)驗(yàn)結(jié)果附錄:程序源代碼如下: ;*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調(diào)用,取中斷向量 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調(diào)用,設(shè)置中斷向量 int 21h pop ds ; in al,21h and al,0fdh ;設(shè)置中斷屏蔽字

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 ;關(guān)中斷 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 ;置鍵盤應(yīng)答位 and al,7fh out 61h,al ;復(fù)位鍵盤應(yīng)答位 ; 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 ;標(biāo)志位置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 ;置退出標(biāo)志 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 ;關(guān)中斷 mov al,20h ;結(jié)束鍵盤中斷 out 20h,al pop ax pop bx sti ;開中斷 iretkbint endp;-BIOS調(diào)用,顯示字符dispchar proc near push bx mov bx,0 mov ah,0eh int 10h pop bx retdispchar endp;-code ends;* end start五、實(shí)驗(yàn)總結(jié) 本次實(shí)驗(yàn)涉及到了中斷,但實(shí)驗(yàn)是在示例3.6的基礎(chǔ)上修改的,沒有自己編寫?yīng)毩⒌闹袛?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論