|
▼ひよひよさん:
> とにかく MASM for AMD64 はアレコレ擬似コード周りが変更になっているのですが、資料が少なく(MSDN 以外に見つからない)困っています。最終的にはスタックを介した引数渡しができると良いとは思うのですが...
呼び出し時のパラメータの受け渡しに関する資料を見つけました。その名も``Calling Convention for AMD 64-Bit Environments'' (@http://msdn.microsoft.com/library/default.asp?url=/library/en-us/kmarch/hh/kmarch/64bitamd_7qqv.asp)。随所に現れる``[This is preliminary documentation and subject to change]''が泣かせます。
これに拠ると``Integer values are passed (in order left to right) in RCX, RDX, R8, and R9 registers. The caller passes arguments five and above onto the stack.''だそうです。大学のHP-UXなマシンとそっくり。多分``Integer values''てのは64ビットなんだろうなあ。
取り敢えず
---- ここから ----
<pre><code>
DWORD cpuid(DWORD dwOP, DWORD *lpAX, DWORD *lpBX, DWORD *lpCX, DWORD *lpDX)
{
if (dwOP == 0) {
*lpAX = (DWORD)lpAX;
*lpBX = (DWORD)lpBX;
*lpCX = (DWORD)lpCX;
*lpDX = (DWORD)lpDX;
return 1;
} else {
*lpAX = (DWORD)0x00584145;
*lpBX = (DWORD)0x00584245;
*lpCX = (DWORD)0x00584345;
*lpDX = (DWORD)0x00584445;
return -1;
}
}
/* ``QWORD''てのを64ビットを表す型に変更してくれ */
QWORD rdtsc()
{
return 0x0123456789abcdef;
}
</code></pre>
---- ここまで ----
てのをコンパイルしてアセンブリ言語コードを吐いてもらえないでしょうか。
|
|