見出し画像

MASM32アセンブラの使い方①

MASM32のインストール

http://www.masm32.com/download.htm

上記リンクよりMASM32 SDK Version 11 をダウンロード、ZIPファイルを解凍し install.exe を実行しインストールする。途中、ライブラリのリンク(ビルド)にはかなり時間がかかるが、成功すると「Installation success」という窓が表示される。

インストール完了後、 C:\masm32\bin への Path を通しておく。[スタート][コントロールパネル][システム][システムの詳細設定][環境変数][システム環境変数]のPathに ; をつけて追加する。またはコマンドラインで >path=%path%;C;\masm32\bin[CR]を実行する。

「Hello.asm」のビルド、実行

テキストエディタで以下のコードを作成し、Hello.asm として保存する。

;hello.asm
    include \masm32\include\masm32rt.inc
.code
start:
    print "Hello, Assembly Language!",13,10
exit
end start

コマンドプロンプトを開きソースコードを保存したディレクトリに移動し、

>\masm32\bin\ml /c /coff Hello.asm [CR]

画像1

でオブジェクトファイルが作られる。この後、リンカーを使い実行ファイルを作成し実行する。

>\masm32\bin\link /SUBSYSTEM:CONSOLE Hello.obj

画像2

一々コマンドラインに入力するのが面倒なのでバッチファイルを作る。

rem build.bat
\masm32\bin\ml /c /coff %1.asm
\masm32\bin\link /SUBSYSTEM:CONSOLE %1.obj

>build ソースファイル名(拡張子なし)[CR] 

で実行ファイルまで作成できる。バッチファイルはソースファイルと同じディレクトリに置いておかないと正常でない実行ファイルが出来てしまう。

画像3

このソースコード、どうも「アセンブリ言語らしくないなぁ」ということでマクロを使わない表記方法でソースコードを作りなおす。

;hello2.asm
;include \masm32\include\masm32rt.inc
    .486
    .model flat,stdcall
    option casemap:none
    include \masm32\include\masm32.inc
    include \masm32\include\kernel32.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\kernel32.lib
.code
    start:
    print "Hello, Assembly Language!",13,10
exit
end start

画像4

これをビルドし実行すると、

画像5

結果は同じになる。

演算するプログラム

文字列を表示するだけだと殆どマクロだけで記述できてしまい、アセンブラらしくないが、演算をするプログラムではレジスタを操作したり加算命令を実行するのでようやく”らしい”プログラムになる。1+2を実行するコードを作成してみる。

;addval.asm
    include \masm32\include\masm32rt.inc
.data
    msg db "1に2を加えた結果=",0
.code
start:
    print OFFSET msg
    mov eax,1
    mov ecx,2
    add ecx,eax
    print str$(ecx)
    print chr$(13,10)
exit
end start

EAXレジスタに1を、ECXレジスタに2を入れて加算命令を実行。結果はECXに入るので、それを表示する。print chr$(13,10)はキャリッジリターン 。

画像6

PART①はここまで。

この記事が気に入ったらサポートをしてみませんか?