今、私たちは、完全なアセンブリ言語のプログラムを書き、コンパイルし、オペレーティングシステムで実行して、コンパイルと(.exeなど)の実行可能ファイルにそれらをリンクしてプログラムをリンクするために始めます。
ソースから4.1の手順は、の実装に書き込みます
....
実行可能ファイルの記述情報に従ってシステムを動作させる、実行可能ファイルのマシンコードとデータがメモリにロードされ、(例えば、CS設定とおり実行される最初の命令を指すようにIP)を、それを初期化し、その後、CPUによって実行されます
4.2ソースコード
1.ディレクティブ:
アセンブラ言語のソースプログラムでは、2つの命令を含み、1は1つが指示され、アセンブリ命令です。組立説明書には、コマンドに対応するマシンコードされている、該当するマシンコードをディレクティブない、最終的にはCPUによって実行されません。
指令は、コンパイラによって実行された命令です。
4.1プログラムは、3つのディレクティブを示します。
1つのXXXセグメント、XXX終了
ペアが使用され、このディレクティブ一セグメントのセグメント記述の開始は、セグメント記述の終了を終了します
セクションでは、フォーマットを使用して、識別するための名前を持っている必要があります。
セクション名:セグメント
セクション名:終了
アセンブラは、複数のセグメントから構成され、これらのセグメントは、スタック領域としてコード、データ、または使用を格納するために使用されます。ソースプログラム中のすべての情報は、コンピュータによって処理される。命令は、データは、スタックは、異なるセグメントに分割されています。
意味のあるアセンブラ命令は、少なくとも一つのセグメント、コードを格納するために使用されるセグメントを有していなければなりません。
2エンド
最後の終了タグは、プログラムのコンパイルであります
最後と端を混同しないでください
3仮定
我々は後に、プログラムセグメントと特定の目的に関連した関連するセグメント・レジスタであり書き込まれると仮定する。
2.「プログラム」のソース
ソース・ファイルのすべての内容は、ソースと呼ばれることもあるした後、最終的なソースプログラムは、コンピュータ、命令またはデータ処理によって実行されることに留意されたい、プログラムとなります。
3.ラベル
ソース外側アセンブリ命令とディレクティブに加えて、プログラムiは、そのような数字「codesg」などのいくつかの、アセンブラ、このセグメントの名前は、最終的に、コンパイルされるセグメントアドレスをプログラム処理部に連結されました。
4.プログラムの構造
リターン
私たちの最初のプログラムは、それを得るためにどのようにそれを実行し、実行可能ファイルに格納されているマシンコードに接続した後、コンパイルされたソースコードの形で組み立て説明書、中に存在しているのですか?
私たちは、簡単に上のDOS(シングルタスクのオペレーティング・システム)に基づき、以下は、この問題を議論します。
実行可能ファイルのプログラムP2、あなたが実行中のプログラムP1を持っている必要があり、P2はP2を実行することができ、P2にCPUの制御の後、実行可能ファイルからメモリにロードされます。P2が実行を開始した後に、P1が停止しました。P2の実行が終了するとき、プログラムを実行することを可能にするために、CPUの制御に戻す必要があります。
我々は戻っこのプロセスを呼び出します。だから、どのようにそれを返すには?プログラムを返すために、ブロックの末尾に追加する必要があります。
プログラム4.1の2つの命令を見てください:
MOV AX、4c00H
INT 21H
これらの命令実装機能は、リターンします。
この段階では、単にこれら2つの命令を使用すると、プログラムの最後にリターンを達成することができることを知っています。
6.構文エラーと論理エラー
コンパイル時にエラーが発見されたコンパイラの構文エラーでプログラム
実行時に発生するエラーは、論理的なエラーです
4.3ソースコードを編集します
4.4コンパイラ
コンパイルの過程で、我々はソースフォルダで入力を、提供することに注意してください。一方、他の2だけの中間、ターゲットファイル(OBJ)、ファイルのリスト(一覧)、クロスリファレンスファイル(.crf)、これらの3つの出力ファイル、ファイルを取得するために私たちの究極の目標の結果である:3つの出力まで得ることができますその結果、当然のコンパイルでは、我々はファイルのこれらの2つのタイプについては説明しません。
4.5接続
役割の接続:
本を参照してください。
プロセス接続のために、実行可能ファイルは、我々が取得したい最終的な結果であることに注意してください。
コンパイルおよびリンクに簡略化して4.6
4.7 1.EXE実行
4.8実行可能プログラムがメモリにロードされ、それを実行しますか?
セクション4.7の実装の過程で1.EXE見(関連の問題)
(1)プロンプトで「C:MASM \」「1」に、実行可能ファイルバックの名前を入力し、Enterキーを押します、そして、4.1を考えてください
(2)プログラムは1.EXEに実行されます
(3)実行、リターンの終わり、再びプロンプトを表示「C:masmm \」を、4.2を考えてください
問題4.1
この時点で、メモリにロードされ1.EXEプログラムで実行中のプログラムがあり、これは、プログラムが実行されている何ですか?それがメモリにロードされたプログラムの後、どのようにプログラムの実行を作るには?
問題4.2
実行した後、どこに戻りますか?
あなたがDOSのより深い知識を持っている場合、それは答えに簡単です。あなたが理解していない場合は、次のセクションを参照してください(ブックを参照してください)
DOSプログラムcommand.comがあり、このプログラムはシェルDOSシステムでDOS、中にコマンドインタープリターとなっています
DOSが起動すると、command.comを実行し、他の重要な初期化を完了するために
DOSでは、コマンド処理の各種入力:コマンドまたはプログラムは、ファイル名で実行されます
質問は今提案質問4.1と4.2に答えてください。
(1):DOSで直接1.EXEを行う場合、コマンドが実行され、プログラムがメモリにロードされます1.EXE
(2)CPU CSを設定するコマンド:IPは、プログラムが実行されるように、プログラム(すなわち、番組エントリ)の最初の命令を指すように。
(3)実行後、コマンドに戻り、CPUは、コマンドを実行し続けます
実行するために書かれた手順からコンパイル:
実装プロセス4.9プログラムの追跡
単純なミスのために、慎重に確認してくださいソースを見つけることができ、かつ深く隠されたエラーのために、それを見つけるのは容易になりますプログラムトレース分析の実行に必要です。
今、私たちは、知っているコマンドはプログラムの実行可能ファイルからメモリにロードされたときにDOSでプログラムを実行し、実行することを可能にします。コマンドをあきらめ、プログラムにIPエントリポイント:操作手順の入り口にIPポイントは、行を完了することで、いつCS:しかし、我々は、プログラムのロードコマンドので、プログラムの命令の実行によってセットCSを指示を見ることができませんCPUの制御、CPUはすぐにプログラムが終了するまで、プログラムを実行し始めました。
プログラムを実行する過程を観察するためには、デバッグを使用することができ、デバッグプログラムはCSセット、メモリにロードすることができます。プログラムにIPエントリポイントを、しかし、デバッグが単一に関連するコマンドので、我々は、デバッグを使用することができ、CPUの制御を放棄しません。プログラムを通じてステップは、各命令の実行結果を表示します。
プログラムは何のメモリにロードされますか?どのように我々は知っていますか?
ここでは、DOSシステムでのプログラムのロード処理.EXEファイルを説明する必要があります。図4.20
デバッグ、デバッグ負荷1.EXEをロードするためのコマンド:DOSでは、「デバッグ1.EXE」あなたは1.EXE追跡にデバッグを実行すると、逐次プログラムがロードされているを使用して。シーケンスを返します:デバッグ1.EXEからのリターンは、デバッグコマンドから戻ります。
コンパイル、リンク、トレース、3プログラミング実験
PSPのコンテンツ:256のバイト
プログラム内容の実際の内容はPSP後
なぜCS:IPとDSと同じ内容?
図4.20
在该内存区的段地址存入ds中,初始化其他相关寄存器后,设置CS:IP指向程序的入口!!