最近我看到了一个小的汇编代码,但是我不清楚需要增加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 )