교육/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)
|
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 - 통합개발환경
- 텍스트에디터와 컴파일러 디버거 까지 있기 때문에 (이런 것을 통합 개발환경이라 한다.)