* 어셈블리어 

- AT&T => 리눅스 개발자들이 사용, 레지스터 앞에 %, 리터럴 값 앞에 $사용. 

 

ex) CMD <source>,<dest><#command>

 

- NASM(Netwide Assembler) => 윈도우 에섬블러나 디버거들이 사용.

 

ex) CMD <dest>, <source> <;comment>

 

 

*어셈블리어 지시자

 

 

1. mov 

=> <source>에서 <dest>로 데이터를 복사. 소스에 값이 없어지지 않음.

NASM문법 NASM예제 AT&T예제
mov <dest>, <source> mov eax,51h;comment movl $51h, %eax #comment

 

ex) 

mov eax, 1234h; 16진수 값 1234를 eax로 저장

mov cs, ax; 그런 다음 ax의 값을 cs로 복사

 

 

2.  add, sub

=> add는 소스를 목적지에 더하고 결과를 목적지에 저장, sub는 목적지에서 소스를 뺀 다음 결과를 목적지에 저장.

 

NASM문법 NASM예제 AT&T예제

add <dest>, <source>

sub <dest>, <source>

add eax, 51h

sub eax, 51h

addl $51h, %eax

subl $51h, %eax

 

 

3. push, pop 

=> 스택에 아이템을 넣거나, 빼기.

 

NASM문법 NASM예제 AT&T예제

push <value>

pop <dest>

push eax

pop eax

pushl %eax

popl %eax

 

4. xor

=> xor 값, 값 을 이용하여 값을 0으로 만들거나 레지스터나 메모리 위치를 지울 수 있음.

 

NASM문법 NASM예제 AT&T예제

xor <dest>, <source>

xor eax, eax

xor %eax, %eax

 

5. jne, je, jz, jnz, jmp

=> eflag인 "zero flag" 값에 따라 다른 위치로 분기.

=> jne, jnz 는 "zero flag"=0 이면 해당 번지로 점프

=> je, jz 는 "zero flag"=1 이면 점프 

=> jmp는 항상 점프 

 

NASM문법 NASM예제 AT&T예제

jnz <dest> / jne <dest>

jz <dest> / je <dest>

 

jmp <dest> 

jne start

jz loop

 

jmp end

jne start

jz loop

 

jmp end

 

6. call, ret

=> call은 프로시저를 호출 , ret는 프로시저 끝에서 호출 후 명령어 흐름으로 되돌아갈 때 사용.

 

NASM문법 NASM예제 AT&T예제

call <dest>

ret

call subroutine1

ret

call subroutine1

ret 

 

7. inc, dec

=> 목적지 값을 늘이거나 줄이거나.

 

NASM문법 NASM예제 AT&T예제

inc <dest>

dec <dest>

inc eax

dec eax

incl %eax

decl %eax

 

8. lea 

=> 소스의 유효한 주소를 목적지로 로드

 

NASM문법 NASM예제 AT&T예제

lea <dest>, <source>

lea eax, [dsi+4]

leal 4(%dsi), %eax

 

 

9. int

=> 프로세서에 시스템 인터럽트 신호를 던짐. 사용할 공통 인터럽트는 커널에 시스템 호출을 보내는 0x80이다.

 

NASM문법 NASM예제 AT&T예제

int <val>

int 0x80

int $0x80 

'이론충' 카테고리의 다른 글

TCP/IP-1  (0) 2018.11.21

+ Recent posts