1. Basic Execution Program Registers
위 그림은 IA-32 Architectures Software Developer's Manual Volume:1 에서 가져온 그림이다.
(아래 내용들도 역시 IA-32 Architectures Software Developer's Manual Volume:1 여기서 가져온 내용이며, 한글설명은 본인의 생각이다.)
IA-32 에서 사용되고 있는 레지스터들을 보여주고 있다.
어셈블리 프로그래밍을 할때 최소한 이 레지스터들이 뭐하는 것들인지는 알고 있어야 프로그램이 가능하므로, 공부해보도록 하자.
1.1 General-Purpose Registers
- EAX : Accumulator for operands and results data. (그냥 산술 연산에 쓰이는 레지스터. 그냥 일반적으로 많이 쓰인다. )
- EBX: Pointer to data in the DS segment. ( Base 레지스터라고 알아두면 된다. 꼭 이 용도로만 사용되는 것은 아니다.)
- ECX: Counter for string and loop operations. ( Loop 명령시 ecx 레지스터값을 보고 0 이 아니면 반복문을 실행한다. 왜 꼭 loop 를 돌때 ecx 를 참고하냐고?? intel 에서 그렇게 만들었으니까)
- EDX: I/O pointer. ( destination 레지스터라고 알아두면 된다. 꼭 이 용도로만 사용되는 것은 아니다.)
- ESI: Pointer to data in the segment pointed to by the DS register; source pointer for string operations.(source index 레지스터라고만 알아두자.)
- EDI: Pointer to data (or destination) in the segment pointed to by the ES register; destination pointer for string operations.(destination index 라고 알아두자.)
- ESP: Stack pointer (in the SS segment). ( 좀 중요하다 스택 push, pop 할때 자주 나오므로 알아두면 좋다. esp 값을 바꾸지 않아도 push, pop 명령으로 알아서 esp 값이 바뀐다.)
- EBP: Pointer to data on the stack (in the SS segment). ( base pointer 로서 esp 값이 계속 바뀌므로 스택의 기준점을 정하기 위해 ebp 사용한다. 보통 push ebp , mov ebp,esp 명령을 내린다.)
'E' 가 붙은 것은 32bit 레지스터이고 ax,bx,cx,dx 는 16bit, ah,al ... 은 8bit 이다. 자세한 이해는 아래그림을 참고하면 된다.
나머지 레지스터들은 그렇게 비중이 있는 것은 아니니까 ... skip...
필요하면 언급하겠음.