对堆栈指针进行AND运算

时间:2017-02-25 15:35:55

标签: c assembly 32-bit

我正在研究计算机系统考试复习问题,要求在程序中的各个点处进行堆栈指针偏移,并且我对如何设置堆栈帧感到困惑。我已经在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]  

1 个答案:

答案 0 :(得分:2)

如果你用一个从0x3开始的堆栈指针重复数学运算,你就会受到启发。

对齐。许多CPU类型需要对齐以获得最佳性能或SSE等矢量指令才能工作。