x86 assemby指令mov [esp + 0ACh + var_A4],eax

时间:2018-01-30 07:14:51

标签: assembly x86

我遇到了x86汇编指令,

mov     [esp+0ACh+var_A4], eax

无法理解。正如我猜测的那样,它将eax寄存器中的值保存到esp+0ACh+var_A4所代表的地址中。不确定。 我能够理解以下汇编指令。很明显,

mov     eax, [ebp+0]

ebp+0加载到eax注册表中。如果我错了,请纠正。

1 个答案:

答案 0 :(得分:2)

请注意你有这样的事情:

typedef struct my_Struct {
   u_int8  x;
   u_int8  y;
   u_int16 z;
   u_int32 a4;
}

#define offs_x 0
#define offs_y 1
#define offs_z 2
#define offs_a4 4

myStruct myArray[SIZE];

并且您想要访问myArray [21] .a4

在汇编程序中没有结构,也没有数组。你必须自己计算myArray [21] .a4的位置。数组只是一个内存块:

0000: myArray[0].x
0001: myArray[0].y
0002: myArray[0].z #1
0003: myArray[0].z #2
0004: myArray[0].a4 #1
0005: myArray[0].a4 #2
0006: myArray[0].a4 #3
0007: myArray[0].a4 #4
0008: myArray[1].x
0009: myArray[1].y
...

让我们假设EBP指向myArray

每个元素长度为8个字节(1 + 1 + 2 + 4个字节),因此myArray [21]处于EBP + 21 * sizeof(my_Struct)= EBP + 172(= EBP + ACh)和myArray [21] EBP + ACh + offs_a4的.offs_a4。

最后:要阅读myArray [21] .a4,你必须

mov eax, [EBP + ACh + offs_a4]

这也适用于ESP(ESP表示你正在处理局部变量,它的内存通常已经保留在堆栈中)在一个被调用的函数中,并且0ACh是偏移到此变量