The MASM Forum
64 bit assembler => UASM Assembler Development => Topic started by: 2B||!2B on August 16, 2021, 10:37:56 AM
-
If a procedure has no LOCAL, it will not restore the stack from EBP.
Example of procedure with LOCAL
TESTPROC proc
LOCAL Dummy:DWORD
XOR EAX,EAX
ret
TESTPROC endp
PUSH EBP
MOV EBP,ESP
ADD ESP,-4
XOR EAX,EAX
MOV ESP,EBP
POP EBP
RETN 4
Removing LOCAL Dummy:DWORD would also make the procedure uses no MOV ESP,EBP before RET.
PUSH EBP
MOV EBP,ESP
XOR EAX,EAX
POP EBP
RETN 4
Is this the expected behavior or this is a bug?
-
Expected behaviour. Masm and Watcom assemblers may differ slightly, e.g. using a leave before returning.
-
I didn't know this until recently. I have used few PUSH's without re-balancing the stack and it was working with UASM v2.48 if I remember correctly. Must've been added recently...
-
I didn't know this until recently. I have used few PUSH's without re-balancing the stack and it was working with UASM v2.48 if I remember correctly. Must've been added recently...
Check your non-volatile registers (esi edi ebx) saved via uses :cool: