강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

오류님의 프로필 이미지
오류

작성한 질문수

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

반복문

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

작성

·

114

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

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

답변 1

0

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

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

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

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

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

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

오류님의 프로필 이미지
오류

작성한 질문수

질문하기