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

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

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

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

Сообщение Seenkao » 10.07.2020 03:23:47

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

а в Windows:
push ...
call

чем это обосновано? Разным способом вызовов процедур в системах?
Seenkao
новенький
 
Сообщения: 62
Зарегистрирован: 01.04.2020 03:37:12

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

Сообщение Pavia » 10.07.2020 08:33:52

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

https://www.agner.org/optimize/calling_conventions.pdf
Аватара пользователя
Pavia
постоялец
 
Сообщения: 273
Зарегистрирован: 07.01.2011 12:46:51

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

Сообщение Vadim » 10.07.2020 13:00:27

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


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru