#asm
스택 프레임에 데이터를 삽입할 떄 사용한다. 이때 스택 포인터는 감소한다. (위에서 언급하였듯이 스택프레임에서 데이터의 삽입은 높은 주소에서 낮은 주소로 이루어지기 때문에 스택 포인터는 감소한다.)
스택 프레임에서 데이터를 삭제할 때 사용한다. 삭제된 명령어는 반환값으로 받아서 사용이 가능하며, 이때 스택 포인터는 증가하게 된다.
데이터를 이동할 때 사용한다. 예를 들어 명령어가 mov destination, source
인 경우 source의
값을 destination에 저장한다. mov 명령어로 레지스터와 레지스터, 레지스터와 메모리 사이의
이동은 가능하지만 메모리에서 메모리로의 이동은 불가능하다.
데이터의 값을 이동할 때 사용한다. 비슷한 기능을 가진 mov와 예를 들어 비교해보면
mov eax, [ebp+10]
vs lea eax, [ebp+10]
mov 명령어는 ebp의 주소에서 10만큼 더한 주소가 가진 데이터 값을 eax에 대입하고, lea 명령어는 현재 ebp의 주소에 10을 더한 주소 값을 eax로 대입한다.
데이터 값을 뺄때 사용한다. 예를 들어 sub destination, source
인 경우
destination = destination - source
를 수행한다.
데이터의 두 값을 비교할 때 사용한다. 예를 들어 cmp a, b
인 경우 a에서 b를 뺀
값이 0인 경우 참이 된다.
대표적인 분기문이다. cmp 명령어로 비교를 한 후 참인 경우 jmp 명령어를 이용하여 다음 실행할 위치로 이동한다.
데이터의 두 값을 더할 때 사용한다. 예를 들어 add destination, source
인 경우
destination = destination + source
를 수행한다.
초기화를 해주는 명령어이다.
함수를 호출할 때 사용한다.
함수에서 호출했던 곳으로 돌아갈 때 사용하는 명령어이다.
일반적인 포인터이다. 예를들어 "edx가 가진 주소번지에 가서 해당 주소번지의 값을 eax에 대입
하여라" 라는 의미를 C언어로 표현하면 eax = *edx;
가 되고 어셈블리어로 표현하면 mov eax, [edx]
가 된다.