세그먼트 레지스터:
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레지스터를 보조해주는 레지스터
=========================================================================
' 해당 주소에 피연산자를(로) 명령어 하라. '
피연산자란?
- 명령어의 대상과 목적
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 |