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日(日)