My Study/asm

어셈블리어 간단 정리

 시스템을 공부한지 얼마 안된 초보지만 지금까지 많이 보았던 어셈블리어를 간단하게 정리해보겠다.


INC - 피연산자에 1을 더한다.

ex)

INC number // number++


DEC eax- 피연산자에 1을 뺀다.

ex)

DEC number // number--




ADD A B - A에 B 값을 더하여 A에 저장한다. 

ex)

ADD eax,0x1  //eax = eax + 1


SUB A B - A에 B 값을 빼서 A에 저장한다.  

ex)

SUB eax, 0x10 // eax = eax - 1


MUL - 부호가 없는 8비트일 때 al 16비트일 때 ax eax 값을  연산자에 곱한다.

ex)

MUL eax, DWORD PTR [ebp-0x4] // eax = eax * ebp+0x4 에 있는 값


DIV - 8, 16, 32 비트 부호 없는 정수의 나눗셈을 수행한다.  

ex)

MUL eax, DWORD PTR [ebp-0x4] // eax = eax / ebp+0x4 에 있는 값




MOV A B- B에서 A로 데이터를 복사한다.

ex)

MOV eax, ebp-0x4 // eax = ebp-0x4




AND A B - A와 B를 각 비트로 AND 연산한다.

ex)

  10111011

AND     10101

--------------

     10110001


OR A B - A와 B를 각 비트로 OR 연산한다.

ex)

   10111011

OR       10101

--------------

       10111111

XOR A B - A와 B를 각 비트로 XOR 연산한다. 

ex)

   10111011

OR       10101

--------------

       10101110


TEST A B - A와 B를 AND 연산하여 결과가 0이면 ZF 를 1로 설정, 0이 아니면 ZF를 0으로 설정한다.

ex)

TEST EAX, EAX // 대상의 값이 NULL인지 아닌지 확인하는 용도로 많이 사용된다.





PUSH - 플래그 레지스터를 스텍에 PUSH 한다.

ex)

PUSH ebp // 스텍에 ebp를 넣는다.



POP - ESP 레지스터를 4바이트 만큼 연산자에 복사를 하고 ESP를 4바이트 만큼 더한다.

ex)

POP ebp // 스텍에서 ebp를 뺀다.



LEA A B

  mov A, B

  sub A, 4

와 같은 의미

ex)

lea eax, DWORD PTR [ebp-4]

// MOV eax, ebp 

// SUB eax, 4




CALL - 함수 호출시 사용된다. 함수 호출 시에 EBP에 원래 위치를 저장하여 돌아 와서 CALL 함수 다음으로 실행 할 수 있게 한다.

ex)

call 0x08048500 <add> // add 함수를 호출한다.



CMP A B - A와 B를 비교한다. 

 두 연산자가 같으면 ZF가 1로 설정된다.

 두 연산자가 다르면 ZF가 0으로 설정된다.

ex)

CMP eax, 0x10 // eax와 16을 비교


NOP - 그대로 NOP 아무 일도 안한다. 만약 이곳에 오면 그냥 지나친다.


점프는 종류가 많고 그때 그때 찾아서 하는 것이 좋다고 생각하기에 따로 표를 만들겠다. 그 중 자주 사용하는건 굵게 표시


Instruction

Description

Flags

JO

Jump if overflow

OF = 1

JNO

Jump if not overflow

OF = 0

JS

Jump if sign

SF = 1

JNS

Jump if not sign

SF = 0

JE 
JZ

Jump if equal 
Jump if zero

ZF = 1

JNE 
JNZ

Jump if not equal 
Jump if not zero

ZF = 0

JB 
JNAE 
JC

Jump if below 
Jump if not above or equal 
Jump if carry

CF = 1

JNB 
JAE 
JNC

Jump if not below 
Jump if above or equal 
Jump if not carry

CF = 0

JBE 
JNA

Jump if below or equal 
Jump if not above

CF = 1 or ZF = 1

JA 
JNBE

Jump if above 
Jump if not below or equal

CF = 0 and ZF = 0

JL 
JNGE

Jump if less 
Jump if not greater or equal

SF <> OF

JGE 
JNL

Jump if greater or equal 
Jump if not less

SF = OF

JLE 
JNG

Jump if less or equal 
Jump if not greater

ZF = 1 or SF <> OF

JG 
JNLE

Jump if greater 
Jump if not less or equal

ZF = 0 and SF = OF

JP 
JPE

Jump if parity 
Jump if parity even

PF = 1

JNP 
JPO

Jump if not parity 
Jump if parity odd

PF = 0

JCXZ 
JECXZ

Jump if %CX register is 0 
Jump if %ECX register is 0

%CX = 0 
%ECX = 0


'My Study > asm' 카테고리의 다른 글

[masm] asm에서 cpp 함수 호출  (0) 2016.05.14
[masm] __asm 대신 masm을 사용해보자  (0) 2016.05.07
,

최근 댓글

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.