Страница 1 из 1

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

СообщениеДобавлено: 10.07.2020 03:23:47
Seenkao
Я не совсем понял, почему в Linux компилируемый код (в ассемблерном виде) производит операции:
lea ...
callq

а в Windows:
push ...
call

чем это обосновано? Разным способом вызовов процедур в системах?

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

СообщениеДобавлено: 10.07.2020 08:33:52
Pavia
Скорее тут дело 64 бит ЦПУ против 32 битного ЦПУ.
А так да в разных ОС стандарты ABI разные.

https://www.agner.org/optimize/calling_conventions.pdf

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

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