BIOS INT 10中斷功能
INT 10H 是由 BIOS 對螢幕及顯示器所提供的服務程式,而後倚天公司針對倚天中文提供了許多服務程式,這些服務程式也加掛在 INT 10H 內。使用 INT 10H 中斷服務程式時,先指定 AH 暫存器為下表編號其中之一,該編號表示欲呼叫的功用,而其他暫存器的詳細說明,參考表後文字,當一切設定好之後再呼叫 INT 10H。底下是它們的說明:
AH | 功 能 | 呼叫引數 | 返回引數 / 註釋 |
1 | 置游標型別 | (CH)0―3 = 游標開始行 (CL)0―3 = 游標結束行 | |
2 | 置游標位置 | BH = 頁號 DH = 行 DL = 列 | |
3 | 讀游標位置 | BH = 頁號 | CH = 游標開始行 CL = 游標結束行 DH = 行 DL = 列 |
4 | 置顯示頁 | AL = 顯示頁號 | |
5 | 螢幕初始化或上卷 | ||
6 | 螢幕初始化或上卷 | AL = 上卷行數 AL =0全螢幕為空白 BH = 捲入行屬性 CH = 左上角行號 CL = 左上角列號 DH = 右下角行號 DL = 右下角列號 | |
7 | 螢幕初始化或下卷 | AL = 下卷行數 AL = 0全螢幕為空白 BH = 捲入行屬性 CH = 左上角行號 CL = 左上角列號 DH = 右下角行號 DL = 右下角列號 | |
8 | 讀游標位置的屬性和字元 | BH = 顯示頁 | AH = 屬性 AL = 字元 |
9 | 在游標位置顯示字元及其屬性 | BH = 顯示頁 AL = 字元 BL = 屬性 CX = 字元重複次數 | |
A | 在游標位置只顯示字元 | BH = 顯示頁 AL = 字元 CX = 字元重複次數 | |
E | 顯示字元(游標前移) | AL = 字元 BL = 前景色 | 游標跟隨字元移動 |
13 | 顯示字串 | ES:BP = 串地址 CX = 串長度 DH, DL = 起始行列 BH = 頁號 AL = 0,BL = 屬性 串:Char,char,……,char AL = 1,BL = 屬性 串:Char,char,……,char AL = 2 串:Char,attr,……,char,attr AL = 3 串:Char,attr,……,char,attr |
|
AH=00H
AH=00/INT 10H 是用來設定顯示模式的服務程式,AL 暫存器表示欲設定的模式:
AL | 文字/圖形 | 解析度 | 顏色 |
00 | 文字 | 40*25 | 2 |
01 | 文字 | 40*25 | 16 |
02 | 文字 | 80*25 | 2 |
03 | 文字 | 80*25 | 16 |
04 | 圖形 | 320*200 | 2 |
05 | 圖形 | 320*200 | 4 |
06 | 圖形 | 640*200 | 2 |
AH=01H
您可以把游標想成一個小的矩形,平時這個矩形扁平位於某字底部,但藉由此功能可以改變其大小與位置。游標起始處與終止處分別由 CL 與 CH 的 0 到 4 位表示,參考下圖:
而 CH 的第 7 位必須是 0,第 5、6 位表示游標屬性:
位 6 位 5 屬性 0 0 正常 0 1 隱形 1 0 1 1 閃爍緩慢
AH=02H
此功能是設定游標位置,位置用 DH、DL 表示,DH 表示列號,DL 表示行號。由左至右稱之為『列』,螢幕最上面一列為第零列,緊靠第零列的下一列稱為第一列……;由上而下稱之為『行』,螢幕最左邊一行稱之為第零行,緊靠第零行右邊的一行為第一行。故最左邊,最上面的位置為 DH=0 且 DL=0;最左邊第二列,DH=1,DL=0。如果是文字模式時,BH 為欲改變游標位置的顯示頁,如果是圖形模式,BH 要設為 0。
以行列來說明 DH、DL 之意義,小木偶常常搞混,底下以座標方式解釋。在文字模式下,字元的位置類似數學直角座標系的座標,但是 Y 軸方向相反,Y 軸是以螢幕最上面為零,越下面越大,直到 24 為止,存於 DH 內。X 軸和直角座標系相同,越右邊越大,存於 DL 內,其最大值視顯示模式而變。
AH=03H
AH=03H/INT 10H 這個中斷服務程式返回時,會在 DX 裡面有游標的行列位置,CX 內有游標的大小,DX、CX 之數值所代表的意義和 AH=02H/INT 10H、AH=01H/INT 10H 相同。
AH=04H
此功能是探測光筆之位置,似乎只有 CGA 卡有接上光筆??
AH=05H
這個功能是把指定的顯示頁顯示於螢幕上,欲顯示的顯示頁於 AL 暫存器中指定。此功能只能在文字模式下才能發生作用。
AH=06H/07H
這個服務程式的功用是把某一個設定好的矩形區域內的文字向上或向下移動。先說明向上移動,即呼叫 AH=06H/INT 10H。當此服務程式工作時,會使矩形區域的文字向上移動,而矩形區域底端移進空格列。向上移動的列數存入 AL 中 ( 如果 AL 為零,表示使矩形區域的所有列均向上移 ),底端移入空格列的屬性存於 BH,矩形區域是藉由 CX、DX 來設定左上角與右上角的座標,左上角的行與列分別由 CL、CH 設定,右下角的行與列由 DL、DH 設定。
AH=07H/INT 10H 和 AH=06H/INT 10H 相似,只是捲動方像不同而已。
AH=08H
這個服務程式是用來取得游標所在位置的字元及屬性,呼叫前,BH 表示欲讀取之顯示頁,返回時,AL 為該位置之 ASCII 字元,AH 為其屬性。有關屬性的說明,請參考注一。
AH=09H
這個功能是在游標位置顯示字元,所要顯示字元的 ASCII 碼存於 AL 暫存器,字元重複次數存於 CX 暫存器,顯示頁存於 BH 暫存器,屬性存於 BL 暫存器,其屬性使用與 AH=08/INT 10H 一樣。
AH=0AH
這個功能和 AH=09H/INT 10H 一樣,差別在 AH=0AH 只能寫入一個字元,而且不能改變字元屬性。
AH=0BH
這個服務程式是選擇調色盤。顯示模式 5 是 320*200 的圖形模式,最多可以顯示 4 種顏色,這四種顏色的意思是最多可以『同時』顯示一種背景色及三種前景色,而這三種前景色有兩種方式可供選擇,因此事實上,在顯示模式 5 有兩種調色盤可供選擇。就好像您去買 12 種顏色的水彩,但可在調色盤上以任意比例搭配出許多種顏色。
調色盤 0 的三色是綠、紅、黃;調色盤 1 的三色是青、紫紅、白。背景色有 16 六種可供選擇,這 16 種就是注一的 16 色。呼叫此中斷時,先決定要設定背景色抑或調色盤,
- 要設定背景色時,則使 BH 為 0,再使 BL 之數值為 0 到 0fh 之間表示注一的 16 色之一。
- 要設定調色盤時,則使 BH 為 1。再設定 BL 為零或一表示選擇那一種調色盤。
背景色只有在前景色為 0 時才會顯現出來。
AH=0CH
AH=0Ch/INT 10H 是在繪圖模式中顯示一點 ( 也就是寫入點像,write graphics pixel ),而 AH=0DH/INT 10H 則是讀取點像 ( read graphics pixel )。
寫入時,要寫入位置 X 座標存於 CX 暫存器,Y 座標存於 DX 暫存器,顏色存於 AL 暫存器。和文字模式相同,螢光幕上的 Y 座標是最上面一列為零,越下面越大,X 座標則和數學的定義相同。CX、DX、AL 值之範圍與顯示模式有關:
顯示模式 | X 座標 | Y 座標 | 顏色 |
4 | 0~319 | 0~199 | 0、1 |
5 | 0~319 | 0~199 | 0~3 |
6 | 0~639 | 0~199 | 0、1 |
AH=0DH/INT 10H 則是讀取某一位置之點像,您必須指定 CX、DX,而 INT 10H 會傳回該位置點像之顏色。
AH=0EH
這個子程式是使顯示器像打字機一樣的顯示字元來,在前面用 AH=09H/INT 10H 和 AH=0AH/INT 10H 都可以在螢光幕上顯示字元,但是這兩奘方式顯示字元之後,游標位置並不移動,而 AH=0EH/INT 10H 則會使游標位置移動,每顯示一個字元,游標會往右移一格,假如已經到最右邊了,則游標會移到最左邊並移到下一列,假如已經移到最下面一列的最右邊,則螢幕會向上捲動。
AL 暫存器存要顯示的字元,BH 為目前的顯示頁,如果是在圖形模式,則 BH 須設為 0,假如是在圖形模式下,也可以設定 BL 來表示文字的顏色,文字模式下的 BL 則無功能。
AH=0FH
這個服務程式是得到目前的顯示模式,呼叫前只需使 AH 設為 0fh,當由 INT 10H 返回時,顯示模式存於 AL 暫存器 ( 參考 AH=00H/INT 10H 的顯示模式表 ),目前的顯示頁存於 BH 暫存器,總字元行數存於 AH 暫存器。
注一: 所謂屬性是指字元的顏色、背景顏色、是否閃爍、有沒有底線等性質。在彩色顯示卡 ( CGA/EGA/VGA 等 ) 的文字模式中,顏色是用 4 個位表示,故可以表現出 16 種顏色,如下表:
二進位制數 | 顏色 | 例子 | 二進位制數 | 顏色 | 例子 |
0000 | 黑色 | black | 1000 | 灰色 | gray |
0001 | 藍色 | blue | 1001 | 淡藍色 | light blue |
0010 | 綠色 | green | 1010 | 淡綠色 | light green |
0011 | 青色 | cyan | 1000 | 淡青色 | light cyan |
0100 | 紅色 | red | 1100 | 淡紅色 | light red |
0101 | 紫紅色 | magenta | 1101 | 淡紫紅色 | light magenta |
0110 | 棕色 | brown | 1110 | 黃色 | yellow |
0111 | 銀色 | light gray | 1111 | 白色 | white |
在彩色顯示器裡,如 CGA、EGA、VGA 等,常用一個位元組 ( 8 個位 ) 來表示文字顏色和背景顏色,通常以第 0~3 位表示文字本身顏色;第 4~6 位表示背景顏色,背景顏色只有上表左欄的 8 種而已;第 7 個位,表示是否閃爍,0 表示不閃爍,1 表示閃爍。
但是在單色顯示器裡,如 MDA 和 Hercules 卡中,這些顏色表並無意義,所以屬性解釋方式不同,請看下錶:
數值 | 屬性 |
00H | 空格,不顯示任何資料 |
77H | 顯示白色方塊 |
07H | 正常的黑底白字 |
70H | 反白的白底黑字 |
01H | 加底線 |
AH=0x13
- 描述:
- 以電傳打字機的方式顯示字串
- 接受引數:
- AH 0x13
- AL 顯示模式
- BH 視訊頁
- BL 屬性值(如果AL=0x00或0x01)
- CX 字串的長度
- DH,DL 螢幕上顯示起始位置的行、列值
- ES:BP 字串的段:偏移地址
- 返回值:
- 無
- 顯示模式(AL):
- 0x00:字串只包含字元碼,顯示之後不更新游標位置,屬性值在BL中
- 0x01:字串只包含字元碼,顯示之後更新游標位置,屬性值在BL中
- 0x02:字串包含字元碼及屬性值,顯示之後不更新游標位置
- 0x03:字串包含字元碼及屬性值,顯示之後更新游標位置
相關文章
- 0166-BIOS 中斷iOS
- BIOS系統服務 —— 直接磁碟服務(int 0x13)iOS
- 判斷a是否是int型別資料型別
- 02-使用BIOS中斷 顯示字元/讀取磁碟 【實現boot中載入loader的功能】iOS字元boot
- 電腦上bios是什麼意思 bios功能對電腦有什麼影響iOS
- int[] 、 list<int> 、 list<int>[] 的區別
- C語言之int *f()、int(*f)()、int *a[]、int (*a)[] 區別小記C語言
- fiddler斷點功能斷點
- 素數判定(int sushu(int n))
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- Int -> List | List -> Int _ CodingPark程式設計公園程式設計
- TKMySQL中int?(10)?和?int?(11)?的區別zceMySql
- #define int Modint<11>
- Spring Cloud Gateway的斷路器(CircuitBreaker)功能SpringCloudGatewayUI
- mysql int(3)與int(10)的數值範圍相同嗎?MySql
- MySQL 中 int (10) 和 int (11) 到底有什麼區別?MySql
- 翻轉int陣列陣列
- char轉換成int
- python ascii int互換PythonASCII
- INT型別知多少型別
- 巧用python“int”函式Python函式
- C# modbus RTU 中使用到的 ushort[] 轉 int 與 int 轉 ushort[]C#
- Activity 中的方法 findViewById(int) 和 AppCompatActivity 中的方法 findViewById(int) 都匹配...ViewAPP
- win10 進入bios介面方法 win10 怎麼進入biosWin10iOS
- 函式void fun(int x,int k,int *p)的功能是:求出比x大的最初k(k<1000)個素數,放入p所指陣列中。例如:程式執行時輸入:10 10,輸出:11 13 17 19 23函式陣列
- BIOS相關定時器iOS定時器
- 伺服器bios 燒壞伺服器iOS
- BIOS實戰之Memory配置iOS
- 智慧斷路器安全用電都有什麼功能
- 光模組數字診斷(DDM)功能介紹
- Linux如何實現斷點續傳檔案功能?Linux斷點
- int/double資料範圍
- int存放到void指標指標
- C++中vector<int>& numsC++
- python的int怎麼用Python
- Integer轉int出現NullPointExceptionNullException
- int與Integer的區別
- Go 語言 big.IntGo