Ассемблерные извращения - натягиваем стек


Листинг 1 классический способ передачи стековых аргументов


Довольно расточительное (в плане процессорных тактов) решение, особенно если функция вызывается многократно. При этом операнды команды PUSH перегоняются из секции .text (находящейся в кодовой кэш-памяти первого уровня) в область стека, находящейся в кэш-памяти данных. Ну и на хрена гонять их туда и обратно, когда аргументы можно использовать непосредственно по месту хранения.

Усовершенствованный пример выглядит так:

 

.code

       MOV EBP, ESP

       MOV ESP, offset func_arg + 4

       CALL my_func

       MOV ESP, EBP

      

.data

       func_arg      DD 00h, 696h, 999h, 669h




Начало  Назад  Вперед