inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

반복문

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

153

오류

작성한 질문수 14

0

%include "io64.inc"

 

section .text

global main

main:

mov rbp, rsp; for correct debugging

 

mov ecx, 10

LABEL_LOOP_SUM:

PRINT_DEC 4, ebx

loop LABEL_LOOP_SUM

 

xor rax, rax

ret

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

c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 오류님 수강생님. 질문에 대한 답변을 드리겠습니다.

주어진 코드에서 발생하는 오류는 어셈블리어에서의 루프(loop) 명령어와 관련이 있습니다. loop 명령어는 일반적으로 ecx 레지스터에 전역 카운터를 사용하여 감소시키고, 값이 0이 될 때까지 반복합니다. 그러나 주어진 코드에서 ecx 레지스터만 초기화하였고, 루프 내에서 ecx 값을 감소시키지 않았습니다. 따라서 루프가 영원히 지속되거나 예상치 않은 동작을 할 수 있습니다.

짧은 점프 거리 한계 관련 질문에서도 설명되었듯이, loop 명령은 전역 레지스터 ecx를 사용하여 동작합니다. 만약 레지스터를 감소시키거나 초기화하지 않으면, 루프가 의도한 대로 동작하지 않을 수 있습니다.

또한, PRINT_DEC에서 ebx 레지스터를 사용하고 있으나 초기화하지 않았기 때문에, 출력될 값이 예측할 수 없는 상태일 수 있습니다. ebx0으로 초기화하거나 원하는 출력 값을 설정해야 합니다.

이와 관련한 유사한 예로 아래 질문도 참고하실 수 있습니다:
- short jump is out of range 에러
- 이 질문에서는 점프 명령어 사용 시 발생할 수 있는 거리 한계와 루프 구조에 대한 설명이 제공됩니다.

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

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

0

66

1

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

0

108

2

시작이 안되네요...!

0

95

2

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

0

125

1

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

0

129

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

126

2

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

0

162

2

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

0

98

1

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

0

145

1

2를 더하는 이유

0

132

1

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

1

109

1

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

0

115

1

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

0

190

2

Field초기화

0

140

1

virtual과 override 차이

0

313

2

3:30 참조자 리턴

0

165

1

map 찾기

0

155

1

프로그램 질문드려요

0

256

1

캐스팅 질문

0

135

1

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

0

279

1