gpt4 book ai didi

c - 这个指令是什么意思(subl $20,%esp)?

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:31 26 4
gpt4 key购买 nike

C 代码是:

int rSum(int *Start, int Count)
{
if (Count <= 0)
return 0;
return *Start + rSum(Start+1, Count-1);
}

对应的汇编代码为:

.file "test98.c"
.text
.globl rSum
.type rSum, @function
rSum:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
cmpl $0, 12(%ebp)
jg .L2
movl $0, %eax
jmp .L3
.L2:
movl 8(%ebp), %eax
movl (%eax), %ebx
movl 12(%ebp), %eax
leal -1(%eax), %edx
movl 8(%ebp), %eax
addl $4, %eax
movl %edx, 4(%esp)
movl %eax, (%esp)
call rSum
leal (%ebx,%eax), %eax
.L3:
addl $20, %esp
popl %ebx
popl %ebp
ret
.size rSum, .-rSum
.ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
.section .note.GNU-stack,"",@progbits

我无法理解这条指令“subl $20, %esp”,为什么是 $20?

最佳答案

subl $20, %esp 从堆栈指针中减去 20 (esp)。这会在堆栈上分配 20 个字节的空间,可用于局部变量。

关于c - 这个指令是什么意思(subl $20,%esp)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13756321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com