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
을 넣어주지 않으면 세그멘테이션 오류 발생
'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 |