ホーム > プログラミングメモ > はじめてのWin64アセンブラ
 

はじめてのWin64アセンブラ

Visual Studio 2005(以下、VS2005)を使って簡単なアセンブラ・プログラミングをしてみましょう。 64ビットでも簡単にアセンブラが使えることをお確かめください。 なおVS2005はx64版Windowsだけでなく従来の32ビット版Windowsでも動作します。 x64用のコンパイル、アセンブル等も32ビット版Windows上で行えます。 ただし完成したEXEファイルを実行するには、x64版Windowsが稼動しているマシンが必要になります。

環境設定

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

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

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

【kasan64.c】
#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); }

【kasan64asm.asm】
.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日(火)

Copyright(C) 毛流麦花
 
64ビットCPU(AMD64+EM64T)でアセンブラ