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