가식적인 놈의 하나뿐인 공간

외로움..? 그건 단지 너를 만나기 위한 기다림.. app@tistory.com

블로그 이미지

[펌] CPU 레지스터의 종류와 용도

Programming/Embedded 2009. 6. 11. 10:34

출처 http://thepassion.tistory.com/64

범용 레지스터( General Register )

범용 레지스터는 연산 결과를 받을 수도 있으며, 연산에 사용되어질 수도 있는 레지스터로 과거 8bit컴퓨터에서는 연산 결과를 저장하기 위하여 특정 레지스터를 사용할 수 밖에 없었으나 8086에서는 범용 레지스터를 사용하여 모든 연산을 수행 할 수 있다

AX( AH, AL )

Accumulator Register

산술, 놀리 연산의 중심이 되는 레지스터이며, Input/Output 포트의 입출력 명령 또한 주로 이 레지스터를 사용한다.

BX( BH, BL )

Base Register

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

CX( CH, CL )

Count Register

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

DX( DH, DL )

Data Register

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

포인터 레지스터

SP

Stack Pointer

현재까지 사용되어진 스택의 위치를 저장하기 위하여 사용되는 레지스터로 세그먼트 레지스터 SS와 함께 사용된다.

BP

Base Pointer

스택의 데이터를 액세스 하기 위해 사용된다.

인덱스 레지스터

SI, DI

Source Index

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

IP( 명령 포인터 )

IP

Instruction Pointer

이 레지스터는 언제나 다음에 실행할 명령이 들어 있는 메모리의 번지를 가리킨다. CS 세그먼트 레지스터와 한 쌍이 되어 실행 번지가 만들어 진다.

플래그 레지스터

8086에는 16비트로 된 플래그 레지스터가 준비되어 있다. 연산의 결과 및 시스템 제어를 위한 정보가 각각 배정되어 있다.

상태 플래그

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

 

 

 

O

D

I

T

S

Z

 

A

 

P

 

C

Flags

Status Flags

CF

Carry Flag

연산 명령 실행 후 최상위 비트(MSB)에 덧셈에 따른 자리올림(carry) 또는 뺄셈에 의한 빌림(borrow)이 생길 때 설정된다.

PF

Parity Flag

연산의 결과 하위 8비트 중에서 1로 되어 있는 비트의 개수가 짝수 개일 때 셋(1)되고, 홀수 개일 때는 리셋(0)된다.

AF

Auxiliary Flag

연산의 결과 하위 4비트에 자리올림 또는 빌림이 TODRURT을 경우 설정된다. 10진 연산 처리를 할 경우에 이용된다.

ZF

Zero Flag

연산 결과가 0이 될 때 설정된다. 비교 명령 등도 레지스터의 내용은 변경시키지 않지만 뺄셈이 이루어지므로 그 결과에 따라서 설정된다.

SF

Sing Flag

연산 결과 최상위 비트가 1일 때 설정되고, 0일 때 리셋된다. 부호가 있는 수치의 경우에는 최상위 비트(MSB)가 1이면 음수를 표시한다.

OF

Overflow Flag

부호 연산 처리의 결과 부호부 2진 표시로 오버플로우가 생겼을 때 설정된다. 바이트 연산에서는 -128~+128, 워드 연산에서는 -32768~+32767의 범위를 초과했다는 것을 표시한다.

컨트롤 플래그

Flags

Status Flags

DF

Direction Flag

스트링 처리에서 연속하여 처리되는 문자열에 대해서 그 처리 방향을 표시한다. 스트링 명열의 실행에 앞서서 이 플래그를 설정도는 리셋하여 처리 방향을 정해 둔다. 즉, DF 플래그가 0일 때에는 하위 번지로부터 상위 번지 쪽으로 처리되며, DF 플래그가 1일 때에는 상위 번지로부터 하위 번지 쪽으로 처리된다.

IF

Interrupt Flag

8086의 인터럽트 중에서 하드웨어로부터의 인터럽트에 관하여 제어를 한다. IF 플래그가 1일 때에는 인터럽트를 받아들이고, 0일 때에는 인터럽트를 받아들이지 않는다.

TF

Trap Flag

명령 실행 후 이 플래그가 세트되어 있으면 단일 스텝 인터럽트가 발생한다. 이 기능을 사용하면 하드웨어의 도움을 받을 필요 없이 프로그램을 한 명령씩 실행 시켜 동작을 확인할 수 있다.

세그먼트 레지스터

프로그램이 수행되기 위해서는 여러 가지 메모리 주소가 필요하다. 우선 현재 수행되고 있는 명령어의 위치를 나타내는 값, 프로그램이 사용하는 데이터가 있는 메모리 값, 그리고 함수 호출등을 휘한 스택의 위치를 나타내는 값 .

8086은 어드레스 버스가 20비트로 구성되어 있어서 1MByte까지 메모리 번지를 나타낼 수 있으나 8086에 있는 레지스터는 16비트 밖에 되지 않아서 어떤 명령이 수행되어 메모리를 참조할 때에는 항상 다음과 같이 암시적 또는 명시적으로 세그먼트 레지스터가 개입된다.

세그먼트

오프셋

목적

CS( Code Segment )

