彙編常用的INT 21H系統調用

系統功能調用——由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    


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章