64bit アセンブラに挑戦
私の visual studio 2010 は、以下のページを参考に
http://d.hatena.ne.jp/torutk/20100927/p1
64bit 化されているので 64bit アセンブラ(ml64.exe)がインストールされています。
それで 64bit アセンブラプログラミングに挑戦してみたくなりました。
まず、「ドキュメント ライブラリ」にフォルダ '64asm' を作り
そこにソースファイル test64.asm を以下のように作ります。
----
; サンプル x64 アセンブリー・プログラム
; Chris Lomont 2009 www.lomont.org
extrn ExitProcess: PROC ; システム・ライブラリーの外部関数
extrn MessageBoxA: PROC
includelib "user32.lib"
includelib "kernel32.lib"
.data
caption db "64びっと", 0
message db "いやっほーい", 0
.code
Start PROC
sub rsp, 28h ; シャドウ領域、スタックをアライメントする
mov rcx, 0
lea rdx, message
lea r8, caption
mov r9, 0
call MessageBoxA
mov ecx, eax
call ExitProcess
Start ENDP
End
; /entry:Start
; fastcall(新しい関数呼び出し規約)
; 引数はrcx、rdx、r8、r9、r10、r11
; 戻り値はrax
; 浮動小数点数の戻り値はxmm0
----
上のソースは
http://mbdev.hateblo.jp/entry/2013/05/14/212139
からコピーしたものです。(以下も参考にしました。)
そして同じ場所に以下の内容の 'test.bat' を作ります。(場合によってパスが違うかもしれません。)
----
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\ml64.exe" test64.asm /link /subsystem:windows /entry:Start
----
そして「コマンドプロンプト」(windows のバージョンによって違うようなので検索してみてください。私のは windows 7 です)を立ち上げて
cd "C:\Users\[ユーザー名]\Documents\64asm"
と入力してみてください。エクスプローラーで直接辿っても構いません。
dir と入力してみて、先に作った2つのファイルがあればOKです。
そこでコマンドプロンプトから test と入力してみてください。
LINK : fatal error LNK1104: cannot open file 'user32.lib'
と user32.lib がないと怒られてしまいます。
そこで "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64" から user32.lib を
64asm フォルダにコピーします。
そこでもう一度コマンドプロンプトから test と打ち込んで見てください。
今度は kernel32.lib がないと怒られてしまいます。
それでもういちど同じ場所からコピーしてきます。
そして test と入力してみてください。今度はうまくいったようです。
ためしに test64 と入力してみてください。メッセージボックスがあらわれるなら成功です。
あるいは test64.exe をクリックしてみてください。
付記:現在実行するとエラーが出るようです。目下調査中。
どうやら休止状態から復帰するとおかしくなるようです。
どうやら明示的にスタックエリアを指定してやればよいようだ。
---- .stack db 4096 dup (?)
----
という行を追加したらうまくいった。
コメント