■ プログラムを作る ■
前回はアセンブラ言語を使用して簡単な計算について説明しま
した。
ちょっと復習してみましょう。
●足し算(addition)を行なう時
MOV EAX, 5 ;EAXに5を格納
MOV EBX, 3 ;EBXに3を格納
ADD EAX, EBX ;EAX+EBXをEAXに格納
●引き算(sub)を行なう時
MOV EAX, 5 ;EAXに5を格納
MOV EBX, 3 ;EBXに3を格納
SUB EAX, EBX ;EAX−EBXをEAXに格納
●掛け算(multiple)を行なう時
MOV EAX, 5 ;EAXに5を格納
MOV EBX, 3 ;EAXに3を格納
MUL EBX ;EAX×EBXをEAXに格納
●割り算(division)を行なう時
MOV EDX, 0 ;EDXに0を格納
MOV EAX, 5 ;EAXに5を格納
MOV EBX, 3 ;EBXに3を格納
DIV EBX ;EAX÷EBXをEAXに格納
;余りをEDXに格納
今回はこれらを基にして実際に簡単なプログラムを作ってみる
事にします。
まず、プログラムを作成する為には「コンパイラ」、または
「アセンブラ」という物を用意する必要があります。
「コンパイラ」とは、C言語等で作成されたプログラムをプロ
セッサが理解できるように、機械語と呼ばれる物に変換してく
れるツールの事です。
「アセンブラ」とは、アセンブラ言語で作成されたプログラム
をプロセッサが理解できるように、機械語に変換してくれるツ
ールの事です。
両方ともプログラムを機械語に変換してくれるツールという事
では変わりはありませんが、「コンパイラ」は人が見て分かり
やすい言語である、高級言語を機械語に変換してくれるもので
ある、という点が異なります。
「アセンブラ」の方はアセンブラ言語という、プロセッサに固
有の言語を機械語に変換してくれるツールの事です。
今回はアセンブラ言語の講座なので、実際にアセンブラ言語を
使用してプログラムを作成してみたいのですが、いきなりアセ
ンブラ言語を直接作成すると難しく感じてしまうので、今回は
「インラインアセンブラ」を使用する事にします。
「インラインアセンブラ」というのは、C言語などの高級言語
のプログラムからアセンブラ言語を使用できるようにする物で
す。通常はCコンパイラに含まれています。
で、インラインアセンブラですがどれを使おうか悩みました。
過去にアンケートで持っているCコンパイラの種類を質問しま
した。
そのアンケート結果ですが、以下の様になりました。
コンパイラを持っていない人:36%
コンパイラを持っている人 :64%
どのコンパイラを持っているか?
BCC 33%
VisualC++ 33%
LSI-C 20%
その他 14%
という結果になりました。
持っているという方が6割以上もいらっしゃいました。
内訳としては、ボーランド社がフリーで提供しているBCC(Bor-
land C Compiler)とマイクロソフト社が高値で売り出している(^^;
VisualC++が同率。LSI-Cが少数、その他、GCCや聞いたことが
無いコンパイラ名を上げてくださる方もいらっしゃいました。
まず、フリーが魅力のBorland C Compilerですが、このコンパ
イラはインラインアセンブラをサポートしていないのです。
という事で残念ながら今回は使用不可です。
次にLSI-Cですが、これは16ビットモードで動作するコード
しか出力してくれないようです。
これも今回はやめておきましょう。
次にVisual C++ですが、これは非常に高価な物なので、使える
環境にある人が限られてしまいます。
私もVC++を持っているので出来ればこれを使いたかったのです
が、多くの方がこれを使用できる環境に無い、という事を考え
ると諦めざるを得ませんでした。
インラインアセンブラが使えて、インテルプロセッサの32ビ
ットのコードを出力出来て、更にフリーのCコンパイラ。
そんなに都合の良いコンパイラがあるわけありませんよね?
そういう事で今回は諦めましょう。
この講座はこれで終わります。
と言うわけにもいかないので、一生懸命探しました。(^^;
探したところ、まさにうってつけの物がありました。
Digital Mars という会社が配布しているコンパイラで、これ
はPentium4に対応する最新のコードを出力する事も出来るよう
です。しかも無料です。
Digital Mars のサイト
http://www.digitalmars.com/
● ●
●ダウンロードと解凍●
● ●
まずはダウンロード&解凍です。
1.下記サイトにアクセスします。
http://www.digitalmars.com/dmc/dmcpp.html
すると規約承認画面が出てきます。
未保障、未サポート。自己責任において使用する事を承諾
する旨の確認画面が出ます。(フリーソフトなので当然で
す。)
全て英語ですが頑張って読みましょう。
全ての規約を読んであなたにとって承諾出来る物であれば、
ありがたく承諾ボタンを押しましょう。
(一昔前まではこれらのソフトウェアは10万円以上した
物です。)
2.ダウンロードする。
いろいろなツールをダウンロードする画面が出ますが目移
りする事なく(目移りしても良いですが。(^^;)、「Dig-
ital Mars C/C++ Compiler Version 8.27」と書いてある
リンクをクリックして"dm827c.zip"をダウンロードしまし
ょう。(このページ作成時点ではVersion 8.27)が最新バー
ジョンです)
サイズは約3Mです。
もう1つ、「Utilities 」と書いてあるリンクもクリック
してダウンロードしておきましょう。
("dm812util.zip"というファイル名でダウンロードされ
ます。)
3.ダウンロードした物を解凍する。
ダウンロードした"dm827c.zip"をインストールしたい場所
に解凍します。
これで"dm"というフォルダが作成されたはずです。
"dm"フォルダ配下には"bin"というフォルダも出来ている
はずなので、ダウンロードしたもう1つのファイル"dm81-
2util.zip"の方はこちらに解凍しておきます。
これでダウンロードと解凍は完了です。簡単ですね。
● ●
●開発環境を作成する●
● ●
開発環境を作成すると言っても大した事はしません。
以下の手順を行なってください。
1."dm"フォルダ配下にフォルダを作成する。
エクスプローラ等で"practice"という名前のフォルダを作
成してください。
(今後はここにソースファイル等を格納していきます。)
2.環境変数設定パッチファイルを作成する。
新しく作成した"practice"というフォルダ配下にテキスト
エディタで"env.bat"というファイルを作成してください。
内容は以下の様に1行書いてください。
set path="c:\dm\bin";%path%;
 ̄
↑
ここでは"c:"となっていますが、例えば"dm"フォルダを
"c:\Program Files"配下に解凍したのであれば、
set path="c:\Program Files\dm\bin";%path%;
等と、環境に合わせて適宜書き換えてください。
3.コマンドプロンプトを起動する。
普通にコマンドプロンプトを起動してください。
その後、CDコマンドを使用して先ほど作成した"practice"
のフォルダまで移動してください。
cd c:\dm\practice
4."env.bat"ファイルを実行する。
コマンドプロンプト上で
env.bat
と入力してください。
これで環境設定完了です。
試しにコマンドプロンプト上で以下の様に入力してくださ
い。
sc
これで次の様に表示されるはずです。
Digital Mars Compiler Version 8.26n
Copyright (C) Digital Mars 2000-2001. All Rights Reserved.
Written by Walter Bright www.digitalmars.com
SC is a one-step program to compile and link C++, C and ASM files.
Usage ([] means optional, ... means zero or more):
・
・
・
・
・
上記の様に表示されれば環境設定は正常完了です。
複数ページ表示されるので適当なキーを押して改ページし
てください。
上の様に表示されない方は"env.bat"ファイルの中身が正
しいか確認してください。
今後はコンパイラ、アセンブラ等の作業はここで設定したコマ
ンドプロンプト上で行なう事になります。
● ●
●C言語でプログラムを作成する●
● ●
1.先ほど作成した"practice"フォルダ配下に以下の物をテキ
ストエディタで作成してください。
ファイル名は"test1.c"としておいてください。
─↓ここから──────────────────────
#include <stdio.h>
int main(void);
int main()
{
printf("Hello\n");
return 0;
}
─↑ここまで──────────────────────
これは恐らく世界で1番単純なプログラムでしょう。
ただ単に"Hello"という文字列を表示するだけのプログラ
ムです。
2.ビルドして実行ファイルを作成する。
プログラムを実行形式ファイルに変換する事を「ビルド」
とも言います。
コマンドプロンプト上で以下の様に入力してください。
sc test1.c
これで"test1.exe"という実行形式ファイルが作成されま
す。
3."test1.exe"を実行する。
コマンドプロンプト上で以下の様に入力してください。
test1.exe
これでプログラムが走り、"Hello"と表示されたはずです。
初めてプログラムを作成した、という方。
おめでとうございます。あなたもプログラマーの仲間入り
です。
4.サブルーチンを作成する。
次にサブルーチンを作成します。
テキストエディタで"test1.c"ファイルを開き、メイン関
数を以下の様に変更してください。
─↓ここから──────────────────────
int main()
{
int a=5;
int b=3;
int result=0;
result = sub(a, b);
printf("result:%d\n", result);
return 0;
}
─↑ここまで──────────────────────
追加部分の初めの3行はサブルーチンを呼び出す為のデー
タを設定している部分です。
データ名は何でも良いのですが、ここでは"a"と"b"と"re-
sult"という3つのデータを使用する事にします。
設定する値も適当に設定しています。
次に、実際にサブルーチンを呼び出す行を追加しています。
result = sub(a, b);
これは"sub"という名前のサブルーチンを呼び出して、返
ってきた値を"result"に格納するという処理を行ないます。
最後にサブルーチンから返ってきた値を表示する処理を行
なっています。
printf("result:%d\n", result);
メイン関数の変更は以上で終了です。
次にメイン関数の下に次の様にサブルーチンの処理を追加
してください。
─↓ここから──────────────────────
int sub(int a, int b)
{
_asm{
mov eax, a
mov ebx, b
add eax, ebx
}
}
─↑ここまで──────────────────────
これはC言語からアセンブラ言語を記述する為に「インラ
インアセンブラ」を使用しています。
ちなみにアセンブラ言語では大文字と小文字が区別される
ことはありません。ここら辺は他の言語でプログラムを書
く場合と比べると多少書きやすいかもしれません。
このサブルーチンがどんな処理を行なっているかは、ここ
までの講座をご覧になった方ならばすぐに分かるはずです。
分からないという方はこの講座を最初から読み直してみて
ください。
academy002-037.htm
5.ビルドして実行ファイルを作成する。
コマンドプロンプト上で以下の様に入力してください。
sc test1.c
これで"test1.exe"という実行形式ファイルが作成されま
す。
6."test1.exe"を実行する。
コマンドプロンプト上で以下の様に入力してください。
test1.exe
これでプログラムが走り、今度は"result:8"と表示され
たはずです。
これは"a"と"b"の足し算を行なうプログラムで、実際に計
算を行なう部分はアセンブラ言語を使用して記述された物
です。
ここまで出来れば、後は引き算、掛け算、割り算も容易に作れ
るはずです。
今回はCとアセンブラの環境設定を行い、簡単な足し算プログ
ラムを作成してみました。
今回作成したプログラムが今後作成するプログラムの基本形と
なる物です。
後はこれをいろいろと応用していきます。
次回はループ命令を説明する予定です。