프로그래밍/C++

#3. 레지스터

코딩하는상후니 2022. 7. 14. 08:59

*레지스터 란 ??

 

 
 
=> 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억장소.
=> 현재 계산을 수행 중인 값을 저장하는데 사용.
 
 
 
즉, CPU 가 계산할 수 있는 최소 단위
64bit  /  32bit  환경 -> 레지스터 크기라고 생각.
그래서 포인터의 크기가 8byte( 64bit )  /  4byte ( 32bit ) 로 나뉘어진다.
왜냐하면 레지스터가 8byte 만큼의 주소를 저장할 수 있기 때문이다.
 
 
 
 

*레지스터 종류 ( 레지스터가 하나만 존재하는 것이 아니다. )

 

 
 
ax : 산술, 논리연산 수행.
 
bx : esi, edi 와 함께 메모리 주소 저장 용도로 사용.
 
cx : 카운터 레지스터, 반복 카운터.
 
dx : 큰 수의 연산이 이루어질 때, eax 와 함께 쓰임.
 
si  :  데이터를 조작, 복사 시, 소스 데이터의 주소 저장.
 
di  :  복사 시, 목적지의 주소 저장.
 
 
 
ip  (  Instruction Pointer  )  :  다음 수행 명령어의 위치 => 'Code 영역에 있는 줄 위치'
 
sp  (  Stack Pointer  )  :  현재 '스택 top' 위치.
 
bp  (  Base Pointer  )  :  함수(프로시저) 시작 위치.

 

 

 

 

 

*레지스터와의 호환
 

=> 레지스터 범위를 표현할 수 있는 단위
=> 이 단위들을 이용해서 어셈블리로 레지스터를 제어 가능.

 

 
 
예를 들어,

 

 

 

mov eax, 0x1234
=> 'a' 에 해당하는 register 에 ex범위(32bit)만큼에 0x1234 값이 들어가 있다.
 
 
 
mov rbx,  0x12345678
=> 'b' 에 해당하는 register 에 rx 범위(64bit)만큼에 0x12345678 값이 들어가 있다.
 

 

 

 

즉, eax, rbx, cl, dl 에서
a, b, c, d 에 해당하는 표기가 레지스터 종류들 중 하나이다.
 

 

 

mov eax, 0x1234
mov al, 0x00
 
해당 연산 시, 0x1234 -> 0x1200 으로 값이 바뀜.
 
 
 
이유는 ??
 
a 레지스터를 계산하고 있다.
l 이 의미하는 것은 1byte 크기.
 
즉, al 연산의 의미는
mov ( 이동해라 ) -> al ( 해당 범위만큼 ) -> 0x00 ( 해당 값으로 )

 

 


 

본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.

 

'프로그래밍 > C++' 카테고리의 다른 글

#6. 사칙연산  (0) 2022.07.15
#5. 문자와 엔디안  (0) 2022.07.15
#4. 변수와 레지스터  (0) 2022.07.15
#2. 데이터 기초  (0) 2022.07.14
#1. Assembly SASM  (0) 2022.07.14