其次,匯編並不是那樣的難以理解。
比如會的人都知道 int21h 是輸出的意思。
首先確認壹下:匯編的核心是中斷,而不是那些 mov、add、sub之類的指令。
中斷相當於其他編程語言的函數,不過更底層壹點。
以下為所有中斷的中文含義:
00H —設置顯示器模式
01H —設置光標形狀
02H —設置光標位置
03H —讀取光標信息
04H —讀取光筆位置
05H —設置顯示頁
06H、07H —初始化或滾屏
08H —讀光標處的字符及其屬性
09H —在光標處按指定屬性顯示字符
0AH —在當前光標處顯示字符
0BH —設置調色板、背景色或邊框
0CH —寫圖形象素
0DH —讀圖形象素
0EH —在Teletype模式下顯示字符
0FH —讀取顯示器模式
10H —顏色
11H —字體
12H —顯示器的配置
13H —在Teletype模式下顯示字符串
1AH —讀取/設置顯示組合編碼
1BH —讀取功能/狀態信息
1CH —保存/恢復顯示器狀態
(1)、功能00H
功能描述:設置顯示器模式
入口參數:AH=00H
AL=顯示器模式,見下表所示
出口參數:無
可用的顯示模式如下所列:
00H:40×25 16色 文本
01H:40×25 16色 文本
02H:80×25 16色 文本
03H: 80×25 16色 文本
04H:320×200 4色
05H:320×200 4色
06H:640×200 2色
07H:80×25 2色 文本
08H:160×200 16色
09H:320×200 16色
0AH:640×200 4色
0BH:保留
0CH:保留
0DH:320×200 16色
0EH:640×200 16色
0FH:640×350 2(單色)
10H:640×350 4色
10H:640×350 16色
11H:640×480 2色
12H:640×480 16色
13H:640×480 256色
對於超級VGA顯示卡,我們可用AX=4F02H和下列BX的值來設置其顯示模式。
BX顯示模式屬性
100H:640×400 256色
101H:640×480 256色
102H:800×600 16色
103H:800×600 256色
104H:1024×768 16色
105H:1024×768 256色
106H:1280×1024 16色
107H:1280×1024 256色
108H:80×60 文本模式
109H:132×25 文本模式
10AH:132×43 文本模式
10BH:132×50 文本模式
10CH:132×60 文本模式
(2)、功能01H
功能描述:設置光標形狀
入口參數:AH=01H
CH低四位=光標的起始行
CL低四位=光標的終止行
出口參數:無
(3)、功能02H
功能描述:用文本坐標下設置光標位置
入口參數:AH=02H
BH=顯示頁碼
DH=行(Y坐標)
DL=列(X坐標)
出口參數:無
(4)、功能03H
功能描述:在文本坐標下,讀取光標各種信息
入口參數:AH=03H
BH=顯示頁碼
出口參數:CH=光標的起始行
CL=光標的終止行
DH=行(Y坐標)
DL=列(X坐標)
(5)、功能04H
功能描述:獲取當前狀態和光筆位置
入口參數:AH=04H
出口參數:AH=00h——光筆未按下/未觸發,01h——光筆已按下/已觸發
BX=象素列(圖形X坐標)
CH=象素行(圖形Y坐標,顯示模式:04H~06H)
CX=象素行(圖形Y坐標,顯示模式:0DH~10H)
DH=字符行(文本Y坐標)
DL=字符列(文本X坐標)
(6)、功能05H
功能描述:設置顯示頁,即選擇活動的顯示頁
入口參數:AH=05H
AL=顯示頁
對於CGA、EGA、MCGA和VGA,其顯示頁如下表所列: 模式頁數顯示器類型
00H、01H0~7CGA、EGA、MCGA、VGA
02H、03H0~3CGA
02H、03H0~7EGA、MCGA、VGA
07H0~7EGA、VGA
0DH0~7EGA、VGA
0EH0~3EGA、VGA
0FH0~1EGA、VGA
10H0~1EGA、VGA
對於PCjr:
AL=80H——讀取CRT/CPU頁寄存器
81H——設置CPU頁寄存器
82H——設置CRT頁寄存器
83H——設置CRT/CPU頁寄存器
BH=CRT頁(子功能號82H和83H)
BL=CPU頁(子功能號81H和83H)
出口參數:對於前者,無出口參數,但對PCjr在子功能80H~83H調用下,有:BH=CRT頁寄存器,BL=CPU頁寄存器
(7)、功能06H和07H
功能描述:初始化屏幕或滾屏
入口參數:AH=06H——向上滾屏,07H——向下滾屏
AL=滾動行數(0——清窗口)
BH=空白區域的缺省屬性
(CH、CL)=窗口的左上角位置(Y坐標,X坐標)
(DH、DL)=窗口的右下角位置(Y坐標,X坐標)
出口參數:無
(8)、功能08H
功能描述:讀光標處的字符及其屬性
入口參數:AH=08H
BH=顯示頁碼
出口參數:AH=屬性
AL=字符
(9)、功能09H
功能描述:在當前光標處按指定屬性顯示字符
入口參數:AH=09H
AL=字符
BH=顯示頁碼
BL=屬性(文本模式)或顏色(圖形模式)
CX=重復輸出字符的次數
出口參數:無
(10)、功能0AH
功能描述:在當前光標處按原有屬性顯示字符
入口參數:AH=0AH
AL=字符
BH=顯示頁碼
BL=顏色(圖形模式,僅適用於PCjr)
CX=重復輸出字符的次數
出口參數:無
(11)、功能0BH
功能描述:設置調色板、背景色或邊框
入口參數:AH=0BH
設置顏色:BH=00H,01=顏色
選擇調色板:BH=01H,BL=調色板(320×200、4種顏色的圖形模式)
出口參數:無
(12)、功能0CH
功能描述:寫圖形象素
入口參數:AH=0CH
AL=象素值
BH=頁碼
(CX、DX)=圖形坐標列(X)、行(Y)
出口參數:無
(13)、功能0DH
功能描述:讀圖形象素
入口參數:AH=0DH
BH=頁碼
(CX、DX)=圖形坐標列(X)、行(Y)
出口參數:AL=象素值
(14)、功能0EH
功能描述:在Teletype模式下顯示字符
入口參數:AH=0EH
AL=字符
BH=頁碼
BL=前景色(圖形模式)
出口參數:無
(15)、功能0FH
功能描述:讀取顯示器模式
入口參數:AH=0FH
出口參數:AH=屏幕字符的列數
AL=顯示模式(參見功能00H中的說明)
BH=頁碼
(16)、功能10H
功能描述:顏色中斷。
其子功能說明如下:
00H — 設置調色板寄存器
01H — 設置邊框顏色
02H — 設置調色板和邊框
03H — 觸發閃爍/亮顯位
07H — 讀取調色板寄存器
08H — 讀取邊框顏色
09H — 讀取調色板和邊框
10H — 設置顏色寄存器
12H — 設置顏色寄存器塊
13H — 設置顏色頁狀態
15H — 讀取顏色寄存器
17H — 讀取顏色寄存器塊
1AH — 讀取顏色頁狀態
1BH — 設置灰度值
(17)、功能11H
功能描述:字體中斷。
其子功能說明如下:
00H裝入用戶字體和可編程控制器
10H裝入用戶字體和可編程控制器
01H裝入8×14 ROM字體和可編程控制器
11H裝入8×14 ROM字體和可編程控制器
02H裝入8×8 ROM字體和可編程控制器
12H裝入8×8 ROM字體和可編程控制器
03H設置塊指示器
04H裝入8×16 ROM字體和可編程控制器
14H裝入8×16 ROM字體和可編程控制器
20H設置INT 1Fh字體指針
21H為用戶字體設置INT 43h
22H為8×14 ROM字體設置INT 43H
23H為8×8 ROM字體設置INT 43H
24H為8×16 ROM字體設置INT 43H
30H讀取字體信息
(18)、功能12H
功能描述:顯示器的配置中斷。
其子功能說明如下:
10H — 讀取配置信息
20H — 選擇屏幕打印
30H — 設置掃描行
31H — 允許/禁止裝入缺省調色板
32H — 允許/禁止顯示
33H — 允許/禁止灰度求和
34H — 允許/禁止光標模擬
35H — 切換活動顯示
36H — 允許/禁止屏幕刷新
(19)、功能13H
功能描述:在Teletype模式下顯示字符串
入口參數:AH=13H
BH=頁碼
BL=屬性(若AL=00H或01H)
CX=顯示字符串長度
(DH、DL)=坐標(行、列)
ES:BP=顯示字符串的地址 AL=顯示輸出方式
0——字符串中只含顯示字符,其顯示屬性在BL中。顯示後,光標位置不變
1——字符串中只含顯示字符,其顯示屬性在BL中。顯示後,光標位置改變
2——字符串中含顯示字符和顯示屬性。顯示後,光標位置不變
3——字符串中含顯示字符和顯示屬性。顯示後,光標位置改變
出口參數:無
(20)、功能1AH
功能描述:讀取/設置顯示組合編碼,僅PS/2有效,在此從略
(21)、功能1BH
功能描述:讀取功能/狀態信息,僅PS/2有效,在此從略
(22)、功能1CH
功能描述:保存/恢復顯示器狀態,僅PS/2有效,在此從略
===============================================================
2、直接磁盤服務(Direct Disk Service——INT 13H)
===============================================================
00H —磁盤系統復位
01H —讀取磁盤系統狀態
02H —讀扇區
03H —寫扇區
04H —檢驗扇區
05H —格式化磁道
06H —格式化壞磁道
07H —格式化驅動器
08H —讀取驅動器參數
09H —初始化硬盤參數
0AH —讀長扇區
0BH —寫長扇區
0CH —查尋
0DH —硬盤系統復位
0EH —讀扇區緩沖區
0FH —寫扇區緩沖區
10H —讀取驅動器狀態
11H —校準驅動器
12H —控制器RAM診斷
13H —控制器驅動診斷
14H —控制器內部診斷
15H —讀取磁盤類型
16H —讀取磁盤變化狀態
17H —設置磁盤類型
18H —設置格式化媒體類型
19H —磁頭保護
1AH —格式化ESDI驅動器
(1)、功能00H
功能描述:磁盤系統復位
入口參數:AH=00H
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(2)、功能01H
功能描述:讀取磁盤系統狀態
入口參數:AH=01H
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
出口參數:AH=00H,AL=狀態代碼,其定義如下:
00H — 無錯
01H — 非法命令
02H — 地址目標未發現
03H — 磁盤寫保護(軟盤)
04H — 扇區未發現
05H — 復位失敗(硬盤)
06H — 軟盤取出(軟盤)
07H — 錯誤的參數表(硬盤)
08H — DMA越界(軟盤)
09H — DMA超過64K界限
0AH — 錯誤的扇區標誌(硬盤)
0BH — 錯誤的磁道標誌(硬盤)
0CH — 介質類型未發現(軟盤)
0DH — 格式化時非法扇區號(硬盤)
0EH — 控制數據地址目標被發現(硬盤)
0FH — DMA仲裁越界(硬盤)
10H — 不正確的CRC或ECC編碼
11H — ECC校正數據錯(硬盤)
CRC:Cyclic Redundancy Check code
ECC:Error Checking & Correcting code
20H — 控制器失敗
40H — 查找失敗
80H — 磁盤超時(未響應)
AAH — 驅動器未準備好(硬盤)
BBH — 未定義的錯誤(硬盤)
CCH — 寫錯誤(硬盤)
E0H — 狀態寄存器錯(硬盤)
FFH — 檢測操作失敗(硬盤)
(3)、功能02H
功能描述:讀扇區
入口參數:AH=02H
AL=扇區數
CH=柱面
CL=扇區
DH=磁頭
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,AH=00H,AL=傳輸的扇區數,否則,AH=狀態代碼,參見功能號01H中的說明
(4)、功能03H
功能描述:寫扇區
入口參數:AH=03H
AL=扇區數
CH=柱面
CL=扇區
DH=磁頭
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,AH=00H,AL=傳輸的扇區數,否則,AH=狀態代碼,參見功能號01H中的說明
(5)、功能04H
功能描述:檢驗扇區
入口參數:AH=04H
AL=扇區數
CH=柱面
CL=扇區
DH=磁頭
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,AH=00H,AL=被檢驗的扇區數,否則,AH=狀態代碼,參見功能號01H中的說明
(6)、功能05H
功能描述:格式化磁道
入口參數:AH=05H
AL=交替(Interleave)
CH=柱面
DH=磁頭
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
ES:BX=地址域列表的地址
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(7)、功能06H
功能描述:格式化壞磁道
入口參數:AH=06H
AL=交替
CH=柱面
DH=磁頭
DL=80H~0FFH:硬盤
ES:BX=地址域列表的地址
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(8)、功能07H
功能描述:格式化驅動器
入口參數:AH=07H
AL=交替
CH=柱面
DL=80H~0FFH:硬盤
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(9)、功能08H
功能描述:讀取驅動器參數
入口參數:AH=08H
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
出口參數:CF=1——操作失敗,AH=狀態代碼,參見功能號01H中的說明,否則, BL=01H — 360K
=02H — 1.2M
=03H — 720K
=04H — 1.44M
CH=柱面數的低8位
CL的位7-6=柱面數的該2位
CL的位5-0=扇區數
DH=磁頭數
DL=驅動器數
ES:DI=磁盤驅動器參數表地址
(10)、功能09H
功能描述:初始化硬盤參數
入口參數:AH=09H
DL=80H~0FFH:硬盤(還有有關參數表問題,在此從略)
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(11)、功能0AH
功能描述:讀長扇區,每個扇區隨帶四個字節的ECC編碼
入口參數:AH=0AH
AL=扇區數
CH=柱面
CL=扇區
DH=磁頭
DL=80H~0FFH:硬盤
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,AH=00H,AL=傳輸的扇區數,否則,AH=狀態代碼,參見功能號01H中的說明
(12)、功能0BH
功能描述:寫長扇區,每個扇區隨帶四個字節的ECC編碼
入口參數:AH=0BH
AL=扇區數
CH=柱面
CL=扇區
DH=磁頭
DL=80H~0FFH:硬盤
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,AH=00H,AL=傳輸的扇區數,否則,AH=狀態代碼,參見功能號01H中的說明
(13)、功能0CH
功能描述:查尋
入口參數:AH=0CH
CH=柱面的低8位
CL(7-6位)=柱面的高2位
DH=磁頭
DL=80H~0FFH:硬盤
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(14)、功能0DH
功能描述:硬盤系統復位
入口參數:AH=0DH
DL=80H~0FFH:硬盤
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(15)、功能0EH
功能描述:讀扇區緩沖區
入口參數:AH=0EH
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,否則,AH=狀態代碼,參見功能號01H中的說明
(16)、功能0FH
功能描述:寫扇區緩沖區
入口參數:AH=0FH
ES:BX=緩沖區的地址
出口參數:CF=0——操作成功,否則,AH=狀態代碼,參見功能號01H中的說明
(17)、功能10H
功能描述:讀取驅動器狀態
入口參數:AH=10H
DL=80H~0FFH:硬盤
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(18)、功能11H
功能描述:校準驅動器
入口參數:AH=11H
DL=80H~0FFH:硬盤
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態代碼,參見功能號01H中的說明
(19)、功能12H
功能描述:控制器RAM診斷
入口參數:AH=12H
出口參數:CF=0——操作成功,否則,AH=狀態代碼,參見功能號01H中的說明
(20)、功能13H
功能描述:控制器驅動診斷
入口參數:AH=13H
出口參數:CF=0——操作成功,否則,AH=狀態代碼,參見功能號01H中的說明
(21)、功能14H
功能描述:控制器內部診斷
入口參數:AH=14H
出口參數:CF=0——操作成功,否則,AH=狀態代碼,參見功能號01H中的說明
(22)、功能15H
功能描述:讀取磁盤類型
入口參數:AH=15H
DL=驅動器,00H~7FH:軟盤;80H~0FFH:硬盤
出口參數:CF=1——操作失敗,AH=狀態代碼,參見功能號01H中的說明, 否則,AH=00H — 未安裝驅動器
=01H — 無改變線支持的軟盤驅動器
=02H — 帶有改變線支持的軟盤驅動器
=03H — 硬盤,CX:DX=512字節的扇區數
(23)、功能16H
功能描述:讀取磁盤變化狀態
入口參數:AH=16H
DL=00H~7FH:軟盤
出口參數:CF=0——磁盤未改變,AH=00H,否則,AH=06H,參見功能號01H中的說明
(24)、功能17H
功能描述:設置磁盤類型
入口參數:AH=17H
DL=00H~7FH:軟盤 AL=00H — 未用
=01H — 360K在360K驅動器中
=02H — 360K在1.2M驅動器中
=03H — 1.2M在1.2M驅動器中
=04H — 720K在720K驅動器中
出口參數:CF=0——操作成功,AH=00H,否則,AH=狀態編碼,參見功能號01H中的說明
(25)、功能18H
功能描述:設置格式化媒體類型
入口參數:AH=18H
CH=柱面數
CL=每磁道的扇區數
DL=00H~7FH:軟盤
出口參數:CF=0——操作成功,AH=00H,ES:DI=介質類型參數表地址,否則,AH=狀態編碼,參見功能號01H中的說明
(26)、功能19H
功能描述:磁頭保護,僅在PS/2中有效,在此從略
(27)、功能1AH
功能描述:格式化ESDI驅動器,僅在PS/2中有效,在此從略
===============================================================
3、串行口服務(Serial Port Service——INT 14H)
===============================================================
00H —初始化通信口
01H —向通信口輸出字符
02H —從通信口讀入字符
03H —讀取通信口狀態
04H —擴充初始化通信口
(1)、功能00H
功能描述:初始化通信口
入口參數:AH=00H
DX=初始化通信口號(0=COM1,1=COM2,……)
AL=初始化參數,參數的說明如下: 波特率奇偶位停止位字的位數
76543210
000 = 110X0 = None0 = 1 bit10 = 7 bits
001 = 15001 = Odd1 = 2 bits11 = 8 bits
010 = 30011 = Even
011 = 600
100 = 1200
101 = 2400
110 = 4800
111 = 9600
對於PS/2,可用INT 14H之功能04H和05H來初始化其通信速率大於9600。
出口參數:AH=通信口狀態,各狀態位為1時的含義如下: 位7—超時
位6—傳遞移位寄存器為空
位5—傳遞保持寄存器為空
位4—發現終止位3—發現幀錯誤
位2—發現奇偶錯
位1—發現越界錯
位0—接受數據準備好
AL=Modem狀態
位7—接受單線信號診斷
位6—環指示器
位5—數據發送準備好
位4—清除數據,再發送位3—改變在接受線上的信號診斷
位2—後邊界環指示器
位1—改變“數據準備好”狀態
位0—改變“清除—發送”狀態
(2)、功能01H
功能描述:向通信口輸出字符
入口參數:AH=01H
AL=字符
DX=初始化通信口號(0=COM1,1=COM2,……)
出口參數:AL的值不變
AH的位7=0——操作成功,通信口狀態,AH的位6~0是其狀態位
(3)、功能02H
功能描述:從通信口讀入字符
入口參數:AH=02H
DX=初始化通信口號(0=COM1,1=COM2,……)
出口參數:AL=接受的字符
AH的位7=0——操作成功,通信口狀態,AH的位6~0是其狀態位
(4)、功能03H
功能描述:讀取通信口狀態
入口參數:AH=03H
DX=初始化通信口號(0=COM1,1=COM2,……)
出口參數:AH=通信口狀態,AL=Modem狀態,參見功能號00H中的說明
(5)、功能04H
功能描述:擴充初始化通信口,僅在PS/2中有效,在此從略
剩余的中斷在基本都是外部接口,字數限制,不寫了。