IP

수행되어질 명령어의 위치

DS( Data Segment )

AX, BX, CX, DX와 같은 범용레지스터와 BX, DI,SI

데이터 주소 참조

SS( Stack Segment )

SP 또는 BP

스택 주소 참조

ES( E Segment )

스트링 명령어를 위한 DI

스트링 목적지 주소

 

CPU에서 어떤 명령이 실행되기 위해서는 메모리에 있는 내용이 CPU로 전달되어야 하는데, CPU와 메모리 사이에 데이터가 매번 전송되는 것이 성능상에 문제가 될 수 있기 때문에 CPU 내에 여러 개의 임시 저장소를 가지고 있는데 이를 레지스터(Register)라고 합니다. CPU가 발전함에 따라 레지스터의 크기가 변하기도 하고, 새로운 기능이 추가되면서 레지스터가 추가되기도 합니다. 여기서는 Intel 80386 CPU를 기준으로 가장 일반적으로 사용되는 레지스터들을 나열해 보았습니다.

 

각 레지스터에 대한 보다 자세한 내용은 Intel CPU manual(http://www.intel.com/products/processor/manuals/)을 참고하시기 바랍니다.

 

일반목적의 레지스터

l  EAX : Accumulator (함수의 return value로 사용)

l  EBX : Points to data in DS

l  ECX : Counting

l  EDX : I/O pointer

l  ESI : Source ptr for strings

l  EDI : Destination ptr fro strings

 

특수한 목적의 레지스터

l  ESP : Stack pointer (현재 thread stack의 top 위치를 가리키는 pointer)

l  EBP : Points to data on stack (stack frame을 구성하는데 사용)

l  EIP : Instruction pointer(다음에 CPU에서 실행되어야 할 instruction을 가리킴)

 

EFLAGS 레지스터

l  Status Flags

n  CF : Carry Flag

n  PF : Parity Flags

n  AF : Auxiliary Carry Flag

n  ZF : Zero Flag

n  SF : Sign Flag

n  OF : Overflow Flag

l  Control Flag

n  DF : direction Flag

l  System Flags

n  IF : Interrupt Enable Flag

n  TF : Trap Flag

n  IOPL : I/O Privilege Level

n  NT : Nested Task Flag

n  RF : Resume Flag

n  VM : Virtual 8086 mode

n  AC : Alignment Check (486 only)

 

Segment 레지스터

l  CS : Code segment

l  DS : Data segment

l  SS : Stack segment

l  ES : Extra data segment

l  FS : Extra data segment introduced with 386

l  GS : Extra data segmet introduced with 386
Posted by appHunter
현재 브라우저에서는 댓글을 표시할 수 없습니다.
IE9 이상으로 브라우저를 업그레이드하거나, 크롬, 파이어폭스 등 최신 브라우저를 이용해주세요.
블로그 이미지

외로움..? 그건 단지 너를 만나기 위한 기다림.. app@tistory.com

by appHunter

공지사항

  • 티스토리 초대장 배포 합니다.

태그

아이폰 4 오늘만 무료 어플 앱헌터 오늘만 무료 어플 어플 오늘만 무료 앱 아이튠즈 오늘만 무료 모바일게임 아이폰 오늘만무료 아이폰 추천 어플 아이폰 아이폰 4 무료 어플 아이폰 무료 어플 미국 무료 계정 생성 앱헌터 어플 추천 오늘만 무료 어플리케이션 오늘만무료어플 오늘만 무료 어플 아이폰 게임 아이폰 오늘만 무료 어플 아이폰 4 appHunter 사전등록 아이폰 오늘만 무료 아이튠즈 무료 어플 미국 계정 무료 어플 오늘만 무료 오늘만무료 아이폰 어플 무료 어플 iPhone

최근에 올라온 글

  • 더 보기

최근 댓글

최근에 받은 트랙백

글 보관함

달력

«   2025/07   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

링크

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
appHunter's Blog is powered by daumkakao
Skin ⓘ material T Mark1 by 뭐하라

ⓒ 2015. appHunter all rights reserved.

favicon

가식적인 놈의 하나뿐인 공간

외로움..? 그건 단지 너를 만나기 위한 기다림.. app@tistory.com

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (1014)
    • My Story (73)
      • 하루 하루 (70)
      • Skill / Spec (3)
      • 작성중 (0)
    • 안드로이드 (63)
    • iPhone (677)
      • 일반 (51)
      • 이벤트 팡팡 (9)
      • 오늘만 무료 (537)
      • 앱모아 (8)
      • Weekly Apps (7)
      • 어플 리뷰 (65)
    • 리뷰 (2)
      • 신혼집 (1)
      • 맛집 (1)
    • Programming (113)
      • Embedded (12)
      • Language (20)
      • Database (9)
      • Web (15)
      • BOOK (5)
      • Software (30)
      • System (11)
      • 영상 (7)
      • 안드로이드 | Android (1)
    • 프로젝트 (55)
      • 주차관리시스템 (12)
      • 심심풀이 (7)
      • Design (2)
      • 프로젝트 M - 아이폰 어플 (2)
    • INFO (30)
      • Job (9)
      • 재테크 (4)
      • 맛 (5)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바