Почему gcc делает это при создании кода на ассемблере?

я играю с gcc -S, чтобы понять, как работает память и стек. Во время этих спектаклей я обнаружил несколько неясных для меня вещей.Не могли бы вы помочь мне понять причины?

  1. Когда вызывающая функция устанавливает аргументы для вызываемой, она использует movto espвместо push. В чем преимущество не использования push?

  2. Функция, которая работает со своими аргументами, расположенными в стеке, указывает на них как ebp + (N + offset)(где N — размер, зарезервированный для адреса возврата). Я ожидаю увидеть esp - offset, что более понятно. В чем причина везде использовать ebpкак фундаментальную точку? Я знаю, что они равны, но все же?

  3. Для чего эта магия в начале main? Почему espнужно инициализировать только таким образом?

    и особенно, 0xffffffff0
    

Спасибо,

8
задан zweibaranov 24 June 2012 в 06:46
поделиться