インライン アセンブリにいくつかのセクションがある Windows 32 ビット プログラムを作成しています。このプログラムは、32 ビットおよび 64 ビット システムで実行することを想定しています。両方のシステム用に 32 ビット バージョンをコンパイルしています。
私の質問は、スタック幅が 4 バイト幅であると想定していることです。32 ビット プログラムを 64 Windows システムで実行すると、スタック幅は 4 バイトのままですか?
私のプログラムでは(これは簡略化されたバージョンです)スタックにいくつかの値をプッシュしています:
for (i=0;i<4;i++)
{
_asm
{
mov ebx,i ; push 0,1,2,3 on the stack
push ebx
}
}
後で、次のようなコードを使用して値を照会しています。
ii=0;
for (i=0;i<5;i++)
{
_asm
{
mov ebx,ii ; ii has 0, then 4, then 8 ...
mov eax,dword ptr [esp+ebx] ; peek values on the stack from the top
mov num1,eax
}
ii+=4; // here I am assuming stack width is 4 bytes
// -- do something with num1 --//
}