很多初學(xué)匯編語(yǔ)言的同學(xué)可能會(huì)對(duì)INT 21H這條指令感到困惑,不知道是什么意思,下面就以一段簡(jiǎn)單的程序?yàn)榇蠹抑v解:
例如:需要鍵盤輸入,并且回顯。
AH的值需要查表取得,表在下面
指令:MOV AH,01
INT 21H
通過這樣兩條指令,輸入的字符就會(huì)被存儲(chǔ)在AL中。
表:DOS系統(tǒng)功能調(diào)INT 21H
AH
功能
調(diào)用參數(shù)
返回參數(shù)
00
程序終止(同INT 20H)
CS=程序段前綴
01
鍵盤輸入并回顯
AL=輸入字符
02
顯示輸出
DL=輸出字符
03
異步通迅輸入
AL=輸入數(shù)據(jù)
04
異步通迅輸出
DL=輸出數(shù)據(jù)
05
打印機(jī)輸出
DL=輸出字符
06
直接控制臺(tái)I/O
DL=FF(輸入)
DL=字符(輸出)
AL=輸入字符
07
鍵盤輸入(無(wú)回顯)
AL=輸入字符
08
鍵盤輸入(無(wú)回顯)
檢測(cè)Ctrl-Break
AL=輸入字符
09
顯示字符串
DS:DX=串地址
'$'結(jié)束字符串
0A
鍵盤輸入到緩沖區(qū)
DS:DX=緩沖區(qū)首地址
(DS:DX)=緩沖區(qū)最大字符數(shù)
(DS:DX+1)=實(shí)際輸入的字符數(shù)
0B
檢驗(yàn)鍵盤狀態(tài)
AL=00 有輸入
AL=FF 無(wú)輸入
0C
清除輸入緩沖區(qū)并
請(qǐng)求指定的輸入功能
AL=輸入功能號(hào)
(1,6,7,8,A)
0D
磁盤復(fù)位
清除文件緩沖區(qū)
0E
指定當(dāng)前缺省的磁盤驅(qū)動(dòng)器
DL=驅(qū)動(dòng)器號(hào) 0=A,1=B,...
AL=驅(qū)動(dòng)器數(shù)
0F
打開文件
DS:DX=FCB首地址
AL=00 文件找到
AL=FF 文件未找到
10
關(guān)閉文件
DS:DX=FCB首地址
AL=00 目錄修改成功
AL=FF 目錄中未找到文件
11
查找第一個(gè)目錄項(xiàng)
DS:DX=FCB首地址
AL=00 找到
AL=FF 未找到
12
查找下一個(gè)目錄項(xiàng)
DS:DX=FCB首地址
(文件中帶有*或?)
AL=00 找到
AL=FF 未找到
13
刪除文件
DS:DX=FCB首地址
AL=00 刪除成功
AL=FF 未找到
14
順序讀
DS:DX=FCB首地址
AL=00 讀成功
=01 文件結(jié)束,記錄中無(wú)數(shù)據(jù)
=02 DTA空間不夠
=03 文件結(jié)束,記錄不完整
15
順序?qū)?/p>
DS:DX=FCB首地址
AL=00 寫成功
=01 盤滿
=02 DTA空間不夠
16
建文件
DS:DX=FCB首地址
AL=00 建立成功
=FF 無(wú)磁盤空間
17
文件改名
DS:DX=FCB首地址
(DS:DX+1)=舊文件名
(DS:DX+17)=新文件名
AL=00 成功
AL=FF 未成功
19
取當(dāng)前缺省磁盤驅(qū)動(dòng)器
AL=缺省的驅(qū)動(dòng)器號(hào) 0=A,1=B,2=C,...
1A
置DTA地址
DS:DX=DTA地址
1B
取缺省驅(qū)動(dòng)器FAT信息
AL=每簇的扇區(qū)數(shù)
DS:BX=FAT標(biāo)識(shí)字節(jié)
CX=物理扇區(qū)大小
DX=缺省驅(qū)動(dòng)器的簇?cái)?shù)
1C
取任一驅(qū)動(dòng)器FAT信息
DL=驅(qū)動(dòng)器號(hào)
同上
21
隨機(jī)讀
DS:DX=FCB首地址
AL=00 讀成功
=01 文件結(jié)束
=02 緩沖區(qū)溢出
=03 緩沖區(qū)不滿
22
隨機(jī)寫
DS:DX=FCB首地址
AL=00 寫成功
=01 盤滿
=02 緩沖區(qū)溢出
23
測(cè)定文件大小
DS:DX=FCB首地址
AL=00 成功(文件長(zhǎng)度填入FCB)
AL=FF 未找到
24
設(shè)置隨機(jī)記錄號(hào)
DS:DX=FCB首地址
25
設(shè)置中斷向量
DS:DX=中斷向量
AL=中斷類型號(hào)
26
建立程序段前綴
DX=新的程序段前綴
27
隨機(jī)分塊讀
DS:DX=FCB首地址
CX=記錄數(shù)
AL=00 讀成功
=01 文件結(jié)束
=02 緩沖區(qū)太小,傳輸結(jié)束
=03 緩沖區(qū)不滿
28
隨機(jī)分塊寫
DS:DX=FCB首地址
CX=記錄數(shù)
AL=00 寫成功
=01 盤滿
=02 緩沖區(qū)溢出
29
分析文件名
ES:DI=FCB首地址
DS:SI=ASCIIZ串
AL=控制分析標(biāo)志
AL=00 標(biāo)準(zhǔn)文件
=01 多義文件
=02 非法盤符
2A
取日期
CX=年
DH:DL=月:日(二進(jìn)制)
2B
設(shè)置日期
CX:DH:DL=年:月:日
AL=00 成功
=FF 無(wú)效
2C
取時(shí)間
CH:CL=時(shí):分
DH:DL=秒:1/100秒
2D
設(shè)置時(shí)間
CH:CL=時(shí):分
DH:DL=秒:1/100秒
AL=00 成功
=FF 無(wú)效
2E
置磁盤自動(dòng)讀寫標(biāo)志
AL=00 關(guān)閉標(biāo)志
AL=01 打開標(biāo)志
2F
取磁盤緩沖區(qū)的首址
ES:BX=緩沖區(qū)首址
30
取DOS版本號(hào)
AH=發(fā)行號(hào),AL=版本
31
結(jié)束并駐留
AL=返回碼
DX=駐留區(qū)大小
33
Ctrl-Break檢測(cè)
AL=00 取狀態(tài)
=01 置狀態(tài)(DL)
DL=00 關(guān)閉檢測(cè)
=01 打開檢測(cè)
DL=00 關(guān)閉Ctrl-Break檢測(cè)
=01 打開Ctrl-Break檢測(cè)
35
取中斷向量
AL=中斷類型
ES:BX=中斷向量
36
取空閑磁盤空間
DL=驅(qū)動(dòng)器號(hào)
0=缺省,1=A,2=B,...
成功:AX=每簇扇區(qū)數(shù)
BX=有效簇?cái)?shù)
CX=每扇區(qū)字節(jié)數(shù)
DX=總簇?cái)?shù)
失敗:AX=FFFF
38
置/取國(guó)家信息
DS:DX=信息區(qū)首地址
BX=國(guó)家碼(國(guó)際電話前綴碼)
AX=錯(cuò)誤碼
39
建立子目錄(MKDIR)
DS:DX=ASCIIZ串地址
AX=錯(cuò)誤碼
3A
刪除子目錄(RMDIR)
DS:DX=ASCIIZ串地址
AX=錯(cuò)誤碼
3B
改變當(dāng)前目錄(CHDIR)
DS:DX=ASCIIZ串地址
AX=錯(cuò)誤碼
3C
建立文件
DS:DX=ASCIIZ串地址
CX=文件屬性
成功:AX=文件代號(hào)
錯(cuò)誤:AX=錯(cuò)誤碼
3D
打開文件
DS:DX=ASCIIZ串地址
AL=0 讀
=1 寫
=3 讀/寫
成功:AX=文件代號(hào)
錯(cuò)誤:AX=錯(cuò)誤碼
3E
關(guān)閉文件
BX=文件代號(hào)
失敗:AX=錯(cuò)誤碼
3F
讀文件或設(shè)備
DS:DX=數(shù)據(jù)緩沖區(qū)地址
BX=文件代號(hào)
CX=讀取的字節(jié)數(shù)
讀成功:
AX=實(shí)際讀入的字節(jié)數(shù)
AX=0 已到文件尾
讀出錯(cuò):AX=錯(cuò)誤碼
40
寫文件或設(shè)備
DS:DX=數(shù)據(jù)緩沖區(qū)地址
BX=文件代號(hào)
CX=寫入的字節(jié)數(shù)
寫成功:
AX=實(shí)際寫入的字節(jié)數(shù)
寫出錯(cuò):AX=錯(cuò)誤碼
41
刪除文件
DS:DX=ASCIIZ串地址
成功:AX=00
出錯(cuò):AX=錯(cuò)誤碼(2,5)
42
移動(dòng)文件指針
BX=文件代號(hào)
CX:DX=位移量
AL=移動(dòng)方式(0:從文件頭絕對(duì)位移,1:從當(dāng)前位置相對(duì)移動(dòng),2:從文件尾絕對(duì)位移)
成功:DX:AX=新文件指針位置
出錯(cuò):AX=錯(cuò)誤碼
43
置/取文件屬性
DS:DX=ASCIIZ串地址
AL=0 取文件屬性
AL=1 置文件屬性
CX=文件屬性
成功:CX=文件屬性
失敗:CX=錯(cuò)誤碼
44
設(shè)備文件I/O控制
BX=文件代號(hào)
AL=0 取狀態(tài)
=1 置狀態(tài)DX
=2 讀數(shù)據(jù)
=3 寫數(shù)據(jù)
=6 取輸入狀態(tài)
=7 取輸出狀態(tài)
DX=設(shè)備信息
45
復(fù)制文件代號(hào)
BX=文件代號(hào)1
成功:AX=文件代號(hào)2
失敗:AX=錯(cuò)誤碼
46
人工復(fù)制文件代號(hào)
BX=文件代號(hào)1
CX=文件代號(hào)2
失敗:AX=錯(cuò)誤碼
47
取當(dāng)前目錄路徑名
DL=驅(qū)動(dòng)器號(hào)
DS:SI=ASCIIZ串地址
(DS:SI)=ASCIIZ串
失敗:AX=出錯(cuò)碼
48
分配內(nèi)存空間
BX=申請(qǐng)內(nèi)存容量
成功:AX=分配內(nèi)存首地
失敗:BX=最大可用內(nèi)存
49
釋放內(nèi)容空間
ES=內(nèi)存起始段地址
失敗:AX=錯(cuò)誤碼
4A
調(diào)整已分配的存儲(chǔ)塊
ES=原內(nèi)存起始地址
BX=再申請(qǐng)的容量
失敗:BX=最大可用空間
AX=錯(cuò)誤碼
4B
裝配/執(zhí)行程序
DS:DX=ASCIIZ串地址
ES:BX=參數(shù)區(qū)首地址
AL=0 裝入執(zhí)行
AL=3 裝入不執(zhí)行
失敗:AX=錯(cuò)誤碼
4C
帶返回碼結(jié)束
AL=返回碼
4D
取返回代碼
AX=返回代碼
4E
查找第一個(gè)匹配文件
DS:DX=ASCIIZ串地址
CX=屬性
AX=出錯(cuò)代碼(02,18)
4F
查找下一個(gè)匹配文件
DS:DX=ASCIIZ串地址
(文件名中帶有?或*)
AX=出錯(cuò)代碼(18)
54
取盤自動(dòng)讀寫標(biāo)志
AL=當(dāng)前標(biāo)志值
56
文件改名
DS:DX=ASCIIZ串(舊)
ES:DI=ASCIIZ串(新)
AX=出錯(cuò)碼(03,05,17)
57
置/取文件日期和時(shí)間
BX=文件代號(hào)
AL=0 讀取
AL=1 設(shè)置(DX:CX)
DX:CX=日期和時(shí)間
失敗:AX=錯(cuò)誤碼
58
取/置分配策略碼
AL=0 取碼
AL=1 置碼(BX)
成功:AX=策略碼
失敗:AX=錯(cuò)誤碼
59
取擴(kuò)充錯(cuò)誤碼
AX=擴(kuò)充錯(cuò)誤碼
BH=錯(cuò)誤類型
BL=建議的操作
CH=錯(cuò)誤場(chǎng)所
5A
建立臨時(shí)文件
CX=文件屬性
DS:DX=ASCIIZ串地址
成功:AX=文件代號(hào)
失敗:AX=錯(cuò)誤碼
5B
建立新文件
CX=文件屬性
DS:DX=ASCIIZ串地址
成功:AX=文件代號(hào)
失敗:AX=錯(cuò)誤碼
5C
控制文件存取
AL=00封鎖
=01開啟
BX=文件代號(hào)
CX:DX=文件位移
SI:DI=文件長(zhǎng)度
失敗:AX=錯(cuò)誤碼
62
取程序段前綴
BX=PSP地址