Soft Ware/Windows 구조와 원리

레지스터

달려가보자 2011. 11. 9. 13:53

 31                          16  15                           8  8                            7 7                             0 
 EAX  AH  AX  AL
 EBX  BH  BX  BL
 ECX  CH CX  CL 
 EDX  DH DX  DL 
 EBP   BP   
 ESP    SP  
 ESI    SI  
 EDI    DI  




AX : 어큐뮬레이터. 산술, 논리 연산의 중심이 되는 레지스터이며, Input/Output 포트의 입출력 명령 

BX : 간접 번지 지정 시 번지 레지스터. 베이스 레지스터로 주로 사용

CX : 루프와 같이 어떤 명령을 반복적으로 수행하고자 할때 반복 횟수를 지정하는데 주로 사용

DX : 간접 번지 지정에 의한 입출력 명령을 실행할때 번지 지정에 사용된다. 
     곱셉 , 나눗셈을 할때에는 보조 어큐뮬레이터로 사용


SI , DI : 다른 범용 레지스터의 마찬가지로 연산과 간접 번지 지정에 사용된다. 
          그밖에 문자열의 전송이나 비교 등을 하는 스트링 명령에서 SI는 source가 되는 문자열을 나타내고
 DI는 destination이 되는 문자열의 번지를 표시하는데 사용


EAX : 누산기 레지스터, 대부분의 입출력 및 산술, 논리 연산에 사용된다. 
      그뿐 아니라 리턴값, 인터럽트 번호 지정시 자동으로 사용


EBX : 주로 주소 지정을 확장 할때 사용 되거나 초기 주소 지정 등을 위해 사용된다. 이때 오프셋 주소가 되어
      SI, DI 레지스터와 결합되어 사용


ECX : 카운트 레지스터, 어떤 명령을 반복 수행할 경우 횟수를 지정하는데 사용된다.
      내부적으로 이 값을 루프 수 만큼 저장 했다가 1씩 감소 시켜 0이 되면 EFlags의 ZF를 셋팅 시켜 루프를 종료


EDX : 데이터 레지스터, EAX 의 보조 누산기로 주로 사용되어 입출력 연산시 간접 주소 지정 연산


ESI : 연산 및 간접 주소 연산에 주로 사용되며 문자열 처리 시 자주 사용된다.


보호 모드에서의 새로 등장한 레지스터


IOPL(I/O 특권 수준) : 2bit로 구성된 이 보호모드 제어비트는 I/O 명령어를 실행하는데 
     필요한 현재의 특권 수준(0~3)까지를 나타 낸다.


NT(내포 태스크 플래그) : 이 상태 플래그는 보호 모드에서 현재 태스크가 다른 태스크에 의해 호출되었음을 
  나타내는 데 사용되어지며, 내포 태스크가 끝났을 때 리턴 명령어의 형태에 영향을 미친다.


RF(재시작 플래그) : 이 플래그는 디버그 레지스터와 함께 사용되어 이 플래그가 세트 되면 디버그 Fault를 무시하고
   다음 명령어가 실행되도록 한다.


VM(가상모드) : 이 플래그는 프로세서를 가상 8086 모드로 전환 시키는데 사용 되는 보호 모드 제어 플래그




시스템 레지스터 중 CR0 , CR2 , CR3는 제어 레지스터 

CR0 : 페이징 매커니즘의 활성화, 태스크 전환의 감시, 보조 프로세서의 에뮬레이션, 보호모드 선택에 사용

CR2 : 페이지 폴트 시에 마지막 명령어의 주소를 가르키고 있다.

CR3 : 페이지 디렉토리의 베이스 주소를 가지고 있다.



CR0 레지스터의 필드들


PE : 이 비트는 EFLAGS 의 VM 비트와 비슷하며, 이비트가 세트되어 있으면 보호모드로 그렇지 않으면 실제모드

MP : 이 비트는 산술 보조 프로세스가 존재하는지를 나타내는 비트

EM : 이 비트는 프로세서가 부동 소수점 유닛을 가지고 있지 않을때 세트 되며 이 비트가 세트된 상태에서 부동 소수점
     에 대한 연산이 수행될 경우 인터럽트 11번이 발생하여 인터럽트 핸들러에서 부동 소수점에 대한 연산을 
     소프트웨어적으로 구현할수 있도록 해준다.

TS : 이 비트는 태스크 스위칭이 일어날때마다 프로세서가 자동적으로 세트해 주며, 프로세서에 의하여 자동적으로
     클리어되지는 않으며, 사용자는 CLTS 명령어로 이 비트를 클리어 해줄수있다.

ET : 이 비트는 산술 보조 프로세서가 80387인지를 나타내는 비트

PG : 이 비트는 프로세서의 페이징 메모리 매니저먼트 유니트(MMU)를 활성화할것인지 아닌지를 나타내는 비트
     이 비트가 세트되어 있으면 페이징 시스템으로 작동


CR2

이 레지스터는 읽기 전용 레지스터로 페이지 부재가 발생하여 인터럽트 14번이 발생했을 때 어떤 주소에서 페이지 부재가
발생했는지 주소를 저장해 주는 레지스터

CR3

이 레지스터는 페이지 디렉토리의 베이스 어드레스를 저장해 주는 레지스터로 CR0 레지스터의 PG 비트가 세트되어
페이징 시스템으로 작동되어질때 사용됨



'Soft Ware > Windows 구조와 원리' 카테고리의 다른 글

함수 호출  (0) 2011.11.16
복귀 주소가 가지는 특징  (0) 2011.11.16
Windows 구조와 원리  (0) 2011.11.16
뮤텍스와 세마포어  (0) 2011.11.13
세그먼트  (0) 2011.11.09