>백엔드 개발 >C++ >64비트 함수 호출에서 RAX가 먼저 스택에 푸시되는 이유는 무엇입니까?

64비트 함수 호출에서 RAX가 먼저 스택에 푸시되는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-09 04:34:14578검색

Why is RAX Pushed onto the Stack First in 64-bit Function Calls?

첫 번째 작업으로 RAX를 스택에 푸시하는 이유는 무엇인가요?

제공되는 C 코드 어셈블리에서 RAX를 스택에 푸시합니다. 64비트 ABI에 따라 적절한 스택 정렬을 유지하기 위해 스택을 첫 번째 작업으로 수행합니다.

ABI(Application Binary 인터페이스)는 프로그램의 여러 부분 간의 규칙 호출에 대한 일련의 규칙을 지정합니다. 64비트 ABI에서는 호출 명령이 실행되기 전에 스택을 16바이트 경계로 정렬해야 합니다.

호출 명령은 8바이트 반환 주소를 스택에 푸시하여 16바이트 정렬을 깨뜨립니다. . 이를 수정하려면 컴파일러가 정렬 작업을 수행해야 합니다.

무정의 값(예: RAX)을 푸시하면 이러한 정렬이 이루어지며 스택에서 8바이트를 빼는 것과 같은 대체 방법보다 더 효율적일 수 있습니다. 바늘. 스택 엔진이 있는 CPU에서 RAX를 푸시하면 스택 작업을 효율적으로 처리하는 하드웨어 기능을 활용할 수 있습니다.

요약하면 push rax 명령은 64비트 ABI에 필요한 스택 정렬을 유지하는 데 사용됩니다. 후속 함수 호출이 적절하게 정렬된 스택에서 올바르게 작동하는지 확인합니다.

위 내용은 64비트 함수 호출에서 RAX가 먼저 스택에 푸시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.