*레지스터 란 ??
=> 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억장소.
=> 현재 계산을 수행 중인 값을 저장하는데 사용.
즉, 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 |