레지스터
CPU 내에서 데이터를 저장하는 장치. 일반적으로 CPU에서 고속으로 계산하는 값을 저장하는 데 사용한다.
산술논리연산장치(ALU) 에서 처리된 결과 데이터를 임시 보관하고, 주기억장치에서 읽어온 명령어와 데이터를
임시 보관하기도 한다.
범용 레지스터
레지스터의 한 종류로 용도가 정해지지 않은 레지스터이다. 용도가 정해지지 않았으므로 컴퓨터가 다양한 용도로
사용하는 레지스터이다. 범용 레지스터는 EAX,EBX,ECX 등이 있다.
어셈블리어 코드의 일부 이미지를 가져왔다. 위의 코드에서는 EAX가 아닌 RAX, RCX 로 적혀있다.
EAX 와 비슷한것 같긴한데 앞에 한 글자가 다르다. E가 아닌 R인데, 어떤 차이가 있을까?
이를 설명하기 위해 먼저 WORD 에 대한 설명을 하려고 한다.
WORD : CPU가 사용하는 값의 크기 단위. 크기는 16비트이다.
16비트 CPU가 처음 등장했을 때 CPU가 사용하는 값의 기준이 WORD 였으며
이 CPU의 레지스터의 이름은 AX,BX,CX 로 명명되었다. 이후 32비트(DWORD), 64비트(QWORD) 로 확장되면서 기존의
이름앞에 각각 E,R을 붙이면서 바뀌게 된 것이다. 글에서는 EAX, 어셈블리어 코드에서는 RAX 로 적혀있지만 두 레지스터
가 아예 다른 레지스터는 아니며 32비트와 64비트의 차이인 것이다.
범용 레지스터의 종류와 용도
EAX |
함수의 return 값 저장 |
ECX |
반복문에서 카운터로 사용 |
EDX |
EAX와 함께 사용되어 연산을 보조 |
EBX |
메모리 주소를 저장 |
EDI |
데이터를 옮길 때 사용되는 목적지의 주소를 저장 |
ESP |
사용중인 스택의 위치를 가리킴 |
EBP |
스택의 제일 아랫부분의 주소를 저장 |
ESI |
데이터를 옮길 때 원본의 주소를 저장 |
R8~R15 |
64비트에서 추가된 레지스터. 다양한 용도로 사용 |
위에 정리된 기능들은 특정상황에서 우선적으로 수행하게 될 기능들이다. 함수가 수행되고 리턴 값을 저장해야 할 때
EAX 레지스터를 사용하지만, 그 이외의 상황에서는 EAX를 CPU가 쓰고싶을 때 자유롭게 쓸 수가 있다.
정해진 용도 이외에는 사용 불가한 것은 아니다.
그리고 함수를 호출할 때 사용하도록 지정되어 있는 범용 레지스터의 순서가 존재하며 이를 함수 호출 규약이라고 한다.
함수 호출 규약은 운영체제마다 다르며 함수에서 사용하는 인자들을 정해진 순서대로 저장하게 된다.
* 함수 호출 규약
- Windows 64비트의 경우 : RCX, RDX, R8, R9 순서
- Linux 64비트의 경우 : RDI, RSI, RDX, RCX, R8, R9 순서