CIL 어셈블리 언어

Handy CIL 프로그래밍 언어

3.1) Handy CIL 프로그래밍 언어

이 문서에서 사용할 중간 단계 언어를 Handy C Intermediate Language라고 하겠다이 문서에서는 이를 CIL이라고 부를 것이다다음은 중간 단계 언어로 작성한 HelloWorld 프로그램이다다시 말하지만 C를 이용하여 중간 단계 언어를 흉내 낸 것이 불과하다.

HelloWorld.c

#include "CIL.h"

 

STRING sHelloWorld = "Hello, world!"; // 프로그램에 사용할 문자열을 정의합니다.

 

PROC(main) // main 프로시저의 시작 지점입니다. PROC은 procedure의 줄임말입니다.

 

PUSH(sHelloWorld) // 콘솔에 문자열을 출력하기 위해 인자를 저장합니다.

INVOKE(print_str) // 콘솔에 문자열을 출력하는 프로시저를 호출합니다.

 

ENDP // 프로시저의 정의가 종료되는 지점입니다.

한 줄 한 줄 분석해보자.

- CIL 헤더 파일중간 단계 언어를 체험하기 위해 필자가 작성한 매크로가 정의된 파일이다.

- STRING: const char * 형식으로 정의되어있으며, C 형식의 문자열과 정의하는 방법이 같다.

- PROC(main): main 함수의 시작 지점이다함수는 프로시저(procedure)라고도 하는데앞으로 CIL에서는 함수라는 용어 대신 프로시저(procedure)라는 용어를 사용할 것이다.

- PUSH(sHelloWorld): CIL 프로그래밍 언어는 중간 단계이므로 함수를 호출하는 데 제약이 있다. C에서는 코드print_str("Hello, world!")를 작성하면 문자열이 잘 출력되지만, CIL에서는 다음과 같이 세 단계로 분리해야 한다.

프로시저 시작 이전에 문자열 sHelloWorld를 ("Hello, world!")로 정의한다.

> print_str 프로시저를 호출하기 전에 sHelloWorld를 PUSH 명령을 이용해 인자로 보관한다.

> INVOKE 매크로를 이용해 print_str 프로시저를 호출한다결과로 문자열이 출력된다.

- INVOKE(print_str): 방금 말했듯, print_str 프로시저를 호출한다.

- ENDP: 프로시저의 끝을 나타낸다. main 프로시저가 끝나면 프로그램이 종료된다.

예제는 아주 단순하다이해하는 데 무리가 없으리라 생각한다주의할 점이라면, CIL의 문장의 마지막에는 세미콜론(;)을 사용하지 않아도 되며 한 줄에 하나의 명령만 가능하다다만 PROC, ENDP와 같은 키워드에는 세미콜론을 사용하면 안 되는데 이에 대해서는 후에 자세히 다루겠다.

댓글

댓글 본문