Ассемблер - экстремальная оптимизация

Выделение памяти на стеке


На процессорах 8086/8088 существовала замечательная возможность— затолкать в стек аргумент-указатель с одновременным выделением памяти всего одной (!) однобайтовой (!) машинной командой PUSH ESP, которая сначала уменьшала значение ESP, а только потом заталкивала его в стек. То есть, в стек попадало уже уменьшенное значение ESP, что способствовало трюкачеству.

Рассмотрим конкретный пример — функцию, одним из аргументов которой является указатель на переменную, принимающую возвращаемый результат: f(int a, word

*x). Предельно компактный вызов (на 8086!) выглядел так:

       push sp       ; передаем указатель на x

с одновременным выделением памяти под сам x

       push si       ; передаем переменную a

       call f ; зовем функцию



Содержание раздела