我正在编写一个 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 --//
}