« クリックイベントのプロパティ?一覧 | メイン | mllink$ 「64bit アセンブラに挑戦」の続き »

2016年3月23日 (水)

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

という行を追加したらうまくいった。

トラックバック

このページのトラックバックURL:
http://app.synapse-blog.jp/t/trackback/563545/33776127

64bit アセンブラに挑戦を参照しているブログ:

コメント

コメントを投稿