LEA指令返回间接操作数的偏移地址。由于间接操作数可能使用一个或多个寄存器,因此其偏移值是在运行时计算的。
void makeArray( ){ char myString[30]; for(int i = 0;i < 30;i++) myString[i] = '#'; }
虽然数组有30字节,但按4字节对其,ESP减去了32。
makeArray PROC push ebp mov ebp,esp sub wsp,32 lea esi,[ebp-32] mov ecx,30 L1: mov BYTE PTR [esi],'#' inc esi loop L1 add esp,32 pop ebp ret makeArray ENDP
使用OFFSET操作符获取堆栈参数的地址是不可能的,因为OFFSET只能获取在编译时就已经知道的地址。
lea esi,FFSET [ebp-32] ;错误
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206161.html原文链接:https://javaforall.net
