728x90

 

mov dst, src : src의 값을 dst로 넘긴다. ex) mov eax, 100 -> 100을 eax에 저장한다.

 

LEA dst, src : LEA는 특정 배열에 접근할려고 할때 많이 사용한다. 연산을 포함하여 복사가능하다. ex) LEA EAX, EAX+1000 -> eax에 1000을 더한값을 다시 eax에 삽입한다.

ex) LEA EAX, [EAX+1000] -> [ ]대괄호는 어셈블리에서 주소가 가리키는 값을 의미한다. 즉 EAX에서 1000을 더한 주소가 가리키는 값을 EAX에 넣어라 라는 의미의 명령어가 된다.

 

JMP : 특정 위치로 건너뛰어 코드를 실행시킨다.

 

CALL : 함수 호출을 위해 사용된다. JMP를 통해 해당 함수로 이동하여 명령어 실행후 함수종료후 RET을 통해 돌아온다.

CALL은 JMP와 다르게 다시 돌아오는 RET이 포함되어있다.

 

NOP : 아무작업도 하지않는 명령어이다. 1Byte 공간을 차지한다.

 

RET : 현재 함수가 끝난 뒤에 돌아갈 주소를 지정하기 위해 사용한다.

 

PUSH : 스택에 해당값을 저장할때 사용된다.

 

POP : 스택에 있는 값을 가져올때 사용된다.

 

LEAVE : 현재까지의 메모리 스택을 비우고 EBP를 자신이 호출한 메모리 주소로 채운다.

 

nasm은 문자와 문자열을 구분하지 않는다.

 

db 'hello' 와 db 'h','e','l','l','o'는 같다.

 

msg db 'Hello World!!!',10,00

은 Hello World!!! 개행 문자열 종료 와 같다.(10은 \n , 00은 NULL이다.)

 

위에서 msg는 변수명이아니라 레이블이다. 레이블은 주소를 가리키는 주소의 표현이라고 생각하면 된다.

 

 

 

 

 

 

 

 

 

 

 

어셈블리 컴파일

 

 

목적파일 생성

nasm -f elf64 -o abc.o abc.s

 

실행 파일

ld -o abc abc.o

 

어셈블리 소스코드 마지막에

mov rax, 60

syscall

을 넣어주지 않으면 세그멘테이션 오류 발생 

 

728x90

'Programming > assembly' 카테고리의 다른 글

nasm x64 assembly strlen 구현  (0) 2020.03.10
loop  (0) 2020.03.01
echo  (0) 2020.03.01
sum.c 스택 프레임  (0) 2020.03.01
메모리 구조  (0) 2020.03.01

+ Recent posts