我正在尝试将以下汇编代码转换为 C 代码:
fct:
movl 4(%esp), %eax
cmpl $0,%eax
jg n
movl $-1,%eax
ret
n: movl $0,%ebx
movl %eax, %ecx
movl $0, %eax
movl $0, %edx
l: addl $2, %ebx
addl %ebx, %eax
addl $1, %edx
cmpl %ecx, %edx
jl l
ret
Run Code Online (Sandbox Code Playgroud)
因为我认为我可以很容易地翻译其中的大部分内容,所以我似乎找不到第一行(movl 4(%esp), %eax)的作用。4(%esp) 在这种情况下指什么?我知道 %esp 寄存器指的是堆中的最后一条指令,而 4(%esp) 指的是第二条指令。