CS: Register의 종류

M·2023년 8월 21일
0

TIL

목록 보기
35/42

Register


레지스터는 연산에 필요한 데이터를 저장하고 빠른속도로 접근할 수 있는 저장공간이다.
레지스터에는 범용 레지스터, 세그먼트 레지스터, 포인터 레지스터, 인덱스 레지스터, 플래그 레지스터로 나뉘어 진다.
레지스터들 중에 앞에 E가 붙는것들이 있는데 이때 E는 Extended(확장된)을 의미한다.

범용 레지스터(General Register)


연산 장치가 수행한 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인등에 사용되는 레지스터이다.

EAX(Extended Accumulator Register)

  • 함수의 리턴 값 저장이나 산술 연산(+, -, *, /)에 이용된다.

EBX(Extended Base Register)

  • 메모리 주소를 저장하기 위한 용도로 사용된다.
  • DS 세그먼트의 포인터를 주로 저장, ESI나 EDI 와 결합하여 인덱스에 사용하기도 한다.

ECX(Extended Count Register)

  • 반복문 사용 시 반복 카운터로 사용된다.
  • 반복할 횟수를 지정하고 반복 작업 수행한다.

EDX(Extended Data Register)

  • 일반적인 자료들을 저장할때 사용된다.
  • 입출력 연산, 부호 확장 명령 등에 사용된다.
  • 큰 수의 곱셈 또는 나눗셈 연산에서 EAX 레지스터와 같이 사용된다.

Segment Register(세그먼트 레지스터)


프로그램에 정의한 메모리상의 특정 영역으로 코드, 데이터, 스택 등을 포함하는 레지스터이다.

CS(Code Segment Register)

  • 실행할 기계 명령어가 저장된 메모리 주소를 지정한다.(코드 세그먼트의 시작 주소를 가리킴)
  • 일반 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.

DS(Data Segment Register)

  • 프로그램에서 정의된 데이터, 상수, 작업 영역 메모리 주소를 지정한다.
  • 프로그램은 참조하려는 데이터를 DS 레지스터에 저장된 주소 값에 더해 데이터 세그먼트 안의 데이터를 참조한다.
  • 데이터 세그먼트의 시작 주소를 가리킨다.

SS(Stack Segment Register)

  • 프로그램을 실행할 때 실행 과정에서 필요한 데이터나 결과를 임시 저장 및 삭제 목적으로 사용된다.
  • 프로그램 스택 세그먼트의 시작 주소를 가리킨다.

ES, FS, GS(Extra Segment Register)

  • 문자 연산과 추가 메모리를 지정하는 데 사용되는 여분의 레지스터이다.
  • ES 레지스터는 추가로 사용된 데이터 세그먼트의 주소를 가리킨다.
  • 문자 데이터 연산에 사용될때 EDI 레지스터와 함께 사용된다.
  • FS, GS 레지스터도 목적은 비슷하나 실제로 거의 사용되지 않는다.

Pointer Register(포인터 레지스터)


프로그램 실행 과정에서 사용하는 주요 메모리 주소 값을 저장하는 레지스터이다.

ESP(Extended Stack Pointer)

  • SS 레지스터(특수목적 레지스터)와 함께 사용된다.
  • 메모리 스택의 끝 지점 주소를 가리킨다.
  • 스택의 값을 Push/Pop 할때마다 ESP의 값이 4바이트씩 증가/감소한다.

EBP(Extended Base Pointer)

  • SS 레지스터(특수목적 레지스터)와 함께 사용된다.
  • 메모리 스택의 시작 지점 주소를 가리킨다.
  • 함수로 전달되는 지역 변수등을 참조할 때 기준이 된다.
  • ESP 레지스터와 함께 써서 스택 프레임을 형성하기도 한다.

EIP(Extended Instruction Pointer)

  • 다음 명령어의 주소를 저장한다.
  • 실제 메모리상의 주소를 참조할 때 CS 레지스터와 함께 사용된다.
  • 현재 실행 중인 코드 세그먼트에 속한 현재 명령을 가리킨다.

Index Register(인덱스 레지스터)


데이터를 복사할 때 출발지와 목적지 주소를 각각 가르키는 레지스터이다.

EDI(Extended Destination Index)

  • 복사할 때 목적지 주소 저장

ESI(Extended Source Index)

  • 데이터를 조작하거나 복사할 때 데이터의 주소 저장

인덱스 레지스터는 메모리의 한 영역에서 다른 영역으로 데이터를 연속적으로 복사할 때 사용된다.

Flag Register(플래그 레지스터)


CF(Carry Flag)

  • 산술 연산에 의한 자리 올림이나 자리내림이 발생할때 1이된다.

ZF(Zero Flag)

  • 산술 연산 결과가 0이면 1이되고(세트) 0이외에는 0이된다.

OF(Overflow Flag)

  • 부호가 있는 수의 오버플로우가 발생하거나 MSB(2진수의 최상위 비트, 부호를 결정한다)를 변경했을 때 1이된다.

PF(Parity Flag)

  • 산술 연산 결과가 짝수이면 1이된다.

AF(Adjust Flag)

  • 8비트 피연산자를 사용한 산술 연산에서 비트 3 을 비트 4로 자리올림하면 1이된다.

SF(Sign Flag)

  • 산술 및 논리 연산 결과가 음수이면 1이된다

DF(Direction Flag)

  • 스트링 명령을 제어해서 DF가 1이면 스트링을 높은 주소에서 낮은 주소로 처리하고 DF가 0이면 스트링을 낮은 주소에서 높은 주소로 처리한다.

TF(Trap Flag)

  • 디버깅을 할 때 Single Step Mode(한번에 하나의 명령어만 실행되는 모드)를 활성화 하면 1이되고(세트) 비활성화 하면 0이된다

IF(Interrupt enable Flag)

  • 프로세서의 인터럽트 처리 여부를 제어한다. IF가 1이면(세트) 시스템의 인터럽트를 처리하고, 0이면(클리어) 시스템의 인터럽트를 무시한다.
profile
자바스크립트부터 공부하는 사람

0개의 댓글