鍵盤是電腦最基本的輸入裝置,對101鍵盤上所有鍵直接管理,而且直接判斷所有鍵的狀態是按下還是釋放。此鍵盤程式適用於遊戲等即時性的鍵盤應用,如果用來管理打字等還應加上鍵盤緩衝區方面的管理。
/*儲存為keyboard.c*/
/*由define定義的,scan_開頭的是鍵盤掃瞄碼,可用kbkflag陣列判斷某個鍵的狀態具體的鍵盤掃瞄碼可參考其它書籍,key_開頭的是鍵盤返加的ascii碼,可用getkey()函式得到。 ,為了減少篇幅,只定義遊戲中用到的控制鍵及少數其它鍵。*/
#ifndef keyboard
#define scan_capslock 58
#define scan_leftshift 42
#define scan_rightshift 54
#define scan_shift (keyflag[scan_rightshift]||keyflag[scan_leftshift])
#define key_ctrlbreak 248
#define key_insert 236
#define key_capslock 230
#define key_f11 229
#define key_f12 228
#include
#include
static unsigned char asciinames=
; /*按下shift鍵返加陣列*/
static unsigned char shiftnames=
; /*特殊鍵返回陣列*/
static char specialnames=
; unsigned char lastascii;
unsigned char lastscan;
unsigned char keyflag[128];
/*鍵狀態陣列*/
static unsigned char capslock;
static unsigned char curkeycode,lastkeycode;
static void interrupt (*oldkeyinterrupt)(void);
/*清除所有鍵*/
void clearkeyboard()
/*新的int9h鍵盤硬中斷*/
static void interrupt newkeyboardinterrupt(void)
else /*則為按下狀態*/
if(scan_shift) /*shift鍵按下改變大小寫*/
else }
if(c)lastascii=c;
}specialflag=0;
} outportb(0x20,0x20); /*通知中斷管理器硬中斷結速*/
} /*初始化鍵盤並開始新的鍵盤管理*/
static void initkeyboard(void)
/*並閉鍵盤管理,程式結束必須先執行此函式*/
static void closekeyboard(void)
/*得到鍵盤掃瞄碼*/
unsigned char getscan(void)
/*獲得鍵盤返回碼*/
unsigned char getkey(void)
cpu在實方式下並沒有提供改變段描述符暫存器的界限值的操作指令。改變段描述符暫存器的內容只能在保護方式下進行。當設定控制暫存器cr0的pe位=1時,cpu進入保護方式;當設定控制暫存器cr0的pe位=0時,cpu返回實方式。
通過設定cr0改變工作方式時,段描述符暫存器的內容不發生變化。因此,在dos實方式下直接訪問4gb記憶體之前,讓cpu進入保護方式下,通過裝載具有4gb界限的段描述符到段描述符暫存器ds、es、fs和gs中去。然後返回到實方式下。
就可使諸如「movax,[ebx]」、 「movax,fs:[ebx]」指令的32位暫存器間接定址操作實現4gb記憶體的訪問。
由於這種程式設計方法產生的是基於實方式下的執行程式。因此,它不能在保護方式下和虛擬8086方式下執行,即,不能在windows中執行,也不能在dos系統中裝載擴充記憶體ems驅動程式(如emm386.exe)。
3.2程式設計方法
(1)程式設計環境
本文採用borlandc++3.1程式設計環境,在程式中使用內嵌彙編方法實現特定的操作,在options的 「compile」-「advancedcodegeneration」中選擇386指令集。由於整合開發環境下的內部編譯器不能識別內嵌的386彙編指令,要實現32位暫存器和32位位址操作彙編指令,可讓整合開發環境呼叫tasm.
exe進行編譯,即設定options中的 「compile」-「codegeneration」-「compileviaassemler」為on。這樣便可完整地運用386彙編指令,在以下程式設計示例中採用了這種編譯方法。
(2)基本操作函式
①開啟a20位址線
要訪問4gb記憶體,必須開啟a20位址線。
實驗報告 用Ethereal捕獲並分析TCP資料報
用ethereal捕獲並分析資料報 學院 計算機工程學院 專業 電腦科學與技術 姓名 張徽 學號 2008404010135 tcp報文格式分析 tcp提供一種面向連線的 全雙工的 可靠的位元組流服務。在乙個tcp連線中,僅有兩方進行彼此通訊。廣播和多播不能用於tcp。tcp的接收端必須丟棄重複的資...
DOS下對登錄檔的程式設計
有了以上這些知識,結合在 對登錄檔進行程式設計的 捷徑 裡講過的關於匯入或匯出的登錄檔檔案 reg 我們就可以在dos方式下對登錄檔進行程式設計了。我們還是以更改 txt 檔案的預設開啟方式 記事本 為 寫字板 為例。首先在ms dos提示符下匯出 hkey classes root txtfile...
用網線在電腦之間共享檔案
兩台win7系統的筆記本 一根網線 材料 雙絞線兩台win7系統的筆記本 步驟1 將兩台電腦用網線連線起來。步驟2 這時分別修改兩台電腦上的資料。單擊控制面板 網路共享中心 本地連線 屬性 internet 協議版本4,在彈出的對話窗中做如下修改 第一台筆記本作如下修改 選擇 使用下面的ip位址,i...