与x86和x86-64汇编中的stackpointers的区别

时间:2015-07-05 20:35:30

标签: assembly x86 x86-64 intel

我将clang编译的代码的输出与-m32进行了比较,并且没有,并且不禁注意到64位部分缺少堆栈指针寄存器的递增和递减。每种方法。

32位:

main:                                   # @main
    push    ebp
    mov ebp, esp
    sub esp, 8                          # here
    mov eax, 0
    mov dword ptr [ebp - 4], 10
    mov dword ptr [ebp - 8], 5
    add esp, 8                          # and here
    pop ebp
    ret

64位:

main:                                   # @main
    push    rbp
    mov rbp, rsp
    mov eax, 0
    mov dword ptr [rbp - 4], 10
    mov dword ptr [rbp - 8], 5
    pop rbp
    ret

使用clang 3.5.1编译并且未启用任何优化。

为什么呢?与{32}对应物相比,x86-64在堆栈方面有何不同? 我还注意到,有些编译器,即gccicc,有时会减少堆栈指针,但在离开方法后永远不会递增它们?或者有时需要更多? gcc从堆栈中获取16 bytes个步骤。 icc做了一些完全疯狂的事情。

0 个答案:

没有答案