inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

배열과 주소

2를 더하는 이유

131

오류

작성한 질문수 14

0

%include "io64.inc"

 

section .text

global main

main:

mov rbp, rsp; for correct debugging

 

PRINT_HEX 2, [b]

NEWLINE

PRINT_HEX 2, [b + 2]

NEWLINE
PRINT_HEX 2, [b + 4]

NEWLINE

PRINT_HEX 2, [b + 6]

 

 

xor rax, rax

ret

 

section .data

b dw 0x0001, 0x0001, 0x0001, 0x0001

 

위 코드에서 2를 더하는 이유가 무엇인가요? 1씩 더하면 왜 1 100 1 100이라 나오는지 모르겠습니다!

c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 오류님 문의하신 내용에 대해 설명드리겠습니다.

어셈블리 코드에서 PRINT_HEX 2, [b]는 2바이트 단위로 데이터(16진수)를 출력하게 됩니다. b dw 0x0001, 0x0001, 0x0001, 0x0001 와 같은 데이터를 선언하면 이는 메모리상에 2바이트 단위로 저장됩니다. 그래서 다음과 같이 메모리에 저장됩니다:

  • 0x0001 (첫 번째 2바이트)
  • 0x0001 (두 번째 2바이트)
  • 0x0001 (세 번째 2바이트)
  • 0x0001 (네 번째 2바이트)

이전에는 메모리가 1바이트씩 이동한다면, PRINT_HEX 2, [b+1]처럼 중간 주소에서 읽게 되어 엉뚱한 값을 출력하게 되지만, 현재 코드에서는 2바이트 단위로 이동하고 있어서 정상 출력됩니다.

  • PRINT_HEX 2, [b]는 첫 번째 2바이트 (0x0001)를 출력합니다.
  • PRINT_HEX 2, [b + 2]는 두 번째 2바이트 (0x0001)를 출력합니다.
  • PRINT_HEX 2, [b + 4]는 세 번째 2바이트 (0x0001)를 출력합니다.
  • PRINT_HEX 2, [b + 6]는 네 번째 2바이트 (0x0001)를 출력합니다.

따라서 PRINT_HEX 2에서 2를 더하는 이유는 메모리에서 두 번째 2바이트 시작 주소로 이동하기 위한 것입니다. 이렇게 해야 데이터가 2바이트 단위로 끊어져 저장된 것과 일치하게 읽을 수 있습니다.

좀 더 자세한 내용은 다음 유사한 질문과 답변을 참고하시면 도움이 될 것입니다:

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

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

0

65

1

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

0

105

2

시작이 안되네요...!

0

95

2

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

0

123

1

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

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

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

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