EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유
123
작성한 질문수 4
[문제 상황]
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으로 바꾸는 동작에 대한 명쾌한 설명이 있습니다.
이와 같은 연산의 특징 덕분에 프로그래머는 상위 비트를 별도로 처리할 필요 없이, 보다 단순하고 효율적으로 코드를 작성할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
소스코드와 관련하여 질문드립니다
0
65
1
map 컨테이너의 emplace 함수에 대해
0
104
2
시작이 안되네요...!
0
95
2
리틀 엔디안 장점 질문합니다.
0
129
1
메모리 창에 주소를 넣었는데 영어 꺠짐
0
123
1
타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.
0
93
2
map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.
1
138
2
hello world 부터 오류 ㅠㅜ
0
184
1
지역변수가 스택? 레지스터
0
126
2
마지막 문제 질문드립니다.
0
162
2
메모리창이 비활성화됩니다.
0
98
1
이중포인터 강좌 부분 질문있습니다.
0
145
1
2를 더하는 이유
0
131
1
메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다
1
109
1
해당 코드는 왜 오류가 날까요?
0
153
1
마지막 문제 질문 있습니다.
0
115
1
강의 마지막부분에 질문이 있습니다.
0
190
2
Field초기화
0
140
1
virtual과 override 차이
0
310
2
3:30 참조자 리턴
0
164
1
map 찾기
0
155
1
프로그램 질문드려요
0
255
1
캐스팅 질문
0
134
1
암시적/명시적 생성자 쓸 때 주의할 점 공유
0
279
1





