系統功能調用——由DOS提供的一組實現特殊功能的子程序供程序員在編寫自己的程序時調用,以減輕編程的工作量。
分兩種,DOS系統功能調用和BIOS終端調用。
彙編語言中DOS系統功能調用有很多,涉及屏幕顯示、文件管理、I/O管理等等,每個子程序都有一個功能號,所有的功能調用的格式都是一致的。調用的步驟大致如下:
(1)系統功能號送到寄存器AH中;
(2)入口參數送到指定的寄存器中;
(3)用INT 21H指令執行功能調用;
(4)根據出口參數分析功能調用執行情況。
下面歸納5個在彙編中常用的INT 21H系統功能調用。
AH | 功能 | 入口參數 | 出口參數 |
4CH | 返回DOS | 無 | 無 |
1 | 鍵盤輸入一個字符到AL中 | 無 | AL=字符 |
2 | 輸出DL寄存器的字符到顯示器 | DL(存放一個字符) | 無 |
9 | 輸出一個以“$”結尾的字符串到顯示器 |
DS:字符串所在的段地址 DX:字符串首地址 |
無 |
0AH | 從鍵盤輸入一個字符串到指定緩衝區 |
DS:緩衝區所在的段地址 DX:緩衝區首地址 |
緩衝區相應位置 |
下面分別詳細分析5種功能調用:
1、帶返回碼的結束(AH=4CH)
功能:返回DOS
入口參數:無
調用方法
MOV AH,4CH
INT 21H
通過4CH功能調用能夠結束當前正在執行的程序,返回DOS系統,一般用於彙編程序的結束位置。
2、鍵盤輸入一個字符(AH=1)
功能:從鍵盤輸入一個字符到AL中,AL中爲該字符的ASCII碼。
入口參數:無
調用方法
MOV AH,1
INT 21H
執行完上面的系統調用後,出現提示輸入光標,從鍵盤輸入一個字符並保存其ASIIC碼到AL寄存器中。
<例子>:交互式程序中用戶按下數字鍵1,2,3,程序轉入相應的服務子程序,若按下其他鍵則會繼續等待。
代碼:
KEY: MOV AH,1
INT 21H ;系統等待輸入一個字符
CMP AL,'1'
JE ONE ;如果輸入字符爲1則跳到標識符ONE處執行
CMP AL,'2'
JE TWO ;如上解析
CMP AL,'3'
JE THREE
JMP KEY ;如果不是1、2、3則繼續輸入字符
ONE: ......
TWO: ......
THREE: ......
3、輸出顯示一個字符(AH=2)
功能:輸出DL寄存器中的字符到顯示器。
入口參數:被輸出顯示的字符或者字符ASCII碼送到DL寄存器中
調用方法
MOV DL,字符碼
MOV AH,2
INT 21H
執行完上面的調用後,顯示器顯示出DL中的字符。
<例如>:
MOV DL,'6' (也可以寫成6的ASCII碼36H,既:MOV DL,36H)
MOV AH,2
INT 21H
調用結果在屏幕上光標位置處顯示6。
4、輸出一個字符串(AH=9)
功能:輸出顯示一個以"$"字符結尾的字符串到顯示器。
入口參數:DX=字符串偏移地址;DS=字符串的段地址
調用方法
MOV AX,字符串所在的段地址
MOV DS,AX
MOV DX,字符串的首址偏移地址
MOV AH,9
INT 21H
執行上面調用,輸出以DS:DX爲首地址,"$"爲結尾的字符串到顯示器中。若要在顯示字符串光標自動回車換行,則在"$"字符前面加上0DH(回車),0AH(換行)字符。
<例子>:在屏幕上顯示“HOW DO YOU DO?”字符串。並且光標回車換行。
代碼:
DATA SEGMENT
STR1 DB 'HOW DU YOU DO?',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR1;字符串首偏移地址放到DX中
MOV AH,9
NT 21H;輸出字符串
MOV AH,4CH
INT 21H
CODE ENDS
END START
5、從鍵盤輸入一個字符串到緩衝區(AH=0AH)
功能:從鍵盤輸入一串ASCII碼字符到緩衝區,輸入結束爲緩衝區的個數或者“回車”字符。
入口參數:DX=緩衝區首偏移地址;DS=緩衝區段地址
調用方法
MOV AX,緩衝區的首址的段地址
MOV DS,AX
MOV DX,緩衝區的首址的偏移地址
MOV AH,0AH
INT 21H
執行完上面調用,將從鍵盤接受字符串送到內存的輸入緩衝區(由DS:DX指定緩衝區),要求預先定義一個緩衝區,緩衝區的第一個字節指定容納的最大字符個數,由用戶給出;第二個字節存放實際的最大字符個數,由系統最後添入;從第三個字節開始存放從鍵盤接受的字符,直到ENTER鍵結束。
<例子>:
DATA SEGMENT
BUF DB 20, ;存放最大字符個數20個
DB ?, ;存放實際輸入字符個數
DB 20 DUP(?) ;存放輸入字符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA ;緩衝區所在段基址
MOV DS,AX
LEA DX,BUF ;緩衝區首址偏移地址
MOV AH,0AH
INT 21H
MOV AH 4CH
INT 21H
CODE ENDS
END START