세그먼트 레지스터: 


CS(Code Segment) – 코드를 저장하는 메모리 블록 


DS(Data Segment) – 데이터를 저장하는 메모리 블록 


EX(Extra Segment) – 비디오와 관련된 것을 위해 사용됨 


SS(Stack Segment) – 루틴으로부터 리턴 어드레스를 저장하기 위해 프로세서에 의해 사용되는 레지스터  


인덱스 레지스터: 


SI(Source Index) – 문자열/배열의 소스를 지정하기 위해 사용됨. 


DI(Destination Index) – 문자열/배열의 목적지를 지정하기 위해 사용됨. 


IP(Instruction Pointer) – 다음 명령의 주소를 저장하고, 그래서 직접적으로 변경될 수 없음.   

 

스택 레지스터: 

BP(Base Pointer) – 스택 오퍼레이션을 위해 SP 와 연결되어 사용됨. 


SP(Stack Pointer)   


특별한 목적을 위한 레지스터: 

IP(Instruction Pointer) – 실행된 명령의 offset 를 가지고 있음. 


Flag – 분기(branching)를 위해 사용됨. 플래그 레지스터는 크기가 1 비트이다.

=============

EAX : 곱셈이나 나눗셈 연산 할 때 사용되는 레지스터

 

EBX : 주소 같은거 간접적으로 접근할 때 사용되는 레지스터 


ECX : 반복문 돌릴 때 루프 카운트 되는 레지스터 


EDX : EAX레지스터를 보조해주는 레지스터


EDI , ESI : 조작 , 복사시 소스데이터 주소가 저장


ESP , EBP : 스택프레임의 끝지점 주소가 저장

=========================================================================


' 해당 주소 피연산자를(로) 명령어 하라. '


피연산자란?

- 명령어의 대상과 목적

EX) 레지스터, 메모리, 레이블, 상수

Practice


※ 명령어 


 IA-32 어셈블리 명령어 모음.pdf


MOV : 원하는 곳으로 데이터를 이동 (메모리에서 메모리로는 이동 불가)

MOV 피연산자,값


XCHG : 두 레지스터의 값을 바꿈  

XCHG 레지스터1,레지스터2 


JMP : 원하는 주소나 라벨로 점프

JMP AX

JNE : 같지 않은 경우 점프

JE : 같은 경우 점프

JNZ : 0이 아닌경우의 점프

JZ : 0인 경우의 점프


CMP : 비교 명령

CMP AX ,0x8

점프 명령이 이뤄지기전에 100%일어남


ADD : 덧셈을 수행하는 사칙연산 명령

ADD 레지스터 1, 레지스터 2 

ADD 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

ADD AX,BX  ;AX 에 BX 를 더하고, 그 값을 AX 에 저장(5h + 4h = 9h = AX)


XOR : 초기화

XOR AX,AX


LEA : 주소값 가져오기

LEA AX,주소


SUB : 뺄셈을 수행하는 사칙연산 명령

SUB 레지스터 1, 레지스터 2 

SUB 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

SUB AX,BX  ;AX 에 BX 를 빼고, 그 값을 AX 에 저장(5h - 4h = 1h = AX)


INC : 피연산자 값을 1 증가

INC AX


DEC : 피연산자 값을 1 감소

DEC AX


POP : 원래 값을 회복

POP AX


PUSH : 레지스터의 값을 잠시 저장

PUSH BX


Practice


MOV AX,51h 


MOV BX,4Fh  


XCHG AX,BX  


PUSH AX 


MOV AX,34h 


POP BX  


PUSH BX  


POP AX  

'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
Reversing / 1일차  (0) 2016.04.13
1. 어셈블리어의 장단점  (0) 2016.04.03

+ Recent posts