inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

레지스터 기초

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

123

우성

작성한 질문수 4

0

[문제 상황]
mov rax 0x1234567812345678,
mov eax 0x00000000
위 두 명령어 실행 결과 rax에 값이
0x1234567800000000이 될 줄 알았는데
모두 다 0으로 다 초기화 됨.
다른 AX, AH, AL같은 명령어는 상위 비트에 영향을 주지 않는데 EAX만 그러는 것이 의아함

[자답]
GPT한테 물어보니
x86-64 아키텍처에서는 32비트 일반 레지스터에 값을 쓰면 자동으로 상위 32비트를 0으로 클리어하도록 설계
그냥 그렇게 된다고 하네요

image.png


c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 우성님.

질문해 주신 부분에 대한 이해를 돕기 위한 정보를 제공해 드릴게요. 우성님께서 말씀하신 바와 같이, x86-64 아키텍처에서 EAX에 값을 할당할 때 RAX의 상위 32비트가 자동으로 초기화되는 것은 설계의 일부입니다. 이 기능은 시스템의 효율성과 단순성을 위해 만들어졌습니다. 즉, 별도로 상위 비트를 초기화하는 명령어 없이도 빠르고 간단하게 코드 실행이 가능해집니다. 이는 과거 32비트 코드와의 호환성을 유지하면서도 64비트 모드에서 seamless하게 동작할 수 있도록 설계된 결과입니다.

더 자세한 설명은 다음 링크에서 확인할 수 있습니다:
- mov로 레지스터에 값을 넣을 때: 32비트 연산 시 상위 비트를 0으로 바꾸는 동작에 대한 명쾌한 설명이 있습니다.

이와 같은 연산의 특징 덕분에 프로그래머는 상위 비트를 별도로 처리할 필요 없이, 보다 단순하고 효율적으로 코드를 작성할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

소스코드와 관련하여 질문드립니다

0

65

1

map 컨테이너의 emplace 함수에 대해

0

105

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

311

2

3:30 참조자 리턴

0

164

1

map 찾기

0

155

1

프로그램 질문드려요

0

255

1

캐스팅 질문

0

134

1

암시적/명시적 생성자 쓸 때 주의할 점 공유

0

279

1