我正在使用Irvine32处理32位MASM程序集。最近,我学习了如何使用EBP / ESP从函数中的堆栈访问值,但是我的程序要求函数的输出在返回时存储在堆栈的顶部(这是我的意思,将值2nd存储到函数的顶部)。堆栈,返回之后,该值将位于顶部。)
对于如何从这里最有效地解决此问题,我感到非常困惑。我一直在寻找不同的解决方案,但不确定如何解决该问题。
我曾考虑过将值压入堆栈的顶部,并通过临时存储它们来交换值,但是当我尝试实现该功能时,它没有用,我认为这可能是一个过于复杂的解决方案简单的问题。
main PROC
mov eax, 0
mov ebx, 0
mov edx, 0
push OFFSET aVal
push OFFSET bVal
push OFFSET cVal
call testFunc
pop eax ; Ideally, this would be the same EAX value as the function below, but I don't know how to store it
; on the stack from the function below without overriding the return value
call WriteInt
exit
main ENDP
testFunc PROC
push esi
mov esi, esp
mov eax,[esi + 16]
add eax,[esi + 12]
sub eax,[esi + 8]
pop esi
ret
testFunc endp
我知道,当惯例要求我应该使用其他寄存器时,我正在使用ESI寄存器,但是我的教授也要求这样做。