为什么加入局部变量后,获得变量的地址多了8个字节?
;我用的是MASM6.15+WINDOWSXP
.386
.MODEL flat, stdcall
.STACK 4096
ExitProcess PROTO, dwExitCode:DWORD
.code
main PROC
push 11 ;压入参数11
push 12 ;压入参数12
call Gcd ;调用Gcd过程
INVOKE ExitProcess, 0
main ENDP
;------------------------------------------------------------------------------------------
; Name: Gcd
;-----------------------------------------------------------------------------------------
Gcd PROC
;LOCAL temp : DWORD
push ebp
mov ebp, esp
;如果没有定义局部变量temp
;这时堆栈应该是:
; N
; M
; return address
; ebp
;对不对?????
mov ecx, [ebp+4] ;get return address
mov ebx, [ebp+8] ;get m = 12
mov eax, [ebp+12] ;get n = 11
;如果定义了局部变量temp
;这时堆栈应该是:
; N
; M
; return address
; ebp
; temp
;对不对?????
mov temp, 0AAAAAAAAh
mov edx, [ebp-4] ;get temp value
;为什么定义了局部变量tmep后,这里要多加8个字节才能得到压入的参数
;也就是说此时的堆栈是:
; N
; M
; return address
; ? 这个值是0012FFF0 调试的时候看到的
; ? 这个值是77F764A6 调试的时候看到的
; ebp
; temp
;这是怎么回事
mov ecx, [ebp+12] ;get address
mov ebx, [ebp+16] ;get m
mov eax, [ebp+20] ;get n
pop ebp
ret 8
Gcd ENDP
END main