为什么需要在ESP寄存器中增加8个字节?

时间:2018-11-22 22:37:15

标签: assembly x86 calling-convention

最近我看到了一个小的汇编代码,但是我不清楚需要增加esp寄存器的原因。

请查看以下代码:

      <div class="form-actions">   
                    <button type="submit" class="btn btn-success">Add</button>
                      <a class="btn" href="index.php">Back</a>
                    </div>

问题: a)在“ .section .data values: .int 21,15,23,44,1,2,54,24,33,2 output: .asciz "The number is %d\n" .section .text .globl _start _start: nop movl %9,%edi loop: pushl values(,%edi,4) pushl output call printf add $8,%esp dec %edi jnz loop movl $1,eax movl $0,%ebx int $0x80 ”(pushl values(,%edi,4)等于9)和“ %edi”之后,有“ pushl output”和“数字为2”在堆栈中,总字节数应该为4 + 18 = 22字节。为什么在“ %d\n”之后增加8个字节的增量?

b)是否需要在esp寄存器中增加8个字节,该位置 call printf应该指向?(我们假设在%esp ...之前,esp的地址为N,在堆栈中按下“ 2”之后,esp指向的位置为N-4 )

0 个答案:

没有答案