[ Register ] 범용 레지스터 종류 & 범용 레지스터 역할

2020. 4. 19. 16:51·Archive/Hacking
728x90
반응형

 

레지스터?

 

CPU 내부에서 사용되는 고속의 기억 장치.

 

CPU는 연산을 위해 메모리에 있는 데이터들을 레지스터로 옮깁니다.

연산을 하는 도중에도 연산 결과를 레지스터에 저장합니다.

 

 

 

 

인텔 x86 CPU 에서는 9개의 범용 레지스터를 제공하고 있습니다.

오늘 포스팅은 그 9개의 범용레지스터의 종류와, 각각의 레지스터가 어떤 임무를 부여받았는지에 대한 포스팅입니다.

 

 

 

 

 

 

 

 

레지스터 종류

 

 

 

  • EAX (Extended Accumulator Register)

    - 산술 연산 레지스터로, 곱셈과 나눗셈 명령에서 사용하고 함수의 return 값을 저장합니다.

 

 

 

 

  • EBX (Extended Base Register)

     - 산술 연산 레지스터로, ESI나 EDI와 합쳐져 인덱스에 사용됩니다. 

 

 

 

 

  • ECX (Extended Counter Register)

     - 산술연산 레지스터로, 반복 명령어(Loop) 를 사용할 때 반복 카운터를 저장하는 역할입니다. 반복 횟수를 저장하고 있습니다.

 

 

 

 

  • EDX (Extended Data Register)

     - 산술 연산 레지스터로, EAX 의 보조 역할입니다. EAX 만으로 연산 결과가 담기지 않을 때 부호 확장 명령 등으로 사용됩니다.

 

 

 

 

  • ESI (Extended Source Index)

     - 인덱스 레지스터로, 데이터를 복사 / 비교할 때 소스의 데이터 주소가 저장됩니다.

 

 

 

 

  • EDI (Extended Destination Index)

     - 인덱스 레지스터로, 데이터를 복사 / 비교할 때 목적지의 주소가 저장됩니다.

 

 

 

 

  • EBP (Extended Base Pointer)

     - 포인터 레지스터로, 스택 프레임의 시작 주소가 저장됩니다. 현재 스택프레임이 이용되는 동안은 값이 변하지 않지만, 현재의 스택프레임이 사라지면 이전의 스택 프레임을 가리킵니다.

 

 

 

 

  • ESP (Extended Stack Pointer)

     - 포인터 레지스터로, 스택 프레임의 가장 최근 주소를 저장합니다. PUSH 나 POP 등의 명령어로 값이 변합니다.

 

 

 

 

  • EIP (Extended Instruction Pointer)

     - 포인터 레지스터로, 다음 명령어가 저장된 메모리의 주소를 저장합니다.

 

 

 

 

 

EAX 사칙연산 중 곱셈과 나눗셈에 사용되며, 함수의 반환값을 저장
EBX ESI 또는 EDI 와 결합하여 인덱스에 사용되며, 산수와 변수를 저장
ECX 반복 카운터를 저장.  ECX에 반복할 횟수를 지정하여 반복레지스터가 반복 수행.
EDX EAX 보조, 부호 확장 명령 등에 사용
ESI 출발지 주소 저장
EDI 목적지 주소 저장. 주로 ESI 레지스터가 가리키는 주소 데이터 복사됨.
EBP 스택 프레임의 시작주소 저장(스택포인터의 기준점 저장)
ESP 스택 프레임의 끝 지점  주소 저장
EIP 다음 실행할 명령어주소 저장

 

 

 

 

 

 

 

 

 

 

32비트의 크기를 가진 레지스터는 하위 16비트를 다른 이름으로 사용할 수 있습니다.

 

산술연산 레지스터같은 경우, 하위 16비트를 다시 쪼개서

상위 8비트, 하위 8비트를 다른 이름으로 사용할 수 있습니다.

 

 

 

 

 

다음 포스팅은 스택 관련 포스팅으로 오겠습니다.

 

 

 

 

 

 

728x90
반응형

'Archive > Hacking' 카테고리의 다른 글

[ Linux 명령어 ] Linux command & Multi - command | 리눅스 파이프와 세미콜론 차이  (0) 2020.07.13
[ Stack ] Stack & Stack Frame | 스택이란 무엇일까?  (0) 2020.04.19
[ Pwnable ] pwnable.kr 1번 fd 풀이  (2) 2020.04.15
[ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte)  (0) 2020.04.15
[ Assemble ] 어셈블리어 덧셈(add)/뺄셈(sub) 실습  (1) 2020.04.15
'Archive/Hacking' 카테고리의 다른 글
  • [ Linux 명령어 ] Linux command & Multi - command | 리눅스 파이프와 세미콜론 차이
  • [ Stack ] Stack & Stack Frame | 스택이란 무엇일까?
  • [ Pwnable ] pwnable.kr 1번 fd 풀이
  • [ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte)
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    Oracle
    보안뉴스
    오라클
    자바스크립트 API
    백준 풀이
    자바스크립트
    docker
    Codeup
    파이썬 문제
    Git
    파이썬
    파이썬 알고리즘
    자바스크립트 객체
    코드업
    javascript
    카카오 100일 프로젝트
    Python
    백준 문제풀이
    백준 파이썬
    코드업 파이썬 기초 100제
    Django
    백준
    코드업 기초
    장고
    파이썬 백준
    C++
    파이썬 기초 문제
    비박스
    파이썬 기초
    oracle db
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Register ] 범용 레지스터 종류 & 범용 레지스터 역할
상단으로

티스토리툴바