Visual Studio, адресация к локальным данным

Тема в разделе "WASM.ASSEMBLER", создана пользователем sysexit, 26 сен 2011.

  1. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    По какому принципу VS выбирает способ адресации (ESP, EBP), просматривая программы, видно отдельное использование того и другого. Зависимость пока не могу понять
     
  2. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    sysexit
    Так называемые ESP-based frames - один из вариантов оптимизации кода компилятором, задается
    соответствующими параметрами. Все переменные, включая параметры вызова ф-ции адресуются относительно ESP,
    EBP освобождается под любые другие цели.
     
  3. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Использование EBP по сравнению с ESP при прочих равных условиях сокращает размер кода.
    В зависимости от настроек оптимизации выбор в ту или иную сторону делается по разным причинам:
    1. Оптимизация по размеру.
    ESP будет использоваться, если выделение локальной переменной и взаимодействие с ней вместо освобождения регистра EBP приведёт к увеличению размера кода. При использовании локальных переменных вместо регистров код растёт потому, что команды работы с памятью, как правило, "длиннее" команд работы с регистрами.
    2. Оптимизация по скорости.
    ESP будет использоваться в двух случаях:
    2.1. Если не хватает регистров, т.е. в любой более-менее сложной функции.
    2.2. Если функция очень маленькая и использование EBP приведёт к увеличению размера кода, что связано с необходимостью настройки стекового фрейма при использовании EBP.