데이터 타입 :
Type |
Usage |
BYTE |
8비트 부호없는 정수 |
SBYTE |
8비트 부호있는 정수 |
WORD |
16비트 부호없는 정수 |
SWORD |
16비트 부호있는 정수 |
DWORD |
32비트 부호없는 정수 |
SDWORD |
32비트 부호있는 정수 |
FWORD |
48비트 정수 |
QWORD |
64비트 정수 |
TBYTE |
80비트 정수 |
REAL4 |
IEEE표준의 32비트 실수 |
REAL8 |
IEEE표준의 64비트 실수 |
REAL10 |
IEEE표준의 80비트 실수 |
피연산자(operand) 타입 :
피연산자 | 설명 |
---|---|
어셈블리 명령어 :
명 령 어 |
설 명 |
|
Data Transfer |
||
MOV |
Move |
데이터 이동 (전송) |
PUSH |
Push |
오퍼랜드의 내용을 스택에 |
POP |
Pop |
스택으로부터 값을 뽑아낸다. |
XCHG |
Exchange Register/memory with Register |
첫 번째 오퍼랜드와 두 번째 |
IN |
Input from AL/AX to Fixed port |
오퍼랜드로 지시된 |
OUT |
Output from AL/AX to Fixed port |
오퍼랜드가 지시한 |
XLAT |
Translate byte to AL |
BX:AL이 지시한 |
LEA |
Load Effective Address to Register |
메모리의 오프셋값을 |
LDS |
Load Pointer to DS |
REG←(MEM), |
LES |
Load Pointer ti ES |
REG←(MEM), |
LAHF |
Load AH with Flags |
플래그의 내용을 |
SAHF |
Store AH into Flags |
AH의 특정 비트가 |
PUSHF |
Push Flags |
플래그 레지스터의 |
POPF |
Pop Flags |
스택으로부터 플래그 |
Arithmetic |
||
ADD |
Add |
캐리를 포함하지 않은 |
SBB |
Subtract with Borrow |
캐리를 포함한 뺄셈 |
DEC |
Decrement |
오퍼랜드 내용을 1 감소 |
NEG |
Change Sign |
오퍼랜드의 2의 보수, |
CMP |
Compare |
두 개의 오퍼랜드를 |
ADC |
Add with Carry |
캐리를 포함한 덧셈 |
INC |
Increment |
오퍼랜드 내용을 1 증가 |
AAA |
ASCII adjust for Add |
덧셈 결과 AL값을 |
DAA |
Decimal adjust for Add |
덧셈 결과의 AL값을 |
SUB |
Subtract |
캐리를 포함하지 않은 뺄셈 |
AAS |
ASCII adjust for Subtract |
뺄셈 결과 AL값을 |
DAS |
Decimal adjust for Subtract |
뺄셈 결과의 AL값을 |
MUL |
Multiply (Unsigned) |
AX와 오퍼랜드를 |
IMUL |
Integer Multiply (Signed) |
부호화된 곱셈 |
AAM |
ASCII adjust for Multiply |
곱셈 결과 AX값을 |
DIV |
Divide (Unsigned) |
AX 또는 DX:AX |
IDIV |
Integer Divide (Signed) |
부호화된 나눗셈 |
AAD |
ASCII adjust for Divide |
나눗셈 결과 AX값을 |
CBW |
Convert byte to word |
AL의 바이트 데이터를 |
CWD |
Convert word to double word |
AX의 워드 데이터를 |
Logic |
||
NOT |
Invert |
오퍼랜드의 1의 보수, |
SHL/SAL |
Shift logical / arithmetic Left |
왼쪽으로 오퍼랜드만큼 |
SHR |
Shift logical Right |
오른쪽으로 오퍼 |
SAR |
Shift arithmetic Right |
오른쪽 자리이동, |
ROL |
Rotate Left |
왼쪽으로 오퍼랜드 |
ROR |
Rotate Right |
오른쪽으로 오퍼랜드 |
RCL |
Rotate through Carry Left |
캐리를 포함하여 왼쪽으로 |
RCR |
Rotate through Carry Right |
캐리를 포함하여 |
AND |
And |
논리 AND |
TEST |
And function to Flags, no result |
첫 번째 오퍼랜드와 |
OR |
Or |
논리 OR |
XOR |
Exclusive Or |
배타 논리 합 (OR) |
String Manipulation |
||
REP |
Repeat |
REP 뒤에 오는 스트링 |
MOVS |
Move String |
DS:SI가 지시한 메모리 |
CMPS |
Compare String |
DS:SI와 ES:DI의 내용을 |
SCAS |
Scan String |
AL 또는 AX와 ES:DI가 |
LODS |
Load String |
SI 내용을 AL 또는 |
STOS |
Store String |
AL 또는 AX를 ES:DI가 |
Control Transfer |
||
CALL |
Call |
프로시저 호출 |
JMP |
Unconditional Jump |
무조건 분기 |
RET |
Return from CALL |
CALL로 스택에 PUSH된 |
JE/JZ |
Jump on Equal / Zero |
결과가 0이면 분기 |
JL/JNGE |
Jump on Less / not Greater or Equal |
결과가 작으면 분기 |
JB/JNAE |
Jump on Below / not Above or Equal |
결과가 작으면 분기 |
JBE/JNA |
Jump on Below or Equal / not Above |
결과가 작거나 같으면 |
JP/JPE |
Jump on Parity / Parity Even |
패리티 플레그가 1이면 분기 |
JO |
Jump on Overflow |
오버플로가 발생하면 분기 |
JS |
Jump on Sign |
부호 플레그가 1이면 분기 |
JNE/JNZ |
Jump on not Equal / not Zero |
결과가 0이 아니면 분기 |
JNL/JGE |
Jump on not Less / Greater or Equal |
결과가 크거나 같으면 |
JNLE/JG |
Jump on not Less or Equal / Greater |
결과가 크면 분기 |
JNB/JAE |
Jump on not Below / Above or Equal |
결과가 크거나 같으면 |
JNBE/JA |
Jump on not Below or Equal / Above |
결과가 크면 분기 |
JNP/JPO |
Jump on not Parity / Parity odd |
패리티 플레그가 |
JNO |
Jump on not Overflow |
오버플로우가 아닌 |
JNS |
Jump on not Sign |
부호 플레그가 0이면 분기 |
LOOP |
Loop CX times |
CX를 1감소하면서 0이 될 |
LOOPZ/LOOPE |
Loop while Zero / Equal |
제로 플레그가 1이고 |
LOOPNZ/LOOPNE |
Loop while not Zero / not Equal |
제로 플레그가 0이고 |
JCXZ |
Jump on CX Zero |
CX가 0이면 분기 |
INT |
Interrupt |
인터럽트 실행 |
INTO |
Interrupt on Overflow |
오버플로우가 발생하면 |
IRET |
Interrupt Return |
인터럽트 복귀 (리턴) |
Processor Control |
||
CLC |
Clear Carry |
캐리 플레그 클리어 |
CMC |
Complement Carry |
캐리 플레그를 반전 |
CLD |
Clear Direction |
디렉션 플레그를 클리어 |
CLI |
Clear Interrupt |
인터럽트 플레그를 클리어 |
HLT |
Halt |
정지 |
LOCK |
Bus Lock prefix |
|
STC |
Set Carry |
캐리 플레그 셋 |
NOP |
No operation |
|
STD |
Set Direction |
디렉션 플레그 셋 |
STI |
Set Interrupt |
인터럽트 인에이블 |
WAIT |
Wait |
프로세서를 일지 정지 |
ESC |
Escape to External device |
이스케이프 명령 |
8086 지시어
지시어 |
내 용 |
형 식 |
SEGMENT |
어셈블리 프로그램은 한 개 이상의 세그먼트들로 구성된다. SEGMENT 지시어는 하나의 세그먼트를 정의한다. |
segname SEGMENT ; |
PROC |
매크로 어셈블리에서는 프로그램의 실행 부분을 모듈로 작성할 수 있다. 이 모듈을 프로시저(Procedure)라 부르며, PROC 지시어가 이를 정의한다. |
procname PROC ; |
ASSUME |
어셈블러에게 세그먼트 레지스터와 사용자가 작성한 세그먼트의 이름을 연결시킨다. |
ASSUME SS: |
END |
전제 프로그램의 끝을 나타냄 |
END |
데이터 정의 지시어 : 프로그램에서 데이터를 저장할 기억 장소를 정의, 초기값 부여 |
||
DB |
Define Byte |
name DB 초기값 |
DW |
Define Word |
name DW 초기값 |
DD |
Define Double Word |
name DD 초기값 |
DQ |
Define Quad Word |
name DQ 초기값 |
DT |
Define Ten Bytes |
name DT 초기값 |
EQU |
변수 이름에 데이터값이나 문자열 정의 |
name EQU |
= |
EQU와 달리 정의된 값을 변경 가능 |
|
EVEN |
어셈블리시 이 지시어가 사용되는 곳의 주소가 짝수로 되도록 함 |
|
PAGE |
어셈블리 리스트의 형식을 결정 |
PAGE [length][,width] |
TITLE |
어셈블리 리스트의 각 페이지에 제목 출력 |
TITLE text |
출처:http://linkc.tistory.com/ 어셈블리어 정리
'* IT > Digital forensic' 카테고리의 다른 글
[울산지방경찰청 및 수원남부경찰서]온라인 명예훼손관련 출석통지서 관련 바이러스 메일 (0) | 2019.02.11 |
---|---|
mimikatz 를 이용한 윈도우 비밀번호 해킹 (0) | 2016.12.06 |
올리디버거 Crack me 문제풀이1 (1) | 2012.02.05 |
올리디버거(OllyDbg) 사용법과 다운로드 (0) | 2012.02.03 |