교육/ASSEM

어셈블리어의 기초

솔♡ 2014. 7. 18. 17:26
EAX, EBX, ECX, EDX를 'data registers' or 'general registers'. 라고 부른다


EAX - accumulator 라 부른다.
  • EAX는 가장 자주사용하는 레지스터이기 때문에 조금 더 빠르게 작동하게 만들었다. (그래서 따로 이름이 붙음)
  • (EAX, EBX, ECX, EDX 다 자주사용하지만 그 중에 EAX를 제일 자주 사용한다.)

* ARM의 경우에는 레지스터 수가 많기때문에 모두가 accumulator라고 할 수 있는데 intel의 경우에는 레지스터의 수가 적기 때문에 적은 레지스터를 최대한 활용하는 방향


CPU 가 32bit 이기 때문에 각 레지스터 들은 4byte를 사용한다.
그 중 EAX레지스터의 모양을 보여주는데 EBX, ECX, EDX 레지스터도 전부 비슷하게 생겼음.



0~31 까지 총 32bit인데 오른쪽의 16bit공간은 AX라 부른다, 왼쪽의 공간은 딱히 부르는 명칭이 없고 각각 8bit씩 사용한다.

AX - short를 사용 할 경우 AX에 데이터가 저장 됨.
  • AX의 16bit를 8bit *2 씩 잘라서  왼쪽을 AH, 오른쪽을 AL라 부름
int를 사용 할 경우 왼쪽 공간에 데이터가 저장 됨. 
  • intel의 경우 레지스터앞에 E가 붙으면 32bit 아니면 16bit 이하이다.    



int A = 100;
short B = 100;
char C = 100;

mov A, 100
mov B, 100
mov C, 100

C언어의 경우 - 100이 각각 A, B, C에 입력됨.

어셈블리의 경우 - 어셈블리는 일을 2가지 수행함.
                           mov A의주소, 100

A = A + 1;

1. mov  EAX, A의 주소
2. add   EAX, 1
3. mov  A의 주소, EAX

A = A + 1;
B = B + 1;
C = C + 1;

1. mov  EAX, A의 주소
2. add   EAX, 1
3. mov  A의 주소, EAX

A의 경우 = 왼쪽의 bit
B의 경우 = EAX -> AX
C의 경우 = EAX -> AL


ESI, EDI, ESP, EBP도  'general registers' 라고 부른다. (마찬가지로 자주 사용함)

ESI 와 EDI의 경우 'index registers'라고 주소 레지스터인데 주로 주소를 저장할 때에 사용한다. (복사하여서)

ESP(stack pointer) 와 EBP(base pointer)의 경우 뒤의 P는 Pointer의 약자이다. (연산할 때에는 거의 사용하지 않음) 
  •  함수를 호출 할 때(기준이 되는) 아주 중요하게 사용되는 레지스터 (stack에 사용)






CS, DS, ES, FS, GS, SS 는 16bit로 'segment registers' 이다. 
  • CS 는 코드영역의 세그먼트 (code segment)
  • DS 는 데이터 영역 (전역변수 영역) (data segment)
  • ES 는 확장영역 (extra data segment)
  • FS 는 (two additional data segments.)
  • SS 는 stack 세그먼트 (stack segment)
  • 영역을 가리키니깐 주소를 사용할 때 주로 사용 

instruction pointer - 명령어가 있는곳의 주소를 가르키는 레지스터, 명령어의 위치 저장 (Code영역)
  • 다른 CPU에서는 instruction pointer 을 Program Counter라 부른다. (같은뜻)



EFLAGS는 '
flags register' 이다. (32bit)
  • CPU가 어느 상태인지 저장하는 레지스터이다. (on / off를 나타내는 레지스터)





FS, GS = 부가적인 세그먼트



Memory-Mapped Input/Output          -     ARM / AVR 방식
  • I/O가 주소를 가진다. (C언어로 접근이 가능하다.)
Input/Ouput-Mapped Input/Output     -     Intel 방식
  • I/O가 주소를 가지지 않는다. (C언어로 접근이 불가능하다.)


컴파일방식 -> C
인터프리터방식 -> JAVA   
  • JVM이라는 자바를 해석하는 프로그램이 기계어로 번역한 후 CPU에 입력한다.


Integrated development environments - 통합개발환경
  • 텍스트에디터와 컴파일러 디버거 까지 있기 때문에 (이런 것을 통합 개발환경이라 한다.)