[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 레지스터 기초

Jangmanbo·2023년 2월 26일
0

데이터 단위

8 bit = 1 byte
16 bit = 2 byte = 1 word
32 bit = 4 byte = 2 word = 1 dword (double-word)
64 bit = 8 byte = 4 word = 1 qword (quad-word)


레지스터

레지스터는 CPU 내에 존재하므로 CPU가 접근하기에 매우 빠르지만, 저장 용량이 매우 적다.
CPU의 연산 결과를 임시로 저장할 때 메인 메모리나 하드디스크에 저장하는 것은 비효율적이므로 일반적으로는 레지스터에 저장한다.

레지스터의 종류는 다양하지만, 본 강의에서는 EAX, EBX, ECX, EDX(a, b, c, d)에 중점을 둔다.

같은 레지스터를 사용하더라도 레지스터 전체를 사용하면 RAX, 하위 32bit만 사용한다면 EAX라고 부른다.


실습

하위 1byte만 사용하는데 0xffffff 복사를 시도하면 범위를 초과하므로 빌드 에러가 발생한다.

디버깅 중에 메모리와 레지스터를 확인할 수 있다. 디버깅하면서 rax, rbx, rcx의 값이 바뀌는 것을 볼 수 있다.

mov al, 0x00

al에 0을 넣었는데 rax의 값이 0이 아니다.
이는 하위 1byte에만 0 값을 대입했기 때문이다. 나머지 상위 비트들에는 이 명령어가 아무런 영향을 끼치지 않는다.

mov rax, rdx

rdx의 값이 rax로 복사되었다.

0개의 댓글