Я не понимаю, почему следующие строки используют movl
для передачи данных ниже указателя стека, созданного GCC.
movl -4(%ebp), %eax # -4(%ebp) <- local variable 1
movl 8(%ebp), %edx # 8(%ebp) <- first parameter
movl %edx, 8(%esp) # ??? WHY NOT: pushl %edx
movl %eax, 4(%esp) # ??? WHY NOT: pushl %eax
movl -8(%ebp), %eax # ??? WHY NOT: pushl -8(%ebp)
movl %eax, (%esp)
call athena
movl %eax, f
Я предполагаю, что этот код пытается передать 3 параметра для вызова функции. Но почему он не использует pushl
. Каково использование этого кода и как это работает?
movel
s будетsub %esp,xxx
, гдеxxx
- это размер передаваемых параметров? А затем, когда звонок возвращается вскоре после этого,add %esp,xxx
? - person lurker   schedule 26.04.2014-mpush-args
и-maccumulate-outgoing-args
в руководстве. Они также дают некоторые пояснения там. - person Jester   schedule 26.04.2014