아래는 gpt 답변입니다.
맞아. 사람들이 말하는 “RDI에는 첫 번째 함수 인자가 저장된다”는 설명 자체가 정확해. 그런데 바로 그 규칙을 적용하면, 이번 문제의 정답은 RDI, RSI, RDX가 아니라 RSI, RDX, RCX가 돼.
헷갈리는 지점을 구분해 보자.
1. RDI는 첫 번째 인자를 저장한다
문제의 코드가 다음과 같지?
printf("%c, %c, %c\n", 'A', 'B', 'C');
여기서 printf() 함수에 전달하는 인자를 순서대로 세어 보면 돼.
첫 번째 인자 → RDI
"%c, %c, %c\n"
출력 형식을 지정하는 포맷 문자열
두 번째 인자 → RSI
'A'
세 번째 인자 → RDX
'B'
네 번째 인자 → RCX
'C'
즉, RDI가 첫 번째 인자를 저장한다는 사실과 'A'가 RSI에 들어간다는 사실은 서로 모순되지 않아.
2. 그런데 왜 해설에는 RDI, RSI, RDX라고 적혀 있을까?
가능성이 높은 설명은 해설에서 포맷 문자열을 제외하고 'A', 'B', 'C'만 세었기 때문이야.
하지만 이미지의 문제 코드가 정확히 저 형태라면, 함수 호출 규약에 따른 정답은 다음과 같아.
| 문제에서 묻는 값 | 정답 |
|---|---|
| A = 문자 'A'의 전달 위치 | RSI |
| B = 문자 'B'의 전달 위치 | RDX |
| C = 문자 'C'의 전달 위치 | RCX |
참고로 'A', 'B', 'C'는 가변 인자 함수에 전달될 때 int로 승격되지만, 여기서 설명한 인자 순서는 바뀌지 않아.
결론: RDI는 첫 번째 함수 인자를 저장한다. 따라서 포맷 문자열이 첫 번째 인자인 이번 문제에서는 RDI, RSI, RDX가 아니라 RSI, RDX, RCX가 맞아.