CIL 어셈블리 언어

프로시저(procedure)

3.5) 프로시저(procedure)

잘 알고 있듯이 main 프로시저의 본체에만 코드를 작성하면 가독성과 생산성이 아주 나빠지므로가능한 한 프로시저를 역할 별로 분리하는 것이 좋다. CIL에서도 여러 개의 프로시저를 사용자가 정의하고 호출할 수 있다.

Procedure.c

#include "../CIL/CIL.h"

STRING sHello = "Hello, procedure!";

 

// 프로시저 hello를 정의합니다.

PROC(hello)

 

PUSH(sHello);

INVOKE(print_str)

 

ENDP

 

// main

PROC(main)

 

// hello 프로시저를 호출합니다.

INVOKE(hello)

 

ENDP

여기에는 흥미로운 사실 하나가 더 있는데같은 파일 내부라면 순서를 생각할 필요 없이 프로시저를 정의하고 호출할 수 있다는 것이다즉 다음은 적법한 코드이다.

Procedure.c

#include "CIL.h"

STRING sHello = "Hello, procedure!";

 

// main

PROC(main)

// hello 프로시저를 호출합니다.

INVOKE(hello)

ENDP

 

// 프로시저 hello를 정의합니다.

PROC(hello)

 

PUSH(sHello);

INVOKE(print_str)

 

ENDP

정상적인 프로젝트를 만들었음에도 불구하고 이것이 지원되지 않는다면컴파일러가 내부적으로 이를 지원하지 않을 가능성이 있다이 경우 호출 전즉 코드의 위 부분에 다음과 같이 적는다.

PROTO(<procedure_name>); // ex) PROTO(hello);

참고로 이 경우 컴파일러가 오류를 뱉는 건컴파일러가 최신 표준을 잘 지키고 있기 때문이다구형 C에서는 암묵적인 함수 호출이 표준에 있었지만, C99 표준 이후로는 모두 금지되어있다. Visual Studio 2013은 이것이 가능한 개발 도구 중의 하나인데이유는 하위 호환 때문이니 결코 Visual Studio가 다른 컴파일러보다 우수하거나다른 컴파일러가 뒤떨어지는 것으로 오해하는 일이 없었으면 좋겠다.

댓글

댓글 본문
graphittie 자세히 보기