강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của mindol
mindol

câu hỏi đã được viết

[Loạt bài phát triển game MMORPG bằng C++ và Unreal] Phần 1: Nhập môn lập trình C++

vòng lặp

short jump is out of range 에러

Viết

·

387

2

loop로 아래처럼 코드를 써봤는데 에러가 납니다.

구글링 해보니 127바이트보다 먼 거리는 점프할 수 없다는 말이 있는데 잘 이해가 안갑니다.

이런 간단한 코드에 왜 에러가 발생하는지 알 수 있을까요?

mov ecx, 10

LABEL_LOOP:

PRINT_DEC 1, ecx

NEWLINE

loop LABEL_LOOP_SUM

C++

Câu trả lời 2

4

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

어셈블리 코드도 결국 기계어로 변환되고
코드 영역에 올라가면서 각기 주소를 갖게 됩니다.
즉, LABEL로 지정한 곳도 결국 주소로 구분이 됩니다.

loop는 짧은 거리만 이동할 수 있는데
문제가 되는건 PRINT_DEC 입니다.
이 매크로가 우리 눈에는 한줄짜리지만
사실 내부적으로는 Window API를 호출해야 하는 굉장히 긴 작업이고,
결과적으로 코드가 길어지게 되면서 loop가 jump할 수 있는 최대 범위를 벗어나는 것입니다.

이럴땐 거리 제한이 없는 jump를 활용하거나
PRINT_DEC 하는 부분을 함수(프로시저)로 빼거나 하는 방법이 있습니다.

1

오.. loop는 점프 위치가 1바이트 상수로 저장되서 현재 위치에서 해당 숫자만큼 이동하는식으로 동작하는가보군요 

Hình ảnh hồ sơ của mindol
mindol

câu hỏi đã được viết

Đặt câu hỏi