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

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