|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=7892 [복사]
EAX (Accumulator)
- 산술, 논리 연산의 중심이 되는 레지스터이다.
- 산술, 논리 연산을 할 때 EAX에 많이 넣고 사용한다.
- 함수의 리턴 값을 저장하는 레지스터이다.
(즉 EAX는 하나이기 때문에 리턴 값은 2개 이상이 될 수 없다.)
EBX (Base Register)
- 간접 번지 지정 시 사용된다.
※ 간접 번지 : int array[]={1,3,5}; 에서 3이라는 변수를 쓰고싶으면 array[1]을 사용해서 인덱스에 접근해 주
는데 여기서 1이 간접 번지이다. array[1]을 풀어서 쓰면
*(array+2)가 된다.
ECX (Count Register)
- 루프와 같은 명령의 반복수행이 필요로 할 떄 반복횟수 지정에 주로 사용한다.
- C에서 사용하는 while, for문의 반복문과는 다르다.(Assembly에서 사용하는 반복)
- ECX에 n을 넣으면 n번 돈다는 뜻이다.
EDX (Data Register)
- 간접 번지 지정에 사용되며, 곱셈 나눗셈을 할 때에는 보조 Accumulator로 사용 되어 지기도함.
- EAX를 도와준다는 느낌이 강하다.
- 2의 32승은 대략 42억 정도가 되는데, 어떤 값을 곱했을 때 그 결과가 42억이 넘어가면, EAX의 앞에 EDX가 붙어서
도와준다. (범용 레지스터는 32bit라서 EAX로는 2의 32승, 약 42억 정도 밖에 표현하지 못한다.
포인터 레지스터(Pointer Register)
- 스택과 관련이 있는 레지스터이다.
ESP (Stack Pointer)
- 스택의 가장 윗 부분을 가리킨다.
- Top Pointer라고도 한다.
- Full Descending 방식을 사용하는 Intel Architecture의 경우, 가장 최근에 스택에 들어온 데이터를 가리킨다.
EBP (Base Pointer)
- 스택의 바닥을 가리킨다.
- Stack Frame을 사용할 경우 현재 실행중인 함수를 호출한 함수가 사용하는 Stack Frame의 바닥을 가리킨다.
인덱스 레지스터 (Index Register)
- 문자열과 관련된 레지스터
- 다른 범용 레지스터와 마찬가지로 연산과 간접 번지 지정에 사용된다.
- 문자열을 비교하거나 전송하는 스트링 명령에서는 다음과 같이 사용된다.
ESI (Source Index)
- 복사 혹은 비교를 하는데 사용되는 Source 문자열을 나타낸다.
EDI (Destination Index)
- 복사 혹은 비교를 하는데 사용되는 Destination 문자열을 나타낸다.
------------------------------------------------------------------------------------
명령어
POP
ex) POP [Operand]
- ESP가 가르키는 곳에 저장된 내용을 Destination Operand 에 저장 후 ESP값 조정
( Ascending Stack : ESP값 감소, Descending Stack : ESP 값 증가 )
MOV
ex) MOV [Destination], [Source]
- 데이터 복사 ( 값 복사 )
용도:1. 레지스터 -> 메모리로 복사
2. 메모리 -> 레지스터로 복사
3. 레지스터 -> 레지스터로 복사
4. 메모리 or 레지스터에 값을 넣음
※ 메모리 -> 메모리로 복사 시에는 사용하지 않는다!
(메모리에서 메모리로는 복사가 불가능하다, 메모리 -> 레지스터 -> 메모리와 같은 방식으로 해야 가능하다
※ Destination Operand와 Source Operand의 크기가 다를 때는 사용하지 못한다. |
Hit : 15108 Date : 2013/07/18 01:51
|