Страница 1 из 1
компиляция в Linux и Windows
Добавлено: 10.07.2020 02:23:47
Seenkao
Я не совсем понял, почему в Linux компилируемый код (в ассемблерном виде) производит операции:
lea ...
callq
а в Windows:
push ...
call
чем это обосновано? Разным способом вызовов процедур в системах?
Re: компиляция в Linux и Windows
Добавлено: 10.07.2020 07:33:52
Pavia
Скорее тут дело 64 бит ЦПУ против 32 битного ЦПУ.
А так да в разных ОС стандарты ABI разные.
https://www.agner.org/optimize/calling_conventions.pdf
Re: компиляция в Linux и Windows
Добавлено: 10.07.2020 12:00:27
Vadim
Насколько я помню, "callq" - это передача управления чисто для 64-ёхбитных процессоров (естественно, в 64-ёхбитной среде

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