はじめてのWin64アセンブラ

Visual Studio 2005(以下、VS2005)を使って簡単なアセンブラ・プログラミングをしてみましょう。64ビットでも簡単にアセンブラが使えることをお確かめください。

(本記事の初稿は2005年です。64ビットCPUが普及した現在でも有用な内容と思われるので、そのままの内容で公開します。)なおVS2005はx64版Windowsだけでなく従来の32ビット版Windowsでも動作します。x64用のコンパイル、アセンブル等も32ビット版Windows上で行えます。ただし完成したEXEファイルを実行するには、x64版Windowsが稼動しているマシンが必要になります。

■環境設定
VS2005を使って64ビット用のプログラミングを行うには、Professional Edition以上のVS2005が必要であり、
さらにインストール時にはカスタムインストールを選び、64ビット関連のコンパイラがインストールされるように設定する必要があります。デフォルトではインストールされません。

プロジェクトの新規作成で「コンソールアプリケーション (Win32)」を選びます。「Win32アプリケーションウィザード」の「アプリケーションの設定」では「空のプロジェクト」にチェックを入れ、ひとまずウィザードを完了させます。

「ソリューション エクスプローラ」で「ソース ファイル」を右クリックし、「追加->新しい項目…」を選び、以下の2ファイルを追加します。

#include <stdio.h>

unsigned _int64 kasan(unsigned _int64, unsigned _int64);

void main(void) {
unsigned _int64 i0,i1;
unsigned _int64 sum;

i0=4294967295; // 符号無32ビット整数の最大値
i1=1000;
sum=kasan(i0,i1);
printf("%I64u + %I64u = %I64u\n",i0,i1,sum);

}

.code

kasan PROC
 mov R10, RCX ; 1番目の引数(=i0)
 add R10, RDX ; 2番目の引数(=i1)を加算
 mov RAX, R10 ; 呼び出し側に結果を返す
 ret
kasan ENDP

end

Win64(AMD64)用のビルドを行うためには、ソリューションプラットフォームを切り替える必要があります。プルダウンメニューで「ビルド->構成マネージャ」を選びます。「アクティブ ソリューション構成」「アクティブ ソリューション プラットフォーム」「プロジェクトのコンテキスト」の3項目があります。「アクティブ ソリューション プラットフォーム」をクリックし、「<新規作成…>」を選びます。「新しいプラットフォームの入力または選択」で「Win64 (AMD64)」を選び、OKボタンを押します。「構成マネージャ」のダイアログを閉じます。

次に、アセンブリコードのアセンブル方法をVS2005に教えてあげます。「ソリューション エクスプローラ」でkasan64asm.asmを右クリックしてプロパティを出し、「構成プロパティ->カスタム ビルド ステップ->全般」で以下のように入力します。なお「構成」はダイアログ左上のリストボックスで切り替えます。

【構成:Debug】
コマンドライン:ml64 -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
説明:アセンブル中です...
出力ファイル:$(IntDir)\$(InputName).obj

【構成:Release】
コマンドライン:ml64 -c "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
説明:アセンブル中です...
出力ファイル:$(IntDir)\$(InputName).obj

次にリンカの設定を行います。必ずしも設定しなければならないわけではないようですが、念のため行います。「ソリューション エクスプローラ」でプロジェクト名を右クリックしてプロパティを選びます。(「ソース ファイル」や「ヘッダー ファイル」の1階層上にあるのがプロジェクト名です。)「構成プロパティ->リンカ」の下にある項目を以下のように設定します。

【システム】
サブシステム:コンソール (/SUBSYSTEM:CONSOLE)

【詳細】
対象コンピュータ:MachineAMD64 (/MACHINE:AMD64)

準備はこれで終わりです。

■ビルドそして実行

プルダウンメニューで「ビルド->ソリューションのビルド」を選び、ビルドします。

------ ビルド開始: プロジェクト: kasan64, 構成: Debug Win64 (AMD64) ------
アセンブル中です...
 Assembling: d:\Visual Studio\Projects\kasan64\kasan64\kasan64asm.asm
Microsoft (R) Macro Assembler (x64) Version 8.00.40607.16
Copyright (C) Microsoft Corporation.  All rights reserved.
コンパイルしています...
kasan64.c
リンクしています...
マニフェスト ファイルをマージしています...
ビルドログは "file://d:\Visual Studio\Projects\kasan64\kasan64\amd64\Debug\BuildLog.htm" に保存されました。
kasan64 - エラー 0、警告 0
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========

EXEファイルは、プロジェクト名のディレクトリ内にあるamd64ディレクトリの下にあるdebugディレクトリかreleaseディレクトリにあります。x64版Windowsマシンでコマンドプロンプトを起動して実行すると、以下のようになります。

E:\asm64>kasan64
4294967295 + 1000 = 4294968295

E:\asm64>

起草日:2005年1月4日(火)(www.marbacka.net内の別のサイトで公開)
最終更新日:2017年2月19日(日)

スポンサーリンク