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]
でオブジェクトファイルが作られる。この後、リンカーを使い実行ファイルを作成し実行する。
>\masm32\bin\link /SUBSYSTEM:CONSOLE Hello.obj
一々コマンドラインに入力するのが面倒なのでバッチファイルを作る。
rem build.bat
\masm32\bin\ml /c /coff %1.asm
\masm32\bin\link /SUBSYSTEM:CONSOLE %1.obj
>build ソースファイル名(拡張子なし)[CR]
で実行ファイルまで作成できる。バッチファイルはソースファイルと同じディレクトリに置いておかないと正常でない実行ファイルが出来てしまう。
このソースコード、どうも「アセンブリ言語らしくないなぁ」ということでマクロを使わない表記方法でソースコードを作りなおす。
;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
これをビルドし実行すると、
結果は同じになる。
演算するプログラム
文字列を表示するだけだと殆どマクロだけで記述できてしまい、アセンブラらしくないが、演算をするプログラムではレジスタを操作したり加算命令を実行するのでようやく”らしい”プログラムになる。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)はキャリッジリターン 。
PART①はここまで。