用tc在dos下顯示高解析度的方法

2021-08-26 16:29:23 字數 2408 閱讀 8784

鍵盤是電腦最基本的輸入裝置,對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...