小编Lol*_*ano的帖子

以 x86 汇编语言返回值

我目前正在学习 x86 汇编语言(我正处于课程的开始阶段),并且在理解堆栈在一个特定情况下的工作方式时遇到了一些问题。

假设我有这个代码:

double(entier n) { return n + n; }
Run Code Online (Sandbox Code Playgroud)

我试图将其转换为 x86 代码,结果是这样的:

push ebp #save old pointer stack
mov ebp, esp #put new pointer stack
mov ebx, dword[ebp + 8] #get argument n and put it in ebx
add ebx, dword[ebp + 8] #add n to ebx 
Run Code Online (Sandbox Code Playgroud)

但是后来我完全被阻止了,无法找到如何返回ebx. 我在互联网上找到了一个解决方案,如下所示:

mov [ebp + 12], ebx
pop ebp
ret
pop ebp
ret
Run Code Online (Sandbox Code Playgroud)

我不明白它是如何工作的。不是ebp+12第二个参数的值吗?(就我而言,没有)。pop 用于移动esp指针,但为什么在这种情况下我们需要 2 pop 和 2 return?是否只是删除函数声明期间使用过的值?

x86 assembly

1
推荐指数
1
解决办法
5288
查看次数

标签 统计

assembly ×1

x86 ×1