我正在研究计算机系统考试复习问题,要求在程序中的各个点处进行堆栈指针偏移,并且我对如何设置堆栈帧感到困惑。我已经在32位和64位系统之间学习了几周的汇编,但我以前没有看到过指向堆栈指针的指令。
有人可以解释这个服务的目的是什么,第四条指令后%esp
的偏移是什么,我正确地计算%esp
?我已经用我认为在每条指令之后的偏移值来评论代码。
main:
0x0x0804848a <+0>: push %ebp ;-0x4
0x0x0804848b <+1>: mov %esp, %ebp
0x0x0804848d <+3>: and $0xfffffff0, %esp ;[-0x4, -0x13]
0x0x08048490 <+6>: sub $0x20, %esp ;[-0x24, -0x33]
0x0x08048493 <+9>: movl $0xa, 0x1c(%esp)
0x0x0804849b <+17>: movl $0xa, (%esp)
0x0x080484a2 <+24>: call 0x804841d <r> ;[-0x28, -0x37]
答案 0 :(得分:2)
如果你用一个从0x3开始的堆栈指针重复数学运算,你就会受到启发。
对齐。许多CPU类型需要对齐以获得最佳性能或SSE等矢量指令才能工作。