티스토리 뷰

x86 cpu 에서 사용되는 general purpose register 가 어떤 용도로 사용되는 가에 대한 설명

http://www.swansontec.com/sregisters.html

x86 General purpose Registers(GPRs)

  • EAX - Accumulator Register
  • EBX - Base Register
  • ECX - Counter Register
  • EDX - Data Register
  • ESI - Source Index
  • EDI - Destination Index
  • EBP - Base Pointer
  • ESP - Stack Pointer


설명

8개의 범용 registers (general purpose registers, GP register) + 1 more

  1. EAX : accumulator register
    1. accumulator 가 사용한다. 다시 얘기하면 계산할 때 쓰인다
      x86 instruction set 에 있는 많은 최적화된 instructions 들이 EAX 에 data 를 넣고 계산하도록 디자인되었다.
    2. 그리고 function call 에서 return value 를 저장할 때 쓰인다
      EAX 의 값에 따라 function call 이 실패했는지, 성공했는지가 정해지고, EAX 값을 바꾸는 것으로 어떤 값이 return 되었는지도 조작할 수 있다.
  2. EDX : data register
    1. 기본적으로 EAX register 의 확장이다. 곱셉이나, 나눗셈같은 좀 더 복잡한 계산을 위한 추가적인 data 를 저장하는 데 도움을 준다.
    2. 일반적으로 data 를 저장할 때도 쓰이지만, 주로 EAX register 와 함께 수행되 계산과 함께 쓰인다.
  3. ECX : count register
    1. loop 을 돌 때 쓰인다.
    2. ECX 는 언제나 감소하는 방향으로 수를 센다. 10을 세는 경우가 있다면, 10에서 시작해서 9, 8 이런 식으로 count 를 한다.
  4. ESI : source index
    1. data operation 을 위한 source index 이다.(여기서 source 는 소스코드를 이야기하는 것이 아니다. destination 의 반대되는 의미의 source 이다.)
    2. input data stream 의 위치를 가지고 있다.
    3. reading 을 위한 것이라고 보면 된다.
  5. EDI : destination index
    1. data operation 의 결과가 저장되는 곳을 가리킨다.
    2. writing 을 위한 것이라고 보면 된다.
  6. EBP : base pointer
    1. call stack 의 base(=bottom)을 가리킨다. ( argument 가 있다.)
    2. 상황에 따라 compiler 가 EBP register 를 stack frame pointer 로 사용하지 않기 위해 최적화를 사용한다. 이러면, EBP 는 free 되고 다른 GP register 처럼 사용할 수 있다.
  7. ESP : stack pointer
    1. function call 과 stack 작업을 위해 쓰인다.
    2. call stack frame 의 top 을 가리킨다.(return value 가 top 에 있다.)
  8. EBX
    1. 특정 작업을 위해 디자인 되지 않았다. 그냥 여분의 저장공간으로 사용된다.
  9. EIP : instruction pointer
    1. 수행되고 있는 current instruction 을 가리킨다.

 

Reference

  1. Gray Hat Python, 2009


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함