分かりやす〜い
コンピュータ技術情報

TOPに戻る
▼Processor
簡単なアセンブラ言語
┣ 高級、低級の意味と
┃ レジスタ、mov、add

┣ 計算を行う
┣ プログラムを作る
┣ loop命令
┣ Indexレジスタの
┃ 役割とレジスタの
┃ 大きさ
┣ リピートプリフィック
┃ ス・ストリング命令

┣ inc・dec命令
┣ MMX技術
┣ MMXレジスタ
┣ MMX・SIMD・SSE
┣ CMP・JMP命令
┣ 関数とパラメータ
┣ スタック領域
┣ ESPレジスタ
┣ セグメント・
┃   call・ret

┣ コードファイルを作る
┣ コードファイル説明1
┣ コードファイル説明2
┗ マイクロコード

Copyright(C) 2001-2002.ugpop. All rights reserved.




■デジタル用語辞典:
■ プログラムを作る ■

前回はアセンブラ言語を使用して簡単な計算について説明しま
した。

ちょっと復習してみましょう。

●足し算(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とアセンブラの環境設定を行い、簡単な足し算プログ
ラムを作成してみました。

今回作成したプログラムが今後作成するプログラムの基本形と
なる物です。

後はこれをいろいろと応用していきます。
次回はループ命令を説明する予定です。



▲このページの上へ

←前に戻る    ▲このページの上へ    続きを読む→

▲このページの上へ

▲このページの上へ