'세그먼트'에 해당되는 글 1건

  1. 2013.03.28 3. 인텔 프로세서의 내부 구조
System Programming2013. 3. 28. 01:16


1. 32비트 인텔 프로세서(펜티엄 프로세서)

    펜티엄 프로세서는 한 번의 클럭 동안에 두개의 명령어를 실행할 수 있는 슈퍼 스칼라 구조를 가지고 있다. 또한 내부적으로는 486 프로세서와 같은 32 비트 버스를 사용하지만 메모리와 연결되는 외부 데이터 버스는 64비트이기 때문에 단일 버스 사이클 당 전송될 수 있는 데이터의 양이 486 프로세서의 2배가 된다.


32비트 프로세스의 기본 실행 환경



* FPU(Floating-Point Unit) : 부동 소수점 계산 장치 ... ALU 옆에 부착되있어 ALU의 지원을 극복한 계산을 해준다고 말할 수 있다.


Register 란?


- 작은 데이터의 임시 저장 공간

- 연산처리 및 주소 지정을 도와준다.

- 크기는 레지스터마다 다르지만, 보통 32bit(16bit 컴퓨터에선 16bit 크기, 32bit에서는 32bit크기를 가짐)


범용 레지스터


범용 레지스터들은 산술 논리 연산을 위한 연산항과 결과, 주소 계산을 위한 연산항과 결과 또는 메모리 포인터를 저장하기 위해 사용된다. 총 8가지가 있다.


    1. EAX(Extended Accumulator Register) : 산술연산 과 정수형 반환값을 호출함수에 넘김. EAX 레지스터는 산술(사직연산), 논리 연산을 수행하며 함수의 반환값이 이 레지스터에 저장된다. 즉, 덧셈, 곱셈 등의 명령은 모두 EAX 레지스터를 사용하며, 함수의 반환값이 이 레지스터에 저장된다. 이로인해서 얻는 이점을 살펴보자 
          - 함수의 호출 성공여부 또는 실패 여부를 쉽게 파악할 수 있다.
          - 함수에서 리턴된 값을 이 레지스터를 이용해서 쉽게 얻어올 수 있다.

    2. EBX(Extended Base Register) : 함수나 변수의 주소(특히 DS에 대한 주소 혹은 포인터) 를 저장하거나, ESI나 EDI와 결합하여 인덱스에 사용된다. EBX 레지스터는 포인터 처럼 간접적인 주소를 지정할 때 사용된다. 이 레지스터는 메모리의 주소 지정을 확장하기 위해 인덱스로 사용될 수 있는 유일한 범용 레지스터이다.

    3. ECX(Extended Counter Register) : 문자열과 반복문에 대한 계수기. 루프가 반복되는 횟수를 제어하는 값, ECX 레지스터에 반복할 횟수를 지정한후 반복이 진행될 때마다 값을 감소시킨다.

    4. EDX(Extended Data Register) : 입출력 연산에 사용하며, 큰 수의 곱셈과 나눗셈 연산에서 EAX와 함께 사용한다.

    5. ESI(Extended Source Index) : 문자열 연산에 대한 출발항(예를들어, 배열의 시작항) 또는 DS 레지스터가 가리키고 있는 세그먼트의 데이터에 대한 포인터. 데이터 복사나 조작시 출발항 데이터의 주소가 저장된다.

    6. EDI(Extended Destination Index) : 문자열 연산에 대한 목적항 또는 ESI 레지스터가 가리키고 있는 세그먼트의 데이터에 대한 포인터. 데이터 복사 작업시 Destination의 주소가 저장된다.

    7. ESP(Extended Stack Pointer) : 스택 포인터로서 스택 프레임의 끝 지점의 주소가 저장된다. 

    8. EBP(Extended Base Pointer) : 스택에 있는 데이터에 대한 포인터로서 스택 프레임의 시작 지점의 주소가 저장된다.


세그먼트 레지스터


세그먼트 레지스터들은 메모리 세그먼트를 식별 할 수 있게 한다. 레지스터의 크기는 16비트로 구성되어 있으며, FS와 GS레지스터가 추가 되어 한번에 6개의 서로 다른 세그먼트가 활성화 될 수 있다.



- CS(Code Segment) 레지스터 : 실행될 명령어가 저장되어 있는 세그먼트의 시작 주소를 담고 있다.

- DS(Data Segment), ES(Extra Segment), FS, GS 레지스터 : 4개 데이터 세그먼트를 가리킨다. 4개의 데이터 세그먼트는 서로 다른 데이터 타입을 이루어져 안정하고 효율적인 접근을 허가한다.

- SS(Stack Segment) - 스택 세그먼트의 사작 위치(top)를 가리킨다.


EFLAGS 레지스터


32비트 EFLAGS레지스터는 여러 상태 플래그(State Flag)와 시스템 플래그(System Flag), 제어 플래그(Control Flag)로 구성된다.


< EFLAGS 레지스터 >


위 그림은 각각의 플래그를 정의하고 있다. 프로세스가 초기화 된 이후 EFLAGS 레지스터의 상태는 00000002h가 된다. 회색 부분은 예약된 비트. 


상태 플래그 : EFLAGS 레지스터의 상태 플래그(0, 2, 4, 6, 7, 11번째 비트)는 ADD, SUB, MUL, DIV와 같은 산술 연산의 결과를 가리킨다.


    • OF(Overflow Flag) : 산술연산 결과의 오버플로우 상태를 표시한다.

    • DF(Direction Flag) : 스트링 처리시 오른쪽-왼쪽 or 왼쪽-오른쪽 처럼 처리 방향을 조절하는 플래그.

    • IF(Interrupt-enable Flag) : 외부 인터럽트 가능(enable) 또는 불가능(disable)을 나타낸다.

    • TF(Trap Flag) : 프로세서를 프로그램 디버그용의 싱글 스텝모드가 가능하도록 세팅한다.

    • SF(Sign Flag) : 연산 결과의, 최상위 비트가 1일 때 1로 세트된다. 즉, 최상위 비트가 1이면 음수, 0이면 양수를 나타낸다.

    • ZF(Zero Falg) : 연산 결과가 0으로 되었을 때 1로 세팅된다.

    • AF(Auxiliary Carry Flag) : 10진 산술 연산(BCD) 명령에 사용하고, 하위 니블(4비트)에서 상위 니블로의 자리올림 또는 상위에서 하위로 자리내림이 있을 때 1로 세팅된다.

    • PF(Parity Flag) : 오퍼레이션 결과의 최하위 바이트가 짝수 패리티인 경우에 세트되고, 홀수의 경우는 클리어(0이 됨)된다. 데이터 전송시 에러 검출에 사용한다.

    • CF(Carry Flag) : 최상위 비트에 자리올림 또는 내림이 발생하면 1로 세팅된다. or 부호 없는 정수에 대한 오버플로우를 나타낸다.










'System Programming' 카테고리의 다른 글

2장 컴퓨터 동작의 기본 개념  (0) 2013.03.20
Posted by twinjh