어셈블리어 간단 정리
시스템을 공부한지 얼마 안된 초보지만 지금까지 많이 보았던 어셈블리어를 간단하게 정리해보겠다.
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 | Jump if equal | ZF = 1 |
JNE | Jump if not equal | ZF = 0 |
JB | Jump if below | CF = 1 |
JNB | Jump if not below | CF = 0 |
JBE | Jump if below or equal | CF = 1 or ZF = 1 |
JA | Jump if above | CF = 0 and ZF = 0 |
JL | Jump if less | SF <> OF |
JGE | Jump if greater or equal | SF = OF |
JLE | Jump if less or equal | ZF = 1 or SF <> OF |
JG | Jump if greater | ZF = 0 and SF = OF |
JP | Jump if parity | PF = 1 |
JNP | Jump if not parity | PF = 0 |
JCXZ | Jump if %CX register is 0 | %CX = 0 |
'My Study > asm' 카테고리의 다른 글
[masm] asm에서 cpp 함수 호출 (0) | 2016.05.14 |
---|---|
[masm] __asm 대신 masm을 사용해보자 (0) | 2016.05.07 |