1. 程式人生 > >匯編 DOS的中斷調用 INT 21H

匯編 DOS的中斷調用 INT 21H

首地址 font 特殊 frame split 標識符 交互 .html str1

DOS系統功能調用

這個匯編指令是用於提供DOS系統功能調用。

它是由DOS提供的一組實現特殊功能的子程序供程序猿在編寫自己的程序時調用,以減輕編程的工作量。


分兩種,

re=view">DOS系統功能調用和BIOS中斷調用。


鏈接裏都是一些經常使用的內容,大家能夠自己去百度,一定比我這裏給出的全面非常多,有那種DOS系統功能調用表。

調用步驟大致

  • (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:緩沖區首地址 緩沖區對應位置

實例

帶返回碼的結束(AH=4CH)

功能:返回DOS
入口參數:無
調用方法

       MOV
AH,4CH INT 21H

通過4CH功能調用能夠結束當前正在運行的程序,返回DOS系統,一般用於匯編程序的結束位置。

鍵盤輸入一個字符(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 ;假設不是123則繼續輸入字符 ONE: ...... TWO: ...... THREE: ......

輸出顯示一個字符(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。

輸出一個字符串(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

從鍵盤輸入一個字符串到緩沖區(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

匯編 DOS的中斷調用 INT 21H