sample:
pushq %rbp
movq %rsp, %rbp
movl %edi, -20(%rbp)
movl $1, -16(%rbp)
movl $0, -12(%rbp)
movl $0, -8(%rbp)
cmpl $2, -20(%rbp)
让我们说输入值为 1 将 1 设置为 %rbp 或 %rsp
比 %edi 的价值是多少
sample:
pushq %rbp
movq %rsp, %rbp
movl %edi, -20(%rbp)
movl $1, -16(%rbp)
movl $0, -12(%rbp)
movl $0, -8(%rbp)
cmpl $2, -20(%rbp)
让我们说输入值为 1 将 1 设置为 %rbp 或 %rsp
比 %edi 的价值是多少
让我们一步一步来:
sample首先设置一个堆栈帧:pushq %rbp; movq %rsp, %rbpedi在堆栈上:movl %edi, -20(%rbp). rsp如果它是叶函数,则无需显式递减即可。movl $1, -16(%rbp); movl $0, -12(%rbp); movl $0, -8(%rbp).edi它将堆栈上的保存值-20(%rbp)与 2 进行比较。假设它基于该比较做了一些事情(可能其余代码是相关的),函数的输入必须是edi.另一种解决方法是AMD64 ABI,它指定rdi用于将第一个参数传递给函数。然后,您可以进一步推断第一个参数sample是一个 32 位宽的整数。