Cのインラインアセンブラ(86系)の紹介

(いまさらとは思いますが一応紹介させて下さい)

 

アセンブラを動かす環境は、

エミュレータやデバッガーなど

色々出回っていると思います。

 

ここでは、Windows上で

Microsoft Visual Studio

(無料ダウンロード可)

で、C言語が動かせる環境が

あることを前提としておきます。

(別のCコンパイラーでも同じ

かもしれません。)

 

C言語には、インラインアセンブラと

いうものがあり、簡単にアセンブラを

組込む事ができます。

 

面倒なことはCで書けば、すべてを

アセンブラで書くよりハードルが

下がると思います。

 

1~10までの合計(55)を計算する例です。

 

#include <stdio.h>

void main(void)

{

    short sum;        /* 1~10の合計(16bit) */

 

    __asm             /* 次の{}内がアセンブラ */

    {

        mov ax,0      ; axレジスタ(16bit)を0にする

        mov cx,1      ; cxレジスタ(16bit)を1にする

    L1:

        add ax,cx     ; ax = ax + cx (ax += cx;)

        inc cx        ; cx = cx + 1  (cx++;    )

        cmp cx,10     ; cxと10の比較

        jle L1        ; cx <= 10 なら L1へ

        mov sum, ax   ; sum = ax (sumはメモリ)

    }

    printf("1-10の合計 = %d\n", sum);    

    getchar();    /* キー入力待ち */

}

 

__asm {}がインラインアセンブラです。

(別のコンパイラーでは _ が1つ

または、無しだった記憶がありますが、

勘違いかもしれません)

 

WindowsのConsoleアプリケーション

(consoleアプリでコンパイルしたexeファイル)

は、実行が終了すると表示していたウインドウが

閉じてしまい、結果が分からなくなるので、

最後にキー入力待ちをしています。