компиляция в Linux и Windows

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

компиляция в Linux и Windows

Сообщение Seenkao »

Я не совсем понял, почему в Linux компилируемый код (в ассемблерном виде) производит операции:
lea ...
callq

а в Windows:
push ...
call

чем это обосновано? Разным способом вызовов процедур в системах?
Аватара пользователя
Pavia
постоялец
Сообщения: 290
Зарегистрирован: 07.01.2011 11:46:51

Сообщение Pavia »

Скорее тут дело 64 бит ЦПУ против 32 битного ЦПУ.
А так да в разных ОС стандарты ABI разные.

https://www.agner.org/optimize/calling_conventions.pdf
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Насколько я помню, "callq" - это передача управления чисто для 64-ёхбитных процессоров (естественно, в 64-ёхбитной среде ;-) ). Если поглядеть дальше, возврат управления будет с помощью "retq". В 64-ёхбитных ассемблерах многие асм-команды принудительно отключены для 64-ёхбитных систем.
Почему заменяется "push" на "lea" не могу сказать, не спец по асму. Наверное там регистры 64-ёхбитные таким образом сохраняются. Тут нужно у разрабов спрашивать...
Ответить