레지스터 사용
업데이트: 2007년 11월
x64 아키텍처에서는 16개의 범용 레지스터(이하 '정수 레지스터')뿐 아니라 부동 소수점에 사용할 수 있는 16개의 XMM 레지스터도 제공합니다. volatile 레지스터는 호출자가 호출 간에 소멸시켜야 하는 것으로 간주되는 스크래치 레지스터입니다. 비volatile 레지스터는 함수 호출 간에 값을 유지해야 하고 필요한 경우 호출 수신자가 이를 저장해야 합니다.
다음 표에는 함수 호출 간에 각 레지스터가 사용되는 방식에 대한 설명이 나와 있습니다.
레지스터 |
상태 |
사용 대상 |
RAX |
volatile |
반환 값 레지스터 |
RCX |
volatile |
첫 번째 정수 인수 |
RDX |
volatile |
두 번째 정수 인수 |
R8 |
volatile |
세 번째 정수 인수 |
R9 |
volatile |
네 번째 정수 인수 |
R10:R11 |
volatile |
필요한 경우 호출자가 유지해야 하며, syscall/sysret 명령에 사용됩니다. |
R12:R15 |
비volatile |
호출 수신자가 유지해야 합니다. |
RDI |
비volatile |
호출 수신자가 유지해야 합니다. |
RSI |
비volatile |
호출 수신자가 유지해야 합니다. |
RBX |
비volatile |
호출 수신자가 유지해야 합니다. |
RBP |
비volatile |
프레임 포인터로 사용할 수 있으며, 호출 수신자가 유지해야 합니다. |
RSP |
비volatile |
스택 포인터 |
XMM0 |
volatile |
첫 번째 FP 인수 |
XMM1 |
volatile |
두 번째 FP 인수 |
XMM2 |
volatile |
세 번째 FP 인수 |
XMM3 |
volatile |
네 번째 FP 인수 |
XMM4:XMM5 |
volatile |
필요한 경우 호출자가 유지해야 합니다. |
XMM6:XMM15 |
비volatile |
필요한 경우 호출 수신자가 유지해야 합니다. |