파라미터 전달 순서 왼쪽 -> 오른쪽 파라미터 순서대로

Integer & Pointer ->  rdi, rsi, rdx, rcx, r8, r9

floating-point(float, double) -> xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7



파라미터는 오른쪽부터 왼쪽 순으로 스택에 push 되고 함수 호출 후 caller(호출자)에 의해 정리 되어야 한다. 


함수가 호출되어지면 return address는 rsp에 위치하고 첫번째 파라미터는 rsp+8로 참조된다 


스택포인터 rsp는 16바이트 단위로 정렬 되어야 하지만

서브루틴 호출의 리턴 어드레스는 8byte만 push 하기 때문에

16바이트 경계를 맞춰주기 위해 rsp에서 8바이트를 더하거나 빼야 한다.


서브루틴이 보존해야 하는 레지스터는 

rbp, rbx, r12, r13, r14, r15 이며,  나머지 모든 레지스터는 자유롭게 서브루틴에서 변경 할 수 있다.

Posted by $Zero
: