3.3) 기본으로 제공되는 변수를 이용해 연산하기
여기서 하나 더 중요한 사실을 말하자면, CIL 언어에서는 기본적으로 사용할 수 있는 변수의 수가 제한되어있다.이 문서에서는 이러한 변수를 기본 변수라고 하겠다. 다음 예제에서는 이들을 이용하여 연산을 해보고 그 결과를 출력하는 프로그램을 작성해본다.
Calculation.c |
#include "CIL.h" STRING sNewLine = "\n"; // 개행 문자를 삽입하기 위한 개행 문자열입니다.
PROC(main) // main 프로시저의 정의가 시작되는 지점입니다.
// 준비된 변수 a에 10을 대입하고 a를 출력합니다. MOVL(a, 10) // a = 10
// a를 출력합니다. PUSH(a) INVOKE(print_int)
// 개행 문자를 삽입합니다. PUSH(sNewLine) INVOKE(print_str)
// 변수 a에 10을 더하고 a를 출력합니다. ADD(a, 10) // a = 10
// a를 출력합니다. PUSH(a) INVOKE(print_int)
// 개행 문자를 삽입합니다. PUSH(sNewLine) INVOKE(print_str)
// 준비된 변수 b에 14를 대입하고 a에서 b를 뺍니다. MOVL(b, 14) // b = 14 SUB(a, b) // a -= b
// a를 출력합니다. PUSH(a) INVOKE(print_int)
ENDP // 프로시저의 정의를 마칩니다. |
실행 결과 |
10 20 6 |
CIL은 추가적인 C 변수 선언을 허용하지 않는다. 다음은 이미 정의된 C 변수 중 일부이다.
- a: accumulator. 모든 연산의 결과가 누적되는 누산 변수다.
- c: counter. 반복문에서 반복 횟수를 결정할 때 참조하는 카운터 변수다.
- d: data. 연산에서 임시로 사용하는 데이터를 보관하는 변수다.
- b: base. 여기서는 거의 사용하지 않을 변수로 봐도 좋다.
CIL은 C보다 저급 언어이므로 복합 연산을 지원하지 않기 때문에, 한 번에 하나씩의 연산만 수행해야 한다. 1+2*3+4와 같은 식을 예로 들면, CIL에서는 이 식을 다음과 같이 표현한다.
MOVL(a, 1) // a = 1
MOVL(b, 2) // b = 2
MUL(b, 3) // b *= 3
ADD(a, b) // a += b
ADD(a, 4) // a += 4