작성
·
36
0
[문제 상황]
mov rax 0x1234567812345678,
mov eax 0x00000000
위 두 명령어 실행 결과 rax에 값이
0x1234567800000000이 될 줄 알았는데
모두 다 0으로 다 초기화 됨.
다른 AX, AH, AL같은 명령어는 상위 비트에 영향을 주지 않는데 EAX만 그러는 것이 의아함
[자답]
GPT한테 물어보니
x86-64 아키텍처에서는 32비트 일반 레지스터에 값을 쓰면 자동으로 상위 32비트를 0으로 클리어하도록 설계됨
그냥 그렇게 된다고 하네요
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 우성님.
질문해 주신 부분에 대한 이해를 돕기 위한 정보를 제공해 드릴게요. 우성님께서 말씀하신 바와 같이, x86-64 아키텍처에서 EAX에 값을 할당할 때 RAX의 상위 32비트가 자동으로 초기화되는 것은 설계의 일부입니다. 이 기능은 시스템의 효율성과 단순성을 위해 만들어졌습니다. 즉, 별도로 상위 비트를 초기화하는 명령어 없이도 빠르고 간단하게 코드 실행이 가능해집니다. 이는 과거 32비트 코드와의 호환성을 유지하면서도 64비트 모드에서 seamless하게 동작할 수 있도록 설계된 결과입니다.
더 자세한 설명은 다음 링크에서 확인할 수 있습니다:
- mov로 레지스터에 값을 넣을 때: 32비트 연산 시 상위 비트를 0으로 바꾸는 동작에 대한 명쾌한 설명이 있습니다.
이와 같은 연산의 특징 덕분에 프로그래머는 상위 비트를 별도로 처리할 필요 없이, 보다 단순하고 효율적으로 코드를 작성할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.