2016-09-06 2 views
0

어셈블리에 대해 읽었으며 어셈블리에서 호출 루틴의 규칙에 대해 읽었습니다 (특히 Linux). 레지스터 rdi, rsi, rdx, rcx, r8, r9xmm15 및 다른 파라미터와 다른 나머지 파라미터 역순 스택으로 푸시한다 -어셈블리에서 printf에 8 개 이상의 부동 소수점 값을 전달하는 방법

는 제 8 부동 소수점 파라미터 xmm0 통해 전달되는 것을 특징으로한다.

8 개 이상의 부동 소수점 매개 변수와 6 개 이상의 다른 매개 변수가있는 경우 스택에 어떤 순서로 밀어 넣어야합니까? 8fp에 맞지 않는 첫 번째 부동 소수점 값. 레지스터 또는 6 개의 레지스터에 맞지 않는 다른 파라미터?

답변

2

ABI 문서의 어느 부분이 불분명합니까 (https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI)?

int 인수와 fp 인수가 혼합되어 있고 두 종류의 arg 전달 레지스터가 부족하면 어떻게되는지 묻고 있습니까?

IIRC와 같이 역순으로 스택에 있습니다. 가장 높은 주소의 마지막 arg와 반환 주소 바로 위의 첫 번째 비 등록 arg를 갖습니다. 이것은 args가 항상 스택에 전달되는 32 비트 코드와 같습니다.

http://wiki.osdev.org/System_V_ABI 태그 위키를 참조하십시오.

+0

초안인가요? 참조 용으로 사용할 수 있습니까? 제목 페이지에는 몇 개의 이름이 적혀 있는데, 전에 들어 본 적이 없습니다. –

+0

@BulatM. 예, 해당 페이지는 표준 문서의 공식 버전으로 연결됩니다. 예 : "* x86-64 psABI 개정판 252는 [here] (https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-r252.pdf) *에서 다운로드 할 수 있습니다. 불행하게도이 문서는 컴파일러가 의존하는 모든 것을 완벽하게 문서화하지는 않지만 그것이 말하는 모든 것은 정확합니다. 내가 알고있는 유일한 예외는 [제로/부호 좁은 정수 인수를 32 비트로 확장] (http://stackoverflow.com/questions/36706721/is-a-sign-or-zero-exts-required-when-adding) -a-32bit-offset-to-a-pointer-for/36760539 # 36760539). –

+0

ABI 문서의 복사본은 http://www.x86-64.org/documentation.html에 게시되었지만 x86-64.org는 2 주 전에 죽었습니다. –

관련 문제