1. 程式人生 > >IN 21H 呼叫 DOS 功能

IN 21H 呼叫 DOS 功能

IN 21H 呼叫 DOS 功能

DOS (Disk Operation System)和 BIOS(Basic Input and Output System)是為使用者提供的兩組系統服務程式

  • BIOS 是 IBM PC/XT 的基本 I/O 系統,負責管理系統的測試程式、初始化載入程式、一部分中斷向量裝入程式以及外部裝置的服務程式,使用者可以直接呼叫

  • DOS 是 IBM PC/XT 的作業系統,負責管理系統的所以資源,協調微機的操作,其中包括大量的可供呼叫的服務子程式,完成裝置的管理和磁碟檔案的管理

  • 使用者控制 PC 機硬體的方法: 高階語言–>呼叫 DOS 程式 --> 使用 BIOS 程式 --> 直接訪問硬體

  • DOS 功能/ BIOS 功能呼叫是呼叫系統核心子程式

  • DOS 功能與BIOS 功能均通過 中斷方式呼叫

  • DOS 為程式設計者提供了許多可直接呼叫的功能子程式,這些功能子程式的主要功能是: (1)磁碟的讀寫、控制 (2)記憶體管理、檔案操作、目錄操作 (2)基本輸入輸出管理(如鍵盤、印表機、顯示器、磁帶等管理),另外還有時間、日期等子程式

  1. 呼叫方法 為了使用方便,所有子程式已按序編號–功能號,從 00H ~ 68H,呼叫方法: (1)入口引數送指定暫存器 (2)功能號送 AH (3)INT 21H 有的子程式不要入口引數,但大部分需要將引數送人指定地點

  2. 基本功能呼叫

功能號 作用
1 鍵盤輸入
5 列印輸出
6 直接控制檯輸入/輸出
9 輸出字串
0AH 字串輸入
2B 日期設定

(1)鍵盤輸入 (1 號呼叫) 功能:等待從標準輸入裝置輸入一個字元並送人暫存器 AL,不需要入口引數 例如: MOV AH , 1 INT 21H 執行上述指令,系統將掃描鍵盤,等待有鍵按下,一旦有鍵按下,就將鍵值(相應字元的 ASCII 碼值)讀入,先檢查是否是 Ctrl-Break ,若是,則退出命令執行;否則將鍵值送人 AL 暫存器,同時將這個字元顯示在螢幕上

(2)列印輸出(5 號呼叫) 功能:把 DL 中的字元輸出到印表機上 例如: MOV DL, ‘A’ MOV AH, 5 INT 21H

(3)直接控制檯輸入/輸出(6 號呼叫) 功能:可以從標註輸入裝置輸入字元,也可以向螢幕輸出字元。但不檢查 Ctrl-Break 例如: 當 DL = FFH 時,表示從鍵盤輸入,

  • 若標誌 ZF = 0 ,表示 AL中為鍵入的字元值
  • 若標誌 ZF = 0 ,表示 AL 中不是鍵入的字元值,即尚無鍵按下 當 DL != FFH 時,表示向螢幕輸出,DL 中為輸出字元的 ASCII 碼, MOV DL , 0FFH MOV AH, 6 INT 21H 即為從鍵盤輸入字元

(4)輸出字串(9 號呼叫) 呼叫時,要求 DS : DX 必須指向記憶體中一個以 “ $ ” 作為結束標誌的字串中每一個字元(不包括結尾標誌 $ )都輸出顯示或列印 例如: DATA SEGMENT BUF DB ‘ABCDEFGHIJ$’ . . . DATA ENDS CODE SEGMENT . . MOV AX, DATA MOV DS, AX . . MOV DX, OFFSET BUF MOV AH, 9 INT 21H . . CODE ENDS 執行本程式,螢幕將顯示:ABCDEFGHIJ

(5)字串輸入(0AH 號呼叫) 從鍵盤接收字串到記憶體輸入緩衝區。要求事先定義一個輸入緩衝區,緩衝區內第一個位元組指出緩衝區能容納的字元個數,不能為零。第二個位元組保留以用作填寫輸入的字元個數。從第三個位元組開始存放從鍵盤上接收的字元。若實際輸入的字元數少於定義的位元組數,緩衝區內其餘位元組填零,若多於定義的位元組數,則後來輸入的字元丟掉,且響鈴 呼叫時,要求 DS : DX 指向輸入緩衝區 例如: DATA SEGMENT BUF DB 100 ;緩衝區長度 DB ? ;保留為填入實際輸入的字元個數 DB 100 DUP (?) ; 定義 100 個位元組儲存空間 . . DATA ENDS CODE SEGMENT . . MOV AX , DATA MOV DS , AX . . MOV DX , OFFSET BUF MOV AH , 10 INT 21H . . CODE ENDS

(6)日期設定(2BH 呼叫) 呼叫時, CX : DX 中必須有一個有效的日期,CX 中存放年號(1980 ~ 2099),DH 中存放月號(1 ~ 12),DL 中放日號,若日期有效,設定成功,AL = 0 ;否則 AL = 0FFH 例如:下列程式可把日期設定為 2000 年 10 月 1 日 MOV CX ,2000 MOV DH ,10 MOV DL , 1 MOV AH , 2BH INT 21H