본문 바로가기

Assembly

Register 정리

1) General-Perpose Register

operand    
r8 8-bit general-purpose register AH, AL, BH, BL, CH, CL, DH, DL
r16 16-bit general-purpose register AX, BX, CX, DX, SI, DI, SP, BP
r32 32-bit general-purpose register EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP
reg any general-purpose register  

 

1> EAX (Accumulator Register) 

- 저장 : 상수/변수 값의 저장(연산 결과 저장)

- data 이동 및 일시적 저장

- 입출력 명령

2> EBX (Base rRegister)

- 주소의 간접 지정

- data 이동 및 일시적 저장

3> ECX (Counter Register)

- Counter : 반복문, 문자열 명령어, 비트 이동, 회전 명령 등에서 Counter(세고 있다.) 

(REP(반복 레지스터)에 얼마나 반복할 것인지 ECX에 저장)

- data 이동 및 일시적 저장

4> EDX (Data Register)

- EAX(AX류) 보조 : EAX 혼자서 담을 수 없는 data를 저장

  • 큰 data (ex> 곱셈)
  • 나눗셈할 때 몫은 EAX, 나머지는 EDX에 

- 입출력 주소 지정 (간접 번지 지정에 의한 입출력 명령을 실행)

- data 이동 및 일시적 저장

 

 

5> ESI (Source Index)

- 출발지 주소 저장 (복사나 비교를 할 때)

6> EDI (Destination Index)

- 목적지 주소 저장 (복사나 비교를 할 때)

 

 

7> ESP (Stack Pointer)

- Stack Pointer의 가장 최근에 저장된 공간의 주소를 저장 (Stack이 쌓일 때마다 ESP 값이 1 증가한다.)

(나의 stack은 지금 어디있는가?)

8> EBP (Base Pointer)

- Stack Pointer의 기준 주소(바닥 부분)을 저장

9> EIP (Instruction Pointer)

- 수행할 다음 명령어가 저장되어 있는 주소를 저장

 

10> EFLAGS

- 16bit인 flag register가 확장된 register

(아래 나올 register들이 flag register인 듯)(아래 flag register는 1 bit만 차지하는 듯)

 

11> Sign Flag (부호 플래그)

- 연산 결과 최상위 bit(부호 자리)가 1인 경우 1로 설정 (즉, 음수 일때, 1로 설정)

12> Overflow Flag 

(signed arithmetic의 결과 범위를 초과하면)

- 연산의 결과가 용량 초과하였을 경우 1로 설정

13> Zero Flag 

- 연산의 값이 0일 경우 1로 설정

14> Carry Flag

(unsigned arithmetic의 결과 범위를 초과하면)

- 덧셈과 뺄셈에서 각각 Carry(자리 올림)과 Borrow(부호 비트 앞 비트에 변경이 생김)이 발생할 때 1로 설정

15> Auxiliary Carry Flag

- carry from bit 3 to bit 4 (3번째에서 4번째 bit로 가는 carry over가 발생했을 때)

16> Parity Flag

- sum of 1 bits is an even number (결과의 1의 개수가 짝수 일 때)