章 – 6
コンピュータの基本の紹介
序章
場合によっては、データを回復しようとしているとき、またはデータとディスクのトラブルシューティングタスクを実行しているとき(または他のシステム関連のタスクである可能性があります)、DOCのDEBUGコマンドを使用すると非常に便利です。
また、特定のケースでは、DEBUGを使用してからプログラミングを使用すると、その特定のタスクを簡単に実行できると感じる場合があります。例を見てみましょう。 DBRのバックアップを作成するには、次のデバッグのコーディングで十分です。次の行を入力するだけです。
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
ここでは、上記の数行を入力するだけで、プログラムの作成を回避できることがわかります。 DBRのバックアップコピーをディスクにロードするコーディングの別の例を見てみましょう
常に覚えておいてください!完全な知識なしにこれを試さないでください。あなたがやろうとしていることを確認してください。次の命令を不注意に使用すると、ディスクのすべての情報にアクセスできなくなる可能性があるため、ビッグデータが失われる可能性があります。
DEBUG BKDBR.BIN
W 100 2 0 1
Q
この例のコーディングを見ると、最も必要なときにどれだけ役立つかを簡単に推測できます。また、すべての状況でプログラミングを行うことは不可能です。ただし、問題の単純なケースの制限内で、組み立て手順を使用するには、 ブートディスクにdebug.exe / debug.comをコピーして、コードの記述を開始する必要があります。
この章および本書の機能と説明されている例は、x86インテルプロセッサー・ファミリーのアーキテクチャーとのみ互換性があります。
まず最初に、さまざまなステップで機能と例を説明しながら、次のセクションで使用される用語を理解するために、コンピュータアーキテクチャの基本について少し知識を得る必要があります。コンピュータアーキテクチャの基本を教えてください。
基本概念
中央処理装置
この部分は中央処理装置またはCPUとも呼ばれ、制御装置と算術論理演算装置で構成されています。その機能は、メモリセルの内容の読み取りと書き込み、メモリセルと特殊レジスタ間のデータの転送、およびプログラムの命令のデコードと実行で構成されます。プロセッサには一連のメモリセルがあり、これらは非常に頻繁に使用されるため、CPUの一部です。
これらのセルは、レジスターの名前で知られています。プロセッサには、これらのレジスタが1つまたは2ダースある場合があります。 CPUの算術論理演算装置は、数値計算および記号計算に関連する操作を実現します。
通常、これらのユニットには、2つの整数の加算と減算、整数の乗算と除算、レジスタのビットの処理、2つのレジスタの内容の比較など、非常に基本的な演算を実行する能力しかありません。パーソナルコンピュータは、ワードサイズと呼ばれるもの、つまりプロセッサが一度に処理できるビット数によって分類できます。
セントラルメモリ
これは、半導体で製造されたセルのグループであり、プログラムの実行や操作のための情報の保存などの一般的なプロセスに使用されます。これらのセルのそれぞれに数値が含まれている可能性があり、方向付けが可能であるという特性があります。これは、セルごとに一意の番号またはアドレスを使用して、それらを区別できることです。 これらのメモリの総称は、ランダムアクセスメモリまたはRAMです。
このタイプのメモリの主な欠点は、電力の流れが遮断されると、集積回路が保存した情報を失うことです。これが、システムの電源を切っても情報が失われない記憶を作成する理由でした。 これらのメモリには、読み取り専用メモリまたはROMという名前が付けられています。
PCが情報を処理するためには、この情報がレジスタと呼ばれる特別なセルにある必要があります。レジスタは、8個または16個のフリップフロップのグループです。
フリップフロップは、2つのレベルの電圧を保存できるデバイスです。1つは通常0.5ボルトの低電圧で、もう1つは通常5ボルトの電圧です。フリップフロップの低レベルのエネルギーはオフまたは0として解釈され、高レベルはオンまたは
- これらの状態は通常、ビットと呼ばれ、コンピューターの最小の情報単位です。
16ビットのグループはワードとして知られています。 ワードはバイトと呼ばれる8ビットのグループに分割でき、4ビットのグループはニブルと呼ばれます。
CPUレジスタ
CPUには4つの内部レジスタがあり、それぞれが16ビットです。 最初の4つ、AX、BX、CX、およびDXは汎用レジスタであり、8ビットレジスタとしても使用できます。このように使用する場合は、たとえば次のように参照する必要があります。AHおよびAL。 AXレジスタの上位バイトと下位バイト。この命名法は、BX、CX、およびDXレジスタにも適用されます。
特定の名前で知られているレジスタ:
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
ただし、次の章でCを介した割り込みプログラミングでこれらのレジスタを使用しますが、ここでアセンブリ言語の基本を学ぶことは理想的であり、ディスク操作などのプログラミング全体に役立ちます。
デバッグプログラムを使用して、CPUの内部レジスタの値を視覚化することができます。デバッグの操作を開始するには、コンピューターに次のプロンプトを入力します。
C:/>デバッグ <入力>
次の行にダッシュが表示されます。これはデバッグのインジケーターです。この時点で、次のコマンドを使用してデバッグの手順を導入できます。
- r <入力>
CPUの内部レジスタの内容がすべて表示されます。それらを表示する代わりに、 "r" 値を表示したいレジスターの名前をパラメーターとして使用するコマンド。例えば:
-rbx <入力>
この命令は、BXレジスタの内容のみを表示し、デバッグインジケータはから変更されます。 "-" to ":"
プロンプトがこのような場合、新しい値を入力して表示されたレジスタの値を変更することができます。 <入力>, または、他の値を入力せずにEnterキーを押すと、古い値を残すことができます。
フラグレジスタの値を変更して、後で説明するように、プログラムの制御構造として使用することができます。レジスタの各ビットには特別な名前と意味があります。次のリストは、オンまたはオフの各ビットの値と、プロセッサの動作との関係を示しています。
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
アセンブラ構造
アセンブリ言語のコード行には2つの部分があり、最初の部分は実行される命令の名前であり、2番目の部分はコマンドのパラメーターです。例えば:
ああ、bhを追加
ここ "追加" 実行するコマンドです。この場合、追加、および "ああ" としても "それと" パラメータです。
言語での指示の名前は、2、3、または4文字で構成されています。これらの命令は、プロセッサが実行する機能を表すため、ニーモニック名または操作コードとも呼ばれます。操作にパラメーターを必要としないコマンドもあれば、パラメーターを1つだけ必要とするコマンドもあります。
指示は次のように使用される場合があります。
ナンバーアル、[170]
2番目のパラメーターの括弧は、170の値ではなく、メモリー・セル番号170の内容を処理することを示しています。これは直接方向として知られています。
これで、デバッグを使用して最初のプログラムをコーディングする準備が整いました。私たちは、私たちが見ているものを説明するために機能するプログラムを作成します。そして、私たちが行うことは、プログラムに直接導入する2つの値を追加することです。
最初のステップはデバッグを開始することです。このステップは、debugと入力するだけで構成されます。 <入力> オペレーティングシステムのプロンプトで。
デバッグでプログラムをアセンブルするには、 "a" (アセンブル)コマンドを使用します。このコマンドを使用すると、アセンブルを開始するアドレスをパラメーターとして指定できます。パラメーターを省略すると、CS:IPで指定された場所(通常は0100h)でアセンブルが開始されます。これは、プログラムが実行される場所です。 .COM拡張子を付けて開始する必要があります。そして、デバッグだけがこの特定のタイプのプログラムを作成できるので、それは私たちが使用する場所になります。
現時点では与える必要はありませんが "a" パラメータをコマンドする場合は、CS:IPレジスタを使用した後の問題を回避するために、次のように入力することをお勧めします。
-a0100 <入力>
これを行うと、次のようなものが画面に表示されます:0C1B:0100カーソルはこれらの数字の右側に配置されます。16進法では、最初の4桁は異なる場合がありますが、最後の4桁は0100である必要があります。 、それは私たちが最初に示したアドレスなので。これで、手順を紹介できます。
0C1B:0100 mov ax,0002; puts the 0002 value on the ax register
0C1B:0103 mov bx,0004; puts the 0004 value on the bx register
0C1B:0106 add ax,bx; the content of bx is added to the content of ax
0C1B:0108 int 20; provoques the termination of the program.
0C1B:010A
後に続くコメントを書く必要はありません ";". 最後のコマンドが入力されると、int 20 <入力> 何も書き込まずにが押されると、デバッガプロンプトが再度表示されます。
最後に書かれた行は、適切にアセンブラ命令ではありません。代わりに、オペレーティングシステムの割り込みを要求します。これらの割り込みは、多くの行を節約し、オペレーティングシステムの機能にアクセスするのに非常に役立ちます。
私たちが書いたプログラムを実行するために、 "g" コマンドが使用され、使用されると、次のメッセージが表示されます。
"プログラムは正常に終了しました". 当然、このようなメッセージでは、プログラムが追加を行ったかどうかはわかりませんが、を使用してそれを確認する簡単な方法があります。 "r" デバッグのコマンドを実行すると、プロセッサのすべてのレジスタの内容を確認できます。次のように入力するだけです。
-r <入力>
それぞれの実際の値を持つ各レジスタは、次のように画面に表示されます。
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
レジスタに異なる値が含まれている可能性がありますが、AXとBXは変更したばかりなので、同じである必要があります。
プログラムの実行中に値を確認する別の方法は、実行を終了するアドレスを使用し、レジスタの値をパラメータとして表示することです。 "g", この場合、次のようになります。g108、この命令はプログラムを実行し、108アドレスで停止し、レジスタの内容を表示します。
レジスタで起こっていることのフォローアップは、を使用して行うことができます "t" コマンド(トレース)の場合、このコマンドの機能は、アセンブルされたものを1行ずつ実行し、レジスタの内容を毎回表示することです。
デバッグを終了するには、 "q" (終了)コマンド。
アセンブラの利点
アセンブラを使用する最初の理由は、PCの動作をより詳しく知る機会を提供し、より一貫した方法でソフトウェアを開発できるようにすることです。
2つ目の理由は、アセンブラーを使用してコンピューターを完全に制御できることです。もう1つの理由は、アセンブリベースのプログラムは、他の言語で作成されたプログラムよりも高速で、場合によっては小さく、容量が大きいことです。
約束を守りましょう!!
この章の前半では、例としていくつかの命令を使用して、DBRのバックアップを作成し、必要に応じてDBRのバックアップを元の場所にロードしました。まず、バックアップを作成するための手順を調べます。
C:\>DEBUG A:\BKDBR.BIN <Enter>
File not found
- L 100 2 0 1 <Enter>
- R CX <Enter>
CX 0000
: 200 <Enter>
- W <Enter>
Writing 00200 bytes
- Q <Enter>
この例では、最初の行から勉強を始めましょう。コマンドDEBUGA:\ BDKBR.BIN A:フロッピードライブにBKDBR.BINという名前のファイルがまだ存在しない場合は、ファイルを作成してデバッグコマンドを初期化します。そのため、最初に「ファイルが見つかりません」というメッセージが表示されました。
2番目の命令L100 2 0 1では、L(ロード)コマンドは、命令されたドライブのDBRをロードすることです。方法を学びましょう。この命令では、番号100はDBRが格納されるバッファのアドレスであり、次の番号2はドライブC(C :)に使用されます。ドライブ番号は次のとおりです。
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
次の数字0は、読み取るセクター数の開始セクター番号です。ここでは、0を使用して1番目のセクター(DBRセクター)を読み取ります。次の1の数字は、読み取るセクターの数を通知するために使用されます。
1つのセクターのみを読み取りたいので、ここでは1を指定しました。ただし、他のさまざまなタイプの操作では、ニーズに応じて開始セクターと終了セクターの数と場所を使用できます。したがって、ドライブCの最初のセクターから見つめている1つのセクターをメモリ位置100にロードします。
R CX命令は、BKDBR.BINファイルに書き込むデータの長さを変更または定義するために使用されます。この命令は、CXレジスタの現在の値を示し、変更を加えることができます。 DEBUGコマンドは16進システムを使用し、16進でのDBRのサイズは200(h)バイトであり、10進システムでは512バイトであるため、ここでは200と入力しました。
Wコマンドは、ロケーション100からBKDBR.BINファイルに200(h)バイトを書き込むようにDEBUGに指示します。最後に、命令Qを使用してDEBUGを終了し、DOSプロンプトに戻ります。
警告!!!警告!!!警告!!!
ディスクのDBRを復元する手順で、何をどのように行っているかを知っておくことを強くお勧めします。誤って他のディスクの不正またはDBRを保存すると、ほとんどの場合、ディスクの完全なデータにアクセスできなくなる可能性があります。
コーディングの最初の命令を入力すると、次のようになります。
デバッグA:\ BDKBR.BIN <入力>
ファイルは、DEBUGプログラムを開始する特定の場所にある必要があります。ここで、DEBUGプロンプトの前に「ファイルが見つかりません」というエラーメッセージが表示された場合は、Q(終了)コマンドを使用してプロセスをすぐに停止します。これは、BKDBR.BINファイルがDEBUGプログラムによって検出または開かれなかったことを意味し、このプロセスを続行すると、一部のジャンク情報がDBRに書き込まれ、パーティション全体にアクセスできなくなります。 |
ここで、BKDBR.BINという名前のバックアップファイルからDBRを復元するための手順のコーディングで何をしたかを見てみましょう。バックアップを復元するためのDEBUGのコマンドは次のとおりです。
C:\> DEBUG A:\BKDBR.BIN <入力>
- W 100 2 0 1 <Enter>
- Q <Enter>
|
この命令は、メモリ位置100のフロッピードライブ(a :)のBKDBR.BINファイルから1セクターの情報を、ドライブ(C :)である2番目のドライブのセクター0である最初のセクターに書き込みます。
プログラムの保存と読み込み
必要になるたびにプログラム全体を入力するのは実用的ではないようです。これを回避するには、プログラムをディスクに保存できます。すでにアセンブルされているため、デバッグを再度実行する必要がないという大きな利点があります。それを実行します。
すでにメモリに保存されているプログラムを保存する手順は次のとおりです。
- プログラムの長さから、最初のアドレスから最後のアドレスを引いたものを取得します。当然、16進法です。
- プログラムに名前と拡張子を付けます。
- プログラムの長さをCXレジスタに入れます。
- デバッグを注文して、プログラムをディスクに書き込みます。
次のプログラムを例として使用すると、これらの手順を実行する方法がより明確になります。プログラムが最終的に組み立てられると、次のようになります。
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
000Aバイトの書き込み
プログラムの長さを取得するには、 "h" コマンドを使用すると、16進数で2つの数値の加算と減算が表示されます。私たちの長さを取得するために、プログラムの最終アドレス(10A)とプログラムの初期アドレス(100)の値をパラメーターとして指定します。コマンドが示す最初の結果はパラメーターの加算であり、2番目の結果は減算です。
The "n" コマンドを使用すると、プログラムに名前を付けることができます。 The "rcx" cコマンドを使用すると、CXレジスタの内容をファイルのサイズから取得した値に変更できます。 "h", この場合は000aです。これは、初期アドレスから最終アドレスを減算した結果であるためです。
最後に、 "w" コマンドはプログラムをディスクに書き込み、書き込んだバイト数を示します。また、すでにロードされているファイルを保存するには、次の2つの手順が必要です。
- ロードするファイルの名前を指定します。
- を使用してロードします "l" (ロード)コマンド。
以下の手順で正しい結果を得るには、上記のプログラムを作成しておく必要があります。
Debug内で、次のように記述します。
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
最後 "u" コマンドは、プログラムがメモリにロードされたことを確認するために使用されます。それが行うことは、コードを逆アセンブルし、それが逆アセンブルされたことを示すことです。パラメータは、分解する場所と場所をデバッグすることを示します。 DEBUGは、特に指定されていない限り、常にアドレス100Hのメモリにプログラムをロードします。
セグメント
x86プロセッサのアーキテクチャでは、情報を管理するためにメモリセグメントを使用する必要があり、これらのセグメントのサイズは64kbです。
これらのセグメントである理由は、プロセッサが管理できる数値の最大サイズが16ビットまたはレジスタのワードによって与えられることを考慮すると、65536を超えるメモリのローカリティにアクセスできないためです。これらのレジスタの1つだけを使用しますが、メモリがグループまたはセグメントに分割されている場合、それぞれが65536の地域であり、専用レジスタのアドレスを使用して各セグメントを検索し、特定のスロットの各アドレスを作成します2つのレジスタがあり、4294967296バイトのメモリにアクセスできます。
アセンブラがデータを管理できるようにするには、各セグメントに対応する領域に各情報または命令を見つける必要があります。アセンブラは、DS、ES、SS、およびCSレジスタによって指定されたセグメントのローカリゼーションと、レジスタ内の指定された情報のアドレスを考慮して、この情報にアクセスします。このため、アセンブルする各行でDebugを使用してプログラムを作成すると、次のようなものが表示されます。
1CB0:0102 MOV AX、BX
最初の番号1CB0が使用されているメモリセグメントに対応し、2番目の番号がこのセグメント内のアドレスを参照し、そのアドレスから格納される命令が続きます。
セグメント全体を使用するのはメモリの浪費になるため、アセンブラは、アセンブルされた各命令が必要とするバイト数をベースとして、セグメントのサイズを調整します。たとえば、プログラムがデータを保存するために10kbしか必要としない場合、データセグメントは10kbのみであり、処理できる64kbではありません。
データの移動
知識と便宜のために、ここにデータ操作のアセンブリ言語の説明をいくつかリストします。割り込みやその他のBIOS操作を使用してプログラミングを行う場合は、その基本が必要になります。
アセンブリ言語の詳細な紹介と徹底的な研究は、この本の限界を超えています。さらに重要なプログラミングの章に進むには、アセンブリの基本に関する知識が必要ですが、すべての手順を理解するのが難しいと感じた場合は、心配する必要はありませんが、手順の基本的な考え方を習得することをお勧めします。
どのプログラムでも、メモリとCPUレジスタのデータを移動する必要があり、これを行うにはいくつかの方法があります。メモリ内のデータをあるレジスタに、レジスタからレジスタに、レジスタからスタックに、スタックからレジスタに、データを外部デバイスに送信するために、またはその逆にコピーすることができます。
このデータの移動には、規則と制限が適用されます。それらの一部を次に示します。
- あるメモリ位置から別のメモリ位置にデータを直接移動することはできません。最初にソースロケーションのデータをレジスタに移動し、次にレジスタから宛先ローカリティに移動する必要があります。
- 定数をセグメントレジスタに直接移動することはできません。最初にCPUのレジスタに移動する必要があります。
- バイトまたはワードのチェーンをコピーするMOVS命令を使用して、データブロックを移動することができます。ある場所から別の場所にnバイトをコピーするMOCSBと、ある場所から別の場所にnワードをコピーするMOVSW。最後の2つの命令は、移動するデータのグループとしてDS:SIによって定義されたアドレスから値を取得し、データの新しいローカリゼーションとしてES:DIを取得します。
データを移動するために、バッテリーと呼ばれる構造もあります。この構造では、データはプッシュ命令で導入され、ポップ命令で抽出されます。スタックでは、最初に導入されるデータが最後に取得できるデータです。これは、プログラムで次の命令を使用する場合です。
PUSH AX
PUSH BX
PUSH CX
スタックからそれらを取得するときに各レジスタに正しい値を返すには、次の順序で行う必要があります。
POP CX
POP BX
POP AX
外部デバイスとの通信では、outコマンドを使用して情報をポートに送信し、inコマンドを使用してポートから受信した情報を読み取ります。
OUTコマンドの構文は次のとおりです。
OUT DX、AX
DXには通信に使用されるポートの値が含まれ、AXには送信される情報が含まれます。
INコマンドの構文は次のとおりです。
IN AX、DX
ここで、AXは着信情報が保持されるレジスタであり、DXには情報が到着するポートのアドレスが含まれています。
MOV命令
メモリセル、レジスタ、およびアキュムレータ間のデータ転送に使用されます。構文は次のとおりです。
MOV宛先、ソース
この命令で許可されるデータのさまざまな動きを、次の表に示します。
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
例を見てみましょう:
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
このプログラムは、0006Hの値をAXレジスタに移動し、次にAX(0006h)の内容をBXレジスタに移動し、最後に4C00h値をAXレジスタに移動して、21h割り込みの4Cオプションで実行を終了します。 。割り込み13Hと割り込み21Hについては後で簡単に紹介します。
割り込み
割り込みは、CPUが実行を一時停止し、そのステータスを保存して、特定の場所に転送するようにするハードウェア機能です。転送場所は、割り込みに応答してアクションを実行することを目的としたプログラムのアドレスを指定します。割り込みの結果として実行されるプログラムは、割り込み処理プログラムと呼ばれます。
例えば : DOSがBIOSに情報を送信したい場合、またはBIOSがコンピュータシステムに情報を送信したい場合、DOSまたはBIOSは割り込みを生成します。割り込みが生成されるたびに、コンピュータは実行中の処理を一時停止し、最初に割り込みを生成した操作を処理します。
割り込みを生成できる各デバイスには、これらの割り込みを生成しているデバイスを識別するための一意の割り込み番号が付けられています。本書では、割り込み13H、割り込み13Hの拡張、割り込み21Hのすべての機能とサブ機能について説明します。
基本的に、中断には次の3つのタイプがあります。
- 内部ハードウェアの中断
- 外部ハードウェアの中断
- ソフトウェアの中断
内部ハードウェアの中断
内部割り込みは、プログラムの実行中に発生する特定のイベントによって生成されます。このタイプの中断は、ハードウェアによって全体が管理されており、変更することはできません。
このタイプの中断の明確な例は、コンピューターの内部時計のカウンターを実現するものです。ハードウェアは、時間を最新の状態に保つために、この中断を1秒間に数回呼び出します。
この中断を直接管理することはできませんが、ソフトウェアを使用して更新時間を制御することはできませんが、コンピューターへの影響を利用して利益を得ることができます。
例えば : 継続的に更新される仮想時計を作成するには、カウンターの実際の値を読み取り、それをユーザーが理解できる形式に変換するプログラムを作成するだけです。
外部ハードウェアの中断
外部割り込みは、キーボード、プリンター、通信カードなどの周辺機器によって生成されます。また、コプロセッサーによっても生成されます。外部割り込みを無効にすることはできません。
これらの割り込みはCPUに直接送信されませんが、このタイプの割り込みを排他的に処理する機能を持つ集積回路に送信されます。
ソフトウェアの中断
ソフトウェアの割り込みは、アセンブラがINT命令を使用して目的の割り込みの数を呼び出すことにより、直接アクティブ化できます。
割り込みを使用すると、プログラムの作成に役立ち、それらを使用することでプログラムが短くなります。それらは理解しやすく、通常はサイズが小さいためにパフォーマンスが向上します。このタイプの割り込みは、オペレーティングシステムのDOS割り込みとBIOS割り込みの2つのカテゴリに分類できます。
2つの違いは、オペレーティングシステムの中断は使いやすいですが、これらの中断はBIOSを使用して目標を達成するため、速度も遅くなります。一方、BIOSの中断ははるかに高速ですが、これらはハードウェアの一部であるため、非常に特殊であり、回路の製造元のブランドによっても異なる可能性があるという欠点があります。
使用する中断のタイプの選択は、プログラムに与えたい特性のみに依存します。
Since we shall use interrupts for data recovery programming with the help of C language via Interrupt handling with C, we shall discuss only Interrupt 13H, Interrupt 13H Extensions and Interrupt 21H routines specially. It is not so important to discuss all of the other interrupts and their functions because in C language, easier functions are available to perform most of those tasks. However, the knowledge of Interrupt 13H and its Extensions is must, for data recovery programming. |
割り込み20Hと割り込み21Hについて簡単に紹介します。角かっこで囲まれた値(0x20など)は、使用方法を示します
INT 20H ( 0x20) --> プロセスを終了します
呼び出し:CS =プログラムセグメントプレフィックスのセグメントアドレス
戻り値:なし
コメント:
現在のプロセスを終了します。これは、プログラムが最終終了を実行するために使用できるいくつかの方法の1つです。 INT 21Hまたは単にINT27Hの関数(00Hまたは31Hまたは4CH)を使用して、最終終了を実行することもできます。INT21Hの関数31Hおよび4CHは、戻りコードを親プロセスに渡すことができるため、一般的に推奨されます。
ファイル制御ブロック(FCB)を使用してファイルを書き込んだ場合は、最初にファイルを閉じることをお勧めします。そうしないと、最終終了のアクションでプロセスによって使用されたすべてのメモリが失われる可能性があります。が解放され、ファイルバッファがフラッシュされ、プロセスが所有するファイルまたはデバイスの開いているハンドルがすべて閉じられます。
したがって、ファイルのハンドルを開いていると、データが失われる可能性があります。
INT 21H (0x21)
機能00H(0x00) --> プロセスを終了します
呼び出し:AH = 00H
CS =プログラムセグメントプレフィックスのセグメントアドレス
戻り値:なし
コメント:
この割り込みにより、現在のプロセスが終了します。これは、プログラムが最終終了を実行するために使用できるいくつかの方法の1つです。詳細については、INT20Hを参照してください。
INT 21H (0x21)
機能01H(0x01) --> エコーによる文字入力
呼び出し先:AH = 01H
戻り値:AL = 8ビット入力データ
コメント:
この割り込みは、キーボードなどの標準入力デバイスから文字を読み取り、それを標準出力デバイスにエコーします。準備ができているキャラクターがいない場合は、キャラクターが利用可能になるまで待ちます。
INT 21H (0x21)
機能02H(0x02) --> 文字出力
呼び出し:AH = 02H
DL =出力用の8ビットデータ
戻り値:なし
コメント:
標準出力デバイスに文字を出力します。出力をリダイレクトできます。出力がリダイレクトされる場合、ディスクがいっぱいであることを検出する方法はありません。
出力がリダイレクトされていない場合、またはハンドルが論理デバイスCONを取得した場合、標準出力(0001H)の事前定義されたハンドルを使用して書き込み(INT 21H、関数40H)を実行することにより、文字列をディスプレイに送信することもできます。 。
INT 21H (0x21)
機能03H(0x03) --> 補助入力
呼び出し:AH = 03H
戻り値:AL = 8ビット入力データ
コメント:
標準の補助装置から文字を読み取ります。デフォルトは最初のシリアルポート(COM1)です。
補助デバイスがプログラムで処理できるよりも速くデータを送信すると、文字が失われる可能性があります。この関数呼び出しを介して、ユーザープログラムが補助デバイスのステータスを読み取ったり、文字の喪失などのI / Oエラーを検出したりする方法はありません。
INT 21H (0x21)
機能04H(0x04) --> 補助出力
呼び出し:AH = 04H
DL =出力用の8ビットデータ
戻り値:なし
コメント:
INT 21Hのこの機能は、標準の補助装置に文字を出力します。デフォルトは最初のシリアルポート(COM1)です。標準補助デバイス(00034)の事前定義されたハンドルを使用して、または論理デバイスAUXを開いて取得したハンドルを使用して書き込み(INT 21H機能40H)を実行することにより、文字列を補助デバイスに送信することもできます。
INT 21H(0x21)
機能05H(0x05) --> プリンター出力
呼び出し:AH = 05H
DL =出力用の8ビットデータ
戻り値:なし
コメント:
この関数は、文字を標準リストデバイスに送信します。デフォルトのデバイスは、最初のパラレルポート(LPT1)上のプリンタです。標準のプリンタデバイス(0004H)の事前定義されたハンドルを使用して、または論理デバイスPRNまたはLPT1を開いて取得したハンドルを使用して、書き込み(INT 21H機能40H)を実行することにより、文字列をプリンタに送信することもできます。
INT 21H (0x21)
機能06H(0x06) --> ダイレクトコンソールI / O
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
コメント:
標準の入力デバイスから文字を読み取ったり、標準の出力デバイスに文字を書き込んだりします。 I / Oはリダイレクトされる可能性がありますが、I / Oがリダイレクトされている場合、EOFまたはディスクがいっぱいであることを検出する方法はありません。 INT 21Hのこの機能は、オペレーティングシステムからの干渉なしに、すべての可能な文字と制御コードを読み書きする必要があるプログラムによって使用されます。
INT 21H (0x21)
機能07H (0x07) --> フィルタリングされていない文字入力 エコーなし
Call with: AH = 07H
Returns: AL = 8-bit input data
コメント:
この関数は、標準出力デバイスにエコーせずに、標準入力デバイスから文字を読み取ります。
INT 21H (0x21)
機能08H(0x08) --> 文字入力なしエコー
Call with: AH = 08H
Returns: AL = 8-bit input data
コメント:
この関数は、標準出力デバイスにエコーせずに、標準入力デバイスから文字を読み取ります。
INT 21H (0x21)
機能09H(0x09) --> 表示文字列
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
コメント:
文字列を標準出力デバイスに送信します。出力がリダイレクトされる場合があります。出力がリダイレクトされている場合、ディスクがいっぱいであることを検出する方法はありません。文字列は、リダイレクトされていない場合は標準出力(0001H)の事前定義されたハンドル、または論理デバイスCONを開いて取得したハンドルを使用して書き込み(INT 21H関数40H)を実行することによってディスプレイに送信することもできます。
INT 21H (0x21)
機能0AH(0x0Aまたは10) --> バッファキーボード入力
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
コメント:
標準の入力デバイスからASCIIキャリッジリターン(0DH)までのバイト文字列を読み取り、ユーザーが指定したバッファに配置します。文字は標準出力デバイスにエコーされます。関数が使用するバッファーの形式は次のとおりです。
Byte |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
INT 21H (0x21)
機能0BH(0x0Bまたは11) --> 入力状態を確認する
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
コメント:
キーボードなどの標準入力デバイスから文字を使用できるかどうかを確認します。この関数は、IOCTL INT21H関数44Hサブ関数06Hと同等です。
INT 21H (0x21)
機能0CH(0x0Cまたは12) --> 入力バッファをフラッシュしてから入力
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
コメント:
標準入力バッファをクリアしてから、文字入力関数の1つを呼び出します。入力をリダイレクトできます。 01H、06H、07H、08H、または0AHを除くALの関数番号は、入力バッファーをフラッシュし、呼び出し元のプログラムに制御を戻します。
INT 21H (0x21)
関数0DH(0x0Dまたは13) -> ディスクリセット
呼び出し先:AH = 0DH
戻り値:なし
コメント:
この関数は、すべてのファイルバッファをフラッシュします。この関数は、まだ開いているファイルのディスクディレクトリを更新しません。
INT 21H (0x21)
機能0EH(0x0Eまたは14) -> ディスクを選択
呼び出し:AH = 0EH
DL =ドライブコード(0 = A、1 = Bなど)
戻り値:AL =システム内の論理ドライブの数
コメント:
指定されたドライブを現在またはデフォルトのディスクドライブとして選択し、システム内の論理ドライブの総数を返します。
アプリケーションは、ドライブ文字A〜Z(0 = A、1 = Bなど)に制限する必要があります。論理ドライブとは、フロッピーディスクやハードディスクドライブなどのブロックデバイスの総数を意味します。通常、1台の物理ハードディスクドライブが2つ以上の論理ドライブに分割されます。
INT 21H (0x21)
機能0FH(0x0Fまたは15) -> ファイルを開く
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
関数が失敗し、ファイルが見つからない場合
Al = 0ffah
コメント:
ファイルを開き、後続の読み取り/書き込み操作で使用できるようにします。プログラムが128バイト以外のレコードサイズを使用する場合は、ファイルが正常に開かれた後、他のディスク操作の前に、レコードサイズフィールドをFCBオフセット0EHに設定する必要があります。
INT 21H (0x21)
機能10H(0x10または16) -> ファイルを閉じる
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
コメント:
ファイルを閉じるために使用されます。ファイルを閉じ、ファイルに関連付けられているすべてのMS-DOS内部ディスクバッファをディスクにフラッシュし、ファイルが変更または拡張されている場合はディスクディレクトリを更新します。
INT 21H (0x21)
機能11H(0x11または17) -> 最初のファイルを探す
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
また、機能するために入力されたFCBのタイプに応じて、未開封の通常FCBまたは拡張FCBとして入力された現在のディスク転送領域(DTA)アドレスのバッファー。
関数が失敗した場合(一致するファイル名が見つかりません)
AL = FFH
コメント:
指定されたドライブの現在のディレクトリで、一致するファイル名を検索します。ワイルドカード(?および*)を使用できます。この関数は、最初に一致するファイル名を返します。
INT 21H (0x21)
機能12H(0x12または18) -> 次のファイルを探す
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
コメント:
これは前の関数のコンパニオンです。 INT 21H関数11Hが成功した場合、次に一致するファイル名があればそれを返します。この関数は、入力として使用されるFCBが、INT 21H関数11Hの前回の呼び出しと、INT 21H関数12Hの後続の呼び出しによって適切に初期化され、検索されるファイル名または拡張子に少なくとも1つのワイルドカード文字が含まれていることを前提としています。
INT 21H (0x21)
機能13H(0x13または19) -> ファイルを削除する
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
コメント:
デフォルトまたは指定されたディスクドライブの現在のディレクトリから、一致するすべてのファイルを削除します。ワイルドカード(?および*)を使用することもできます。
INT 21H (0x21)
機能14H(0x14または20) -> シーケンシャルリード
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
コメント:
この関数は、ファイルから次の連続するデータブロックを読み取り、ファイルポインタを適切にインクリメントします。読み取るデータのバイト数は、ファイル制御ブロック(FCB)のレコードサイズフィールド(オフセット0EH)で指定されます。
レコードは、INT 21H関数1AHへの最新の呼び出しによって指定された、現在のディスク転送領域(DTA)アドレスでメモリに読み込まれます。レコードのサイズとバッファーの場所がセグメントのオーバーフローまたはラップアラウンドが発生するようなものである場合、関数は戻りコード02Hで失敗します。
INT 21H (0x21)
機能15H(0x15または21) --> シーケンシャル書き込み
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
コメント:
この関数は、データの次のシーケンシャルブロックをファイルに書き込み、ファイルポインタを適切にインクリメントします。書き込まれるデータのバイト数は、ファイル制御ブロック(FCB)のレコードサイズフィールド(オフセット0EH)によって指定されます。
INT 21H (0x21)
機能16H(0x16または22) --> ファイルを作成する
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
コメント:
この関数は、現在のディレクトリに新しいディレクトリエントリを作成するか、同じ名前の既存のファイルを長さゼロに切り捨てます。また、後続の読み取り/書き込み操作のためにファイルを開きます。指定された名前の既存のファイルは長さがゼロに切り捨てられ、そのファイル内のすべてのデータが回復不能に失われるため、この関数は注意して使用する必要があります。
INT 21H (0x21)
機能17H(0x17または23) --> ファイルの名前を変更
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
コメント:
この関数は、指定されたドライブのディスク上の現在のディレクトリにあるすべての一致するファイルの名前を変更します。
これでワイルドカードを使用することもできます。特別なファイル制御ブロックには、ドライブコード、ファイル名、および拡張子が通常の位置(バイト0から0BH)にあり、2番目のファイル名が最初のファイル名の6バイト後に始まります(オフセット11H)。
INT 21H
機能18H(0x18または24) --> 予約済み
INT 21H (0x21)
機能19H(0x19または25) --> 現在のディスクを取得する
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
コメント:
この関数は、現在またはデフォルトのディスクドライブのドライブコードを返します。
INT 21H (0x21)
機能1AH(0x1Aまたは26) --> DTAアドレスを設定する
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
コメント:
この関数は、後続のFCB関連の関数呼び出しに使用されるディスク転送領域(DTA)のアドレスを指定します。
INT 21H (0x21)
関数1BH(0x1Bまたは27)-&gt;デフォルトのドライブを取得 データ
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
コメント:
この関数は、デフォルトのディスクドライブに関する選択された情報と、ファイルアロケーションテーブルからメディア識別バイトへのポインタを取得します。
メディアIDバイトの意味は次のとおりです。
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
機能1CH(0x1Cまたは28) --> ドライブデータを取得する
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
コメント:
この関数は、指定されたディスクドライブに関する割り当て情報と、ファイルアロケーションテーブルからメディア識別バイトへのポインタを取得します。メディアID情報については、INT 21H、機能1BHに記載されているメディア記述子IDバイトテーブルを参照してください。
INT 21H (0x21)
機能1DH(0x1Dまたは29) --> 予約済み
INT 21H (0x21)
機能1EH(0x1Eまたは30) --> 予約済み
INT 21H (0x21)
機能1FH(0x1Fまたは31) --> 予約済み
INT 21H (0x21)
機能20H(0x20または32) --> 予約済み
INT 21H (0x21)
機能21H(0x21または33) --> ランダム読み取り
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
コメント:
この関数は、選択したレコードをファイルからメモリに読み取ります。レコードは、INT 21H関数1AHへの最新の呼び出しによって指定された、現在のディスク転送領域アドレスでメモリに読み込まれます。
INT 21H (0x21)
機能22H(0x22または34) --> ランダム書き込み
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
コメントコメント:
この関数は、メモリからファイル内の選択されたレコードにデータを書き込みます。
INT 21H (0x21)
機能23H(0x23または35) --> ファイルサイズを取得する
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
コメントコメント:
この関数は、現在のディレクトリで一致するファイルを検索します。見つかった場合は、レコード数で表したファイルのサイズでFCBを更新します。この関数にはデフォルトのレコードサイズがないため、この関数を呼び出す前に、適切な値をFCBレコードサイズフィールド(オフセット0EH)に入力する必要があります。
INT 21H (0x21)
機能24H(0x24または36) --> 相対レコード番号を設定する
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
コメントコメント:
この関数は、ファイル制御ブロック(FCB)の相対レコード番号フィールドを、開いているFCBに記録されている現在のファイル位置に対応するように設定します。
INT 21H (0x21)
機能25H(0x25または37) --> 割り込みベクタを設定する
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
コメントコメント:
この関数は、割り込み処理ルーチンを指すようにCPU割り込みベクトルを初期化します。これは、正常に動作するアプリケーションによる割り込みベクトルテーブルの直接編集よりも優先して使用する必要があります。
INT 21H (0x21)
機能26H(0x26または38) --> 新しいプログラムセグメントプレフィクス(PSP)を作成する
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
コメントコメント:
この関数は、現在実行中のプログラムのプログラムセグメントプレフィクス(PSP)を空きメモリ内の指定されたセグメントアドレスにコピーし、新しいPSPを更新して別のプログラムで使用できるようにします。
INT 21H (0x21)
機能27H(0x27または39) --> ランダムブロック読み取り
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
コメントコメント:
この関数は、指定されたファイルの場所から開始して、ファイルからメモリに1つ以上のシーケンシャルレコードを読み取ります。バッファーのサイズと位置がセグメントのオーバーフローまたはラップアラウンドが発生するようなものである場合、関数は戻りコード02Hで失敗し、ファイルの終わりで部分的なレコードが読み取られると、レコードの残りの部分はゼロで埋められます。
INT 21H (0x21)
機能28H(0x28または40) -->ランダムブロック書き込み
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
コメントコメント:
この関数は、指定されたファイルの場所から開始して、メモリからファイルに1つ以上の順次レコードを書き込みます。バッファーのサイズと位置がセグメントのオーバーフローまたはラップアラウンドが発生するようなものである場合、関数は戻りコード02Hで失敗します。
INT 21H (0x21)
機能29H(0x29または41) --> ファイル名を解析する
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
コメントコメント:
この関数は、テキスト文字列をファイル制御ブロック(FCB)のさまざまなフィールドに解析します。
この関数は、文字(:。;、= +タブスペース)を区切り文字と見なし、すべての制御文字と文字(:。;、= +タブスペース)を考慮します。 < > | /“ [])ターミネータ文字として。
INT 21H (0x21)
機能2AH(0x2Aまたは42) --> 日付と日付を取得する
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
コメントコメント:
この関数は、システムの曜日、曜日、月、年を取得します。
INT 21H (0x21)
機能2BH(0x2Bまたは43) --> 設定日
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
コメントコメント:
この関数は、システムクロックドライバーを特定の日付に初期化しますが、システム時刻は変更されません。
INT 21H (0x21)
機能2CH(0x2Cまたは44) -->時間をもらう
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
コメントコメント:
これは、システムのリアルタイムクロックドライバーから時刻を取得するために使用され、時間、分、秒、および100分の1秒に変換されます。
INT 21H (0x21)
機能2DH(0x2Dまたは45) --> 時間を設定する
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
コメントコメント:
この関数は、システムのリアルタイムクロックを指定された時、分、秒、および100分の1秒に初期化します。システムの日付は影響を受けません。
INT 21H (0x21)
機能2EH(0x2Eまたは46) --> 検証フラグを設定する
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
戻り値:なし
コメントコメント:
この機能は、データの自動読み取り/書き込み検証のためのオペレーティングシステムフラグをオフまたはオンにします。書き込み後の読み取り検証ではディスク操作が遅くなるため、検証フラグのデフォルト設定はオフです。
INT 21H (0x21)
機能2FH(0x2Fまたは47) --> DTAアドレスを取得する
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
コメントコメント:
この関数は、FCBファイルの読み取り/書き込み操作のためにディスク転送領域(DTA)の現在のアドレスを取得します。
INT 21H (0x21)
機能30H(0x30または48) --> MS-DOSのバージョン番号を取得する
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
コメントコメント:
ホストのMS-DOSオペレーティングシステムのバージョン番号を返します。
INT 21H (0x21)
機能31H(0x31または49) --> 終了して常駐(TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
コメントコメント:
この関数は、戻りコードを親プロセスに渡すことによって現在実行中のプログラムの実行を終了しますが、プログラムのメモリの一部またはすべてを予約して、ロードされる次の一時プログラムによってオーバーレイされるようにします。この関数は、プログラムセグメントプレフィックスのセグメントを含むCSをサポートしているため、INT27Hよりも優先して使用する必要があります。
INT 21H (0x21)
機能32H(0x32または50) --> 予約済み
INT 21H (0x21)
機能33H(0x33または51) --> ブレークフラグを取得または設定し、ブートドライブを取得します
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
コメントコメント:
この関数は、オペレーティングシステムのブレークフラグのステータスを取得または変更します。これは、関数呼び出し中のCtrl-Cチェックに影響を与えます。
INT 21H (0x21)
機能34H(0x34または52) --> 予約済み
INT 21H (0x21)
機能35H(0x35または53) --> 割り込みベクタを取得
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
コメントコメント:
この関数は、指定されたマシン割り込みの現在の割り込みハンドラルーチンのアドレスを取得します。
INT 21H (0x21)
機能36H(0x36または54) --> ドライブ割り当て情報を取得する
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
コメントコメント:
この関数は、ディスクドライブに関する選択された情報を取得します。
この機能は、データリカバリやディスクのトラブルシューティングプログラミングにおいて非常に重要であり、そこからドライブの容量や残りの空き容量、その他多くの重要な事項を計算できます。
INT 21H (0x21)
機能37H(0x37または55) --> 予約済み
INT 21H (0x21)
機能38H(0x38または56) --> 国情報を取得または設定する
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、現在または指定された国の国際情報を取得するか、現在の国コードを設定します。
INT 21H (0x21)
機能39H(0x39または57) --> ディレクトリを作成する
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、指定されたドライブとパスを使用してディレクトリを作成します。
ASCIIZは、NullまたはZero、Byteで終了するASCII文字のシーケンスとして知られています。 |
INT 21H (0x21)
機能3AH(0x3Aまたは58) --> ディレクトリを削除する
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、指定されたドライブとパスを使用してディレクトリを削除します。パス名のいずれかの要素が存在しないか、ディレクトリが空でないか、アクセスが拒否されているか、指定されたディレクトリが現在のディレクトリでもある場合、ディレクトリを削除する機能は失敗します。
INT 21H (0x21)
機能3BH(0x3Bまたは59) --> 現在のディレクトリを設定する
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、指定されたドライブとパスを使用して、現在またはデフォルトのディレクトリを設定します。指定されたパスまたはパスの要素が存在しない場合、関数は失敗します。
INT 21H (0x21)
機能3CH(0x3Cまたは60) --> ファイルを作成する
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
ビットの重要性を次の表に示します。
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
ASCIIZパス名が指定されている場合、この関数は、指定またはデフォルトのディスクドライブの指定またはデフォルトのディレクトリに新しいファイルを作成します。指定されたファイルがすでに存在する場合は、長さがゼロに切り捨てられます。いずれの場合も、ファイルが開かれ、プログラムがファイルへの後続アクセスに使用できるハンドルが返されます。
パス名の要素が存在しないか、ルートディレクトリにファイルが作成されていて、ルートディレクトリがいっぱいであるか、アクセスが拒否されているか、読み取り専用属性を持つファイルがすでに指定されたディレクトリにある場合、ファイルを作成する機能は失敗します。
INT 21H (0x21)
機能3DH(0x3Dまたは61) --> ファイルを開く
Call with: AH = 3DH
AL = access mode
アクセスモードビットの重要性を次の表に示します。
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
ASCIIZパス名が指定されている場合、この関数は、指定されたディスクドライブまたはデフォルトのディスクドライブの指定されたディレクトリまたはデフォルトのディレクトリにある指定されたファイルを開きます。プログラムが後でファイルにアクセスするために使用できるハンドルが返されます。
INT 21H (0x21)
機能3EH(0x3Eまたは62) --> ファイルを閉じる
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ファイルに関連付けられているすべての内部バッファーをディスクにフラッシュし、ファイルを閉じて、以前に開いた、または特定のハンドルの成功で作成されたハンドルを再利用できるように解放します。ファイルが変更された場合は、ファイルのディレクトリエントリで日時スタンプとファイルサイズが更新されます。
INT 21H (0x21)
機能3FH(0x3Fまたは63) --> ファイルまたはデバイスの読み取り
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、現在のファイルポインター位置のデータをファイルからバッファーに転送し、前のオープンまたは作成操作からの特定の有効なファイルハンドル、バッファーアドレス、およびバイト単位の長さのファイルポインター位置を更新します。
INT 21H (0x21)
機能40H(0x40または64) --> ファイルまたはデバイスの書き込み
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、データをバッファーからファイルに転送してから、前のオープンまたは作成操作からの指定された有効なファイルハンドルのファイルポインター位置、バッファーアドレス、およびバイト単位の長さを更新します。関数がCX = 0で呼び出された場合、ファイルは切り捨てられるか、現在のファイルポインター位置に拡張されます。
INT 21H (0x21)
機能41H(0x41または65) --> ファイルを削除する
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、デフォルトまたは指定されたディスクとディレクトリからファイルを削除します。この関数は、ルートディレクトリ内のファイル名の最初の文字を文字E5H(0xE5)に置き換え、ファイルアロケーションテーブルの新しいデータでファイルのクラスターを使用できるようにすることで、ファイルを削除します。それまでは、これらのクラスターに保存されている実際のデータは上書きされません。
INT 21H (0x21)
機能42H(0x42または66) --> Set file pointer
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ファイルの先頭、ファイルの終わり、または現在のファイル位置を基準にしたファイルポインタの位置を設定します。
INT 21H (0x21)
関数43H(0x43または67)-&gt;ファイルを取得または設定する 属性
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ファイル(読み取り専用、非表示、システム、またはアーカイブ)またはディレクトリの属性を取得または変更します。さまざまな属性のビットの重要性については、前に示したビットの重要性の表を参照してください。
INT 21H (0x21)
機能44H(0x44または68) --> 入出力制御(I / O Ctrl)
この機能は、アプリケーションプログラムとデバイスドライバ間の通信の直接パスを提供します。これにより、プログラムはハードウェアに依存する情報を取得し、他のMS-DOS関数呼び出しでサポートされていない操作を要求できます。.
入力および出力制御のサブ機能を次の表に示します。
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
機能44H(0x44または68)、サブ機能00H(0x00)I / O Ctrl --> デバイス情報を取得する
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ関数は、指定されたハンドルに関連付けられたファイルまたはデバイスのデバイス情報ワードを返します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能01H(0x01)I / O Ctrl --> デバイス情報を設定する
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
INT 21Hの機能44Hのこのサブ機能は、文字デバイスに関連付けられたハンドルに特定のフラグを設定します。このサブ関数は、ファイルに関連付けられているハンドルには使用できません。
INT 21H(0x21)
機能44H(0x44または68)、サブ機能02H(0x02)I / O Ctrl --> 読み取り制御データ文字デバイス
運転者
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
文字デバイスドライバから制御データを読み取ります。データの長さと内容は各デバイスドライバーに指定されており、標準の形式には準拠していません。この機能は、必ずしも物理デバイスからの入力をもたらすとは限りません。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能03H(0x03)I / O Ctrl --> 書き込み制御データ文字デバイスドライバー
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能は、アプリケーションから文字デバイスドライバに制御データを転送します。データの長さと内容は各デバイスドライバーに固有であり、標準の形式には準拠していません。この機能は、物理デバイスに出力された場合に必ずしも発生するわけではありません。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能04H(0x04)I / O Ctrl --> 制御データブロックの読み取り-デバイスドライバー
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ関数は、制御データをブロックデバイスドライバからアプリケーションプログラムのバッファに直接転送します。データの長さと内容は各デバイスドライバーに固有であり、標準の形式には準拠していません。この機能は、必ずしも物理デバイスからの入力になるとは限りません。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能05H(0x05)I / O Ctrl --> 書き込み制御データブロック-デバイスドライバー
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能は、制御データをアプリケーションプログラムからブロックデバイスドライバに直接転送します。制御データの長さと内容は、各デバイスドライバーに固有であり、標準の形式には準拠していません。この関数は、必ずしも物理デバイスへの出力をもたらすとは限りません。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能06H(0x06)I / O Ctrl --> 入力状態を確認する
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
ハンドルに関連付けられたデバイスまたはファイルが入力の準備ができているかどうかを示すコードを返します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能07H(0x07)I / O Ctrl --> 出力状態を確認する
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
ハンドルに関連付けられたデバイスが出力の準備ができているかどうかを示すコードを返します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能08H(0x08)I / O Ctrl --> ブロックデバイスが取り外し可能かどうかを確認します
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能は、指定されたブロックデバイスにフロッピーディスクなどのリムーバブルストレージメディアが含まれているかどうかを確認します。特定のドライブでファイルが期待どおりに見つからない場合、プログラムはこのサブ機能を使用して、ユーザーに別のディスクの挿入を求めるプロンプトを表示するかどうかを決定できます。.
INT 21H (0x21)
機能44H(0x44または68)、サブ機能09H(0x09)I / O Ctrl --> ブロックデバイスがリモートかどうかを確認します
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能は、指定されたブロックデバイスがローカル(プログラムを実行しているコンピューターに接続されている)かリモート(ネットワークサーバーにリダイレクトされている)かを確認します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能0AH(0x0Aまたは10)I / O Ctrl --> ハンドルがリモートかどうかを確認します
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
指定されたハンドルが、ローカル(プログラムを実行しているPC上にある)またはリモート(ネットワークサーバー上にある)のファイルまたはデバイスを参照しているかどうかを確認します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能0BH(0x0Bまたは11)I / O Ctrl --> 共有の再試行回数を変更する
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ関数は、MS-DOSがファイル共有違反によって失敗した後、要求しているプロセスにエラーを返す前に、ディスク操作を再試行する回数を設定します。このサブ機能は、ファイル共有モジュールがロードされていない限り使用できません。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能0CH(0x0Cまたは12)I /OCtrl汎用I / O制御
キャラクターデバイス
Call with: AH = 44H
AL = 0CH
BX = handle
CH =カテゴリ(メジャー)コード:
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL =関数(マイナー)コード:
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
これは、アプリケーションプログラムと文字デバイスドライバ間の通信のための汎用メカニズムを提供します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能0DH(0x0Dまたは13)I / O Ctrl --> ブロックの汎用I / O制御 デバイス
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能は、アプリケーションプログラムとブロックデバイスドライバ間の通信のための汎用メカニズムを提供します。プログラムが論理ドライブのデバイスパラメータを検査または変更し、ハードウェアに依存しない方法でディスクトラックの読み取り、書き込み、フォーマット、および検証を行えるようにします。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能0EH(0x0Eまたは14)I / O Ctrl -->> 論理ドライブマップを取得する
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
コメントコメント:
指定されたブロックドライブへのアクセスに最後に使用された論理ドライブコードを返します。
INT 21H (0x21)
機能44H(0x44または68)、サブ機能0FH(0x0Fまたは15)I / O Ctrl --> 論理ドライブマップを設定する
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ関数は、ブロックデバイスを参照するために使用される次の論理ドライブコードを設定します。
INT 21H (0x21)
機能45H(0x45または69) --> 重複ハンドル
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、現在開いているデバイスまたはファイルの特定のハンドルに対して、同じ位置にある同じデバイスまたはファイルを参照する新しいハンドルを返します。
INT 21H (0x21)
機能46H(0x46または70) --> リダイレクトハンドル
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
指定されたハンドルが2つある場合、この関数は2番目のハンドルが最初のハンドルと同じ場所にある同じデバイスまたはファイルを参照するようにします。次に、2番目のハンドルはリダイレクトされたと言われます。
INT 21H (0x21)
機能47H(0x47または71) --> 現在のディレクトリを取得
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ルートから現在のディレクトリへのパスとそのディレクトリの名前を説明するASCIIZ文字列を取得します。
INT 21H (0x21)
機能48H(0x48または72) --> メモリブロックを割り当てます
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
コメントコメント:
メモリのブロックを割り当て、割り当てられた領域の先頭へのポインタを返します。
INT 21H (0x21)
機能49H(0x49または73) --> メモリブロックを解放します
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、メモリブロックを解放し、他のプログラムで使用できるようにするために使用されます。プログラムがそれに属していないメモリブロックを解放した場合、またはレジスタESに渡されたセグメントアドレスが既存のメモリブロックの有効なベースアドレスでない場合、関数は失敗するか、予期しないシステムエラーを引き起こす可能性があります。
INT 21H (0x21)
機能4AH(0x4Aまたは74) --> メモリブロックのサイズを変更する
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
コメントコメント:
この関数は、アプリケーションプログラムのニーズに応じて、メモリブロックを動的に縮小または拡張します。
INT 21H (0x21)
機能4BH(0x4Bまたは75) --> プログラム実行(EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数を使用すると、アプリケーションプログラムで別のプログラムを実行し、終了時に制御を取り戻すことができます。オーバーレイのロードにも使用できますが、これは一般的ではありません。
INT 21H (0x21)
機能4CH(0x4Cまたは76) --> リターンコードでプロセスを終了します
Call with: AH = 4CH
AL = return code
Returns: Nothing
コメントコメント:
この関数は現在のプロセスを終了し、親プロセスにリターンコードを渡します。これは、プログラムが最終終了を実行するために使用できるいくつかの方法の1つです。
INT 21H (0x21)
機能4DH(0x4Dまたは77) --> リターンコードを取得する
呼び出し:AH = 4DH
戻り値:AH =終了タイプ
00H, if normal termination by INT 20H, INT 21H
Function 00H, or INT 21H Functions 4CH
01H if termination by user’s entry of Ctrl-C
02H if termination by critical-error handler
03H if termination by INT21H Function 31H or
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
コメントコメント:
この関数は、EXEC呼び出し(INT 21H関数4BH)が正常に実行された後、子プロセスの戻りコードと終了タイプを取得するために、親プロセスによって使用されます。
INT 21H (0x21)
機能4EH(0x4Eまたは78) --> 最初のファイルを探す
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
そして、検索結果は次のように現在のディスク転送領域に返されます。
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
機能が失敗した場合
Carry flag = set
AX = error code
コメントコメント:
この関数は、デフォルトまたは指定されたドライブ上のデフォルトまたは指定されたディレクトリで、ASCIIZ文字列の形式で指定されたファイル指定の最初の一致ファイルを検索します。属性のビット重要度については、前述のビット重要度表を参照してください。
INT 21H (0x21)
機能4FH(0x4Fまたは79) --> 次のファイルを探す
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
INT 21H関数4EHへの以前の呼び出しが成功した場合、この関数は、元のファイル指定に一致するデフォルトまたは指定されたドライブのデフォルトまたは指定されたディレクトリーで次のファイルを検索します。
INT 21H (0x21)
機能50H(0x50または80)--> 予約済み
INT 21H (0x21)
機能51H(0x51または81)-->予約済み
INT 21H (0x21)
機能52H(0x52または82)-->予約済み
INT 21H (0x21)
機能53H(0x53または83)-->予約済み
INT 21H (0x21)
機能54H(0x54または84)-->確認フラグを取得する
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
コメントコメント:
この関数は、システム検証(読み取り後書き込み)フラグの現在の値を取得します。
INT 21H (0x21)
機能55H(0x55または85)-->予約済み
INT 21H (0x21)
機能56H(0x56または86)-->ファイルの名前を変更する
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ファイルの名前を変更したり、そのディレクトリエントリを同じディスク上の別の場所に移動したりします。 MS-DOSバージョン3.0以降では、この関数を使用してディレクトリの名前を変更することもできます
パス名の要素が存在しないか、新しいパス名のファイルがすでに存在するか、現在のパス名の指定に新しいパス名とは異なるディスクドライブが含まれている場合、またはファイルがルートディレクトリに移動されている場合、およびルートディレクトリがいっぱいであるか、ユーザーの権限が不十分であるため、ファイルの名前を変更する機能が失敗します。
INT 21H (0x21)
関数57H(0x57または87)-->ファイルの日付と時刻を取得または設定する
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ファイルのルートディレクトリエントリの日付とタイムスタンプを取得または変更します。
INT 21H (0x21)
機能58H(0x58または88) --> 割り当て戦略を取得または設定する
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
メモリブロックを割り当てるための現在のMS-DOS戦略を示すコードを取得または変更します。デフォルトのMS-DOSメモリ割り当て戦略はFirstFit(コード0)です。
First Fitメモリ割り当てでは、MS-DOSは使用可能なメモリブロックを下位アドレスから上位アドレスまで検索し、ブロック割り当て要求を満たすのに十分な大きさの最初のメモリブロックを割り当てます。
最適な割り当て戦略の場合、MS-DOSは使用可能なすべてのメモリブロックを検索し、その位置に関係なく、要求を満たす利用可能な最小のブロックを割り当てます。
ラストフィットメモリ割り当て戦略では、MS-DOSは使用可能なメモリブロックを上位アドレスから下位アドレスまで検索し、ブロック割り当て要求を満たすのに十分な大きさの最も高いメモリブロックを割り当てます。
INT 21H (0x21)
機能59H(0x59または89) --> 拡張エラー情報を取得する
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
エラーコードの表を以下に示します。
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH =エラークラス
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL =推奨アクション
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
コメントコメント:
この関数は、以前に失敗したINT 21H関数呼び出しの後に、推奨される修正アクションを含む詳細なエラー情報を取得します。
INT 21H (0x21)
機能5AH(0x5Aまたは90) --> 一時ファイルを作成する
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、デフォルトまたは指定されたディスクドライブの現在のディレクトリまたは指定されたディレクトリに一意の名前のファイルを作成し、プログラムがファイルに後でアクセスするためにプログラムが使用できるハンドルを返します。ファイル用に生成された名前は、プログラムによって指定されたバッファにも返されます。
パス名の要素が存在しないか、ファイルがルートディレクトリに作成されていて、ルートディレクトリがいっぱいの場合、関数は失敗します。
INT 21H (0x21)
機能5BH(0x5Bまたは91) --> 新しいファイルを作成する
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、指定されたドライブまたはデフォルトのドライブの指定されたディレクトリまたはデフォルトのディレクトリにファイルを作成し、プログラムが指定されたASCIIZパス名のファイルに後でアクセスするために使用できるハンドルを返します。
同じ名前とパスのファイルがすでに存在するか、指定されたパスの要素が存在しないか、ファイルがルートディレクトリに作成されていて、ルートディレクトリがいっぱいであるか、ユーザーのアクセス権が不十分な場合、関数は失敗します。
INT 21H (0x21)
機能5CH(0x5Cまたは92) --> ファイル領域をロックまたはロック解除する
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、ファイルの指定された領域をロックまたはロック解除します。この機能は、ファイル共有モジュール(SHARE.EXEなど)がロードされていない限り使用できません。
INT 21H (0x21)
機能5DH(0x5Dまたは93) --> 予約済み
INT 21H (0x21)
機能5EH(0x5Eまたは94)、サブ機能00H(0x00)--> マシン名を取得する
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ関数は、ローカルコンピューターを識別するASCIIZ文字列のアドレスを返します。この関数呼び出しは、Microsoftネットワークが実行されている場合にのみ使用できます。
INT 21H (0x21)
機能5EH(0x5Eまたは94)、サブ機能02H(0x02)--> プリンタ設定文字列を設定します
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ関数は、特定のネットワークプリンターに送信されるすべてのファイルの前に送信される文字列を指定し、異なるネットワークノードのユーザーが同じプリンターで個別の動作モードを指定できるようにします。
INT 21H (0x21)
機能5EH(0x5Eまたは94)、サブ機能03H(0x03)--> プリンタ設定文字列を取得
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、特定のネットワークプリンタのプリンタ設定文字列を取得するために使用されます。
INT 21H (0x21)
機能5FH(0x5Fまたは95)、サブ機能02H(0x02)--> リダイレクトリストエントリを取得する
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能を使用すると、ローカル論理名をネットワークファイル、ディレクトリ、またはプリンタに関連付けるシステムリダイレクトリストを検査できます。この関数呼び出しは、Microsoft Networksが実行されていて、ファイル共有モジュールがロードされている場合にのみ使用できます。
INT 21H (0x21)
機能5FH(0x5Fまたは95)、サブ機能03H(0x03 --> デバイスをリダイレクトする
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
ローカルデバイス名をネットワーク名に関連付けることにより、ネットワーク全体のリダイレクトを確立します。この関数呼び出しは、Microsoft Networksが実行されていて、ファイル共有モジュール(SHARE.EXE)がロードされている場合にのみ使用できます。
INT 21H (0x21)
機能5FH(0x5Fまたは95)、サブ機能04H(0x04)--> デバイスリダイレクトをキャンセルする
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
このサブ機能は、ローカルデバイス名とネットワーク名の関連付けを削除することにより、以前のリダイレクト要求をキャンセルします。この関数呼び出しは、Microsoft Networksが実行されていて、SHARE.EXEなどのファイル共有モジュールがロードされている場合にのみ使用できます。
INT 21H (0x21)
機能60H(0x60または96)-->予約済み
INT 21H (0x21)
機能61H(0x61または97)--> 予約済み
INT 21H (0x21)
機能62H(0x62または98) --> プログラムセグメントを取得 プレフィックス(PSP)アドレス
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
コメントコメント:
この関数は、現在実行中のプログラムのプログラムセグメントプレフィクス(PSP)のセグメント(段落)アドレスを取得します。
INT 21H (0x21)
機能64H(0x64または100) --> 予約済み
INT 21H
機能65H(0x65または101) --> 拡張する 国情報
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
これにより、指定した国やコードページに関する情報が取得されます。情報バイトについて知るには、前に示した国際化テーブルを参照してください.
INT 21H (0x21)
機能66H(0x66または102) --> コードを取得または設定する ページ
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、現在のコードページを取得または選択します。
INT 21H (0x21)
機能67H(0x67または103) --> ハンドル数を設定する
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、現在のプロセスでハンドルを使用して同時に開くことができるファイルとデバイスの最大数を設定します。
INT 21H (0x21)
機能68H(0x68または104) --> コミットファイル
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、指定されたハンドルに関連付けられたMSDOSの内部バッファ内のすべてのデータをデバイスに物理的に書き込むように強制します。ハンドルがファイルを参照していて、ファイルが変更されている場合、ファイルのルートディレクトリエントリの日時スタンプとファイルサイズが更新されます。
INT 21H (0x21)
機能69H(0x69または105)-->予約済み
INT 21H (0x21)
機能6AH(0x6Aまたは106)-->予約済み
INT 21H (0x21)
機能6BH(0x6Bまたは107)-->予約済み
INT 21H (0x21)
機能6CH(0x6Cまたは108)-->拡張されたオープンファイル
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX =ファイル属性(ビットを組み合わせることができます。
開いている場合は無視されますビットを参照 有意差表。
DX =オープンフラグ
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
コメントコメント:
この関数は、指定されたASCIIZパス名の指定またはデフォルトのディスクドライブ上の指定またはデフォルトのディレクトリにあるファイルを開き、作成または置換し、プログラムがファイルに後でアクセスするために使用できるハンドルを返します。
パス名の要素が存在しないか、ファイルがルートディレクトリに作成されていて、ルートディレクトリがいっぱいであるか、ファイルが作成されていて、同じ名前で読み取り専用属性のファイルがすでに存在する場合指定されたディレクトリまたはユーザーのアクセス権が不十分な場合、機能は失敗します。