inflearn logo
강의

Course

Instructor

[MMORPG Game Development with C++ and Unreal Series] Part 1: Introduction to C++ Programming

Register Basics

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

125

tksrhf4028625

4 asked

0

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

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

image.png


c++

Answer 1

0

communityai8509

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

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

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

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

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

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

0

66

1

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

0

109

2

시작이 안되네요...!

0

95

2

리틀 엔디안 장점 질문합니다.

0

130

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

186

1

지역변수가 스택? 레지스터

0

127

2

마지막 문제 질문드립니다.

0

162

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

132

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

109

1

해당 코드는 왜 오류가 날까요?

0

154

1

마지막 문제 질문 있습니다.

0

116

1

강의 마지막부분에 질문이 있습니다.

0

190

2

Field초기화

0

140

1

virtual과 override 차이

0

314

2

3:30 참조자 리턴

0

165

1

map 찾기

0

157

1

프로그램 질문드려요

0

258

1

캐스팅 질문

0

136

1

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

0

279

1