- 함수의 정의

함수가 정의된 파일이 아닌 외부 파일에서 함수사용을 가능 하게 하기위해 함수를 PUBLIC으로
선언해 주어야 한다.

PUBLIC TEST

PUBLIC TEST,TEST2,TEST3 처럼 여러개의 함수를 ( , ) 를 사용해서 같이 적을 수 있다.



== 어셈블리 == 

TEST PROC NEAR32

push ebp           

mov ebp,esp

 함수 내용부


mov esp,ebp

pop ebp

ret

TEST ENDP
 



== C 언어 ==

void TEST(void)

{

 함수 내용부

}


 

위에서 어셈블리 함수 에서 볼수 있는

push ebp           

mov ebp,esp

는 함수의 Entry Code라 하고 함수 시작부 주소의 설정과 호출되기전 함수의 시작부 등을 설정해 주는 기능을 한다. 함수내에서 반드시 있어야 할 코드이다.

Entry Code와 함께 있어야할것이 바로 Exit Code라 불리는 아래 코드다.

mov esp,ebp

pop ebp

ret

Entry Code와 함께 반드시 있어야 하며 Entry Code에서 변경 되었던 EBP(Entry Base Point)를
다시 호출되기전 값으로 복구시키고 리턴어드레스로 돌아가게 하는 역할을 한다.

 - 함수의 선언

어셈블리 역시 C언어나 기타 언어처럼 함수의 선언이 가능하다.

어셈블리       :      EXTERN TEST:NEAR32

C 언어         :      void TEST (void)



 

- 함수 호출시의 STACK 구조

인자 없이 사용되는 함수의 호출시 메모리 STACK 구조는 다음과 같다.

                 

                   -  호출전 -

사용자 삽입 이미지

     

           -  호출 직후  -

사용자 삽입 이미지


                 -   호출시 함수 내부   -

사용자 삽입 이미지


인자가 있는 함수를 사용할 경우의 STACK 구조는 다음과 같다.

사용자 삽입 이미지


   - 함수 내부에서의 인자 접근 방식

 

사용자 삽입 이미지

Posted by 응이

Dream come true.
응이

달력

태그목록