3.1 정수의 활용

1 바이트 크기 / 2 바이트 크기

소스 프로그램 컴파일 결과

 

1 바이트 크기 / 2 바이트 크기 RL78 패밀리를 이용하기에 앞서 가능한 작은 변수를 사용하는 것이 좋습니다. 이유는 RL78 명령 체계와 범용 레지스터 구성이 1 바이트 크기 2 바이트 크기를 대상으로하기 때문입니다. 또한 국소 변수의 개수에도 좌우되지만, 위의 예처럼 불과 1 개의 국소 변수이면 기본昀適 옵션 설정 (-qx2) 경우 char 형과 int 형의 국소 변수 CPU 내부의 범용 레지스터에 할당 있습니다. 결과, 스택 영역은 사용하지 않고 범용 레지스터를 사용한 컴파일 결과가 1 바이트 크기도 2 바이트 크기에서도 거의 같은 성능 결과입니다.

4 바이트 크기

소스 프로그램 컴파일 결과


 

크기

스피드

char

13

110

int

14

111

long

40

209

 

4바이트 크기 4 바이트 크기의 국소 변수의 경우, CPU 내부의 범용 레지스터 자주 붙지 않고,

1 명령으로 작업을 없기 때문에 성능이 크게 저하됩니다. 전역 변수 · 지역 변수에 관계없이 가능한 1 바이트 크기 또는 2 바이트 크기의 변수를 사용하십시오

 

 

 

 

 

 

 

 

 

 

부호 정수와 부호없는 정수 (signed char / unsigned char)

같은 크기의 정수의 경우, 부호 (signed) 부호없는 (unsigned) 부호없는 (unsigned) 형이 효율적인 명령에 배포됩니다.

 

부호 정수 부호없는 정수 (signed int / unsigned int)

왼쪽의 내용은 short 형이나 int 형도 마찬가지입니다. 동일한 크기의 정수의 경우, 부호 (signed) 부호없는 (unsigned) 부호없는 (unsigned) 형이 효율적인 명령에 배포됩니다.

 

 

기본昀適 옵션 설정 (-qx2) 경우, 국소 변수 (자동 변수) CPU 내부 레지스터 범용 레지스터 HL 할당됩니다. 따라서 signed char / unsigned char 형의 1 바이트 크기의 국소 변수의 경우 스택 프레임을 사용하지 않으면 2 개까지는 범용 레지스터 HL 할당 있습니다.

 

       

국소 변수 할당을위한 레지스터 HL (2 바이트 크기) signed short / unsigned short / signed int / unsigned int 형의 2 바이트 크기의 국소 변수의 경우, 상단의 예에서 있듯이, 범용 레지스터 HL 할당 수있는 개수는 1 개입니다. 하단의 예와 같이 2 이상의 지역 변수를 선언하면 스택 영역에 할당 스택 프레임 작업을 위해 범용 레지스터 HL 사용됩니다.

 

 

 

 

 

 

 

 

 

3.2 char 형의 취급

"char 형을 unsigned char 간주"옵션

 

컴파일 옵션

최적화

최적화 : (고급)

최적화 (고급)

⑤ char 형식을 unsigned char 간주 :

아니오 (기본값)

 

"char 형을 unsigned char 간주"옵션

3.1 내용에서 있듯이, RL78 제품군에서는 변수 형식으로 unsigned char 형이 가장 효과 라고합니다. 그러나 C 언어의 언어 사양에 부호 지정이없는 단순한 char 형은 signed char 형과 unsigned char 형의 어디에서 취급하는지가 정해져 있지 않고, RL78 패밀리 컴파일러에서는 다른 정수와 같이 signed char 취급합니다. 따라서 단순한 char 형은 unsigned 부호 지정을 char 형보다 성능이 떨어지는 것입니다.

그래서 RL78 패밀리 컴파일러는 "char 형을 unsigned char 간주"옵션 (-qu) 부호 지정이없는 단순한 char 형을 unsigned char 형으로 취급 수있게되어 있습니다.

 

 

        


소스 프로그램 컴파일 결과 (아니, signed char )

 

 

"char 형을 unsigned char 간주"옵션의 효과

기본 옵션 설정의 경우, char 형은 signedchar 형식으로 처리됩니다. 따라서 상단의 컴파일 결과 5 번째, 6 번째 줄에서 있듯이, 부호가 비교를 수행합니다. 한편 'char 형을 unsigned char 간주 "옵션 (-qu) 설정 경우, char 형은 unsigned char 형으로 처리됩니다. 결과, 하단의 컴파일 결과 5 번째 줄에서 있듯이, 부호없이 비교를 수행합니다.

 

컴파일 옵션

최적화

최적화 : (고급)

최적화 (고급)

⑤ char 연산을 부호 확장한다 : (기본값)

아니오

 

 

"char 연산을 부호 확장하지 않는"옵션 RL78 제품군은 1 바이트 크기의 signed char 형과 unsigned char 형을 사용한 연산이 가장 성능을 발휘할 있지만, C 언어의 언어 사양에서는 char 크기로 연산을 수없이, 정수 연산은昀低에서도 int 형으로 것을 의무화하고 있습니다. 결과 C 언어 문법을 준수하는 RL78 제품군의 성능을 발휘하지 못하고, 효율을 저하시킬 있습니다. "char 연산을 부호 확장하지 않는"옵션 (-qc) 정수 연산昀低라인을 char 형으로 인하 연산을 char 크기함으로써 RL78 제품군의 성능을 발휘하기위한 옵션입니다 .

 

 

 

 

 

 

 

 

ANSI 규격 (int 16 비트 부호있는 표현이 2 보수시의 해석)

· 한편이 unsigned long 형이라면 다른도 unsigned long 형으로 변환하고 연산 결과도 unsigned long 형이다.

· 한편이 long 형이라면 다른도 long 형으로 변환하고 연산 결과가 long 형이된다.

· 한편이 unsigned int 형이라면 다른도 unsigned int 형으로 변환하고 연산 결과도 unsigned int 형이된다. · 상기 이외는 피연산자 수를 int 변환하여 연산 결과가 int형이된다.(signedchar , unsigned char int 확장 연산을 수행하고 결과는 int형이된다.)

· 10 진수 상수 값의 할당은 int → unsigned int → long → unsigned long형이다.

· 접미사 u, U   unsigned , l, L long , 양자를 사용하면 unsigned long 형이다.

 

"char 연산을 부호 확장하지 않는"옵션 (-qc) 설정시의 해석

· 한편이 unsigned long 형이라면 다른도 unsigned long 형으로 변환하고 연산 결과도 unsigned long 형이다.

· 한편이 long 형이라면 다른도 long 형으로 변환하고 연산 결과가 long 형이된다.

· 한편이 unsigned int 형이라면 다른도 unsigned int 형으로 변환하고 연산 결과도 unsigned int 형이된다. · 한편이 int 형이라면 다른도 int 변환하여 연산 결과가 int 형이된다.

· 한편이 unsigned char 형이라면 다른도 unsigned char 형으로 변환하고 연산 결과도 unsigned char형이된다.

· 상기 이외는 signed char 형으로 연산을 수행하고 결과는 signed char형이된다.

· 10 진수 상수 값의 할당은 char → unsigned char → int → unsigned int → long → unsigned long형이다.

· 접미사 u, U   unsigned , l, L long , 양자를 사용하면 unsigned long 형이다.

 

 

"char 연산을 부호 확장하지 않는"옵션 설정시 문법 해석

 

"char 연산을 부호 확장하지 않는"옵션 (-qc) 설정시는 char 형이 정수 연산의昀低라인입니다. 또한, signed char 형과 unsigned char 형에 관해서는 다른 정수처럼 부호없는 형식의 signed char 형보다 unsigned char 형의 분을 것으로 해석합니다. 이런 문법 해석을 적용하여 RL78 제품군의 성능을 끌어 내려고합니다. 그러나 한편으로 문법 해석의 변경에 의해 이식성이 손상됩니다. 옵션 사용시 이식을 검토 적용하십시오.

 

    
"char 연산을 부호 확장하지 않는"옵션의 효과 (가산) ANSI 표준 C 언어 문법은 정수 연산昀低라인은 int 형입니다. 따라서 범위 -128 ~ +127 char (signed char )끼리의 연산도, int 확장이 이루어지고 연산되므로 연산 결과 200 제대로 구할 있습니다. "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정시 컴파일 결과에서도 3 번째 줄과 6 번째 줄에서 변수 a 변수 b int 확장 가산을 실시하고 있습니다. 이에 대해 "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정하면 int 확장하지 않고 그대로 char (signed char )에서 연산을 수행하고 결과를 char 형으로 생성 있습니다. 따라서 연산 결과 200 표현할 없습니다. 하단의 컴파일 결과에서도 3 행과 4 행에 1 바이트 크기 가산 int 확장을하고 있습니다. 이상과 같이 "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정시는 ANSI 규격의 문법과는 다른 변환 규칙 연산이 수행되기 때문에 이식성이 없습니다. 그러나 RL78 명령 체계가 효과적으로 사용할 있으므로 사용 메모리 실행 속도는 향상됩니다.

 

 

 


 

"char 연산을 부호 확장하지 않는 "옵션의 효과 (곱하기) ANSI 표준 C 언어 문법은 정수 연산昀低라인은 int 형입니다. 따라서 범위 0 ~ +255 unsignedchar 형끼리의 연산도, int 확장이 이루어지고 연산되므로 연산 결과 10000 제대로 구할 있습니다. "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정시 컴파일 결과에서도 4 번째 줄에서 구한 2 바이트 크기의 곱셈 결과를 변수 c 저장합니다. 이에 대해 "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정하면 int 확장하지 않고 그대로 unsigned char 형으로 연산을 수행하고 결과도 unsigned char 형으로 생성됩니다. 따라서 연산 결과 10000 표현할 없습니다. 하단의 컴파일 결과에서도 4 번째 줄에서 구한 2 바이트 크기의 연산 결과의 상위 1 바이트를 5 행으로 클리어 , 변수 c 저장을하고 있습니다. 이상과 같이 "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정시는 ANSI 규격의 문법과는 다른 변환 규칙 연산이 수행되기 때문에 이식성이 없습니다. 그러나 RL78 명령 체계가 효과적으로 사용할 있으므로 사용 메모리 실행 속도는 향상됩니다.

 

컴파일 옵션

기능 확장

함수 int 확장을 비활성화 :

아니오 (기본값)

 

 

"함수 int 확장을 해제"옵션 RL78 패밀리 컴파일러는 함수의 signed char 형과 unsigned char 형의 인수와 반환 값을 int 확장 여부를 "함수 int 확장을 비활성화" 옵션 (-zb) 의해 전환 있도록되어 있습니다. 기본값은 int 확장이 유효하지만 3-10 페이지에서 소개 "char 연산을 부호 확장하지 않는"옵션 (-qc) ""설정하면, 옵션의 설정도 "" 전환하는 것이 좋습니다.

。  

 

"함수 int 확장을 해제"옵션의 효과 "함수 int 확장을 해제"옵션 (-zb) 설정되어 있지 않은 경우, 인수 반환 int 확장 사용을 위해 상단 컴파일 결과 6 번째 줄과 11 번째 줄에서 있듯이, char 형의 인수와 반환 값은 int 형식으로 확장됩니다. 한편, "함수의 int 확장을 해제"옵션 (-zb) 설정되어있는 경우, 인수 반환 int 확장이 무효가되기 때문에, 하단의 컴파일 결과에서 있듯이, char 형의 인수 반환 값은 그대로 전달됩니다.

 

 

 

3.3 제곱 나누기 사양

mulu 함수 (곱셈)

 

크기

스피드

아니오 옵션 설정시

10

5

, 옵션 설정시

11

6

mulu 함수 사용시

11

6

 

 

mulu 함수 (곱셈)

unsigned char 형끼리의 나눗셈 결과는 페이지의 "char 연산을 부호 확장하지 않는"옵션 (-qc) 설정에 따라 결과가 달라집니다. 만약 이식성을 유지하면서, "char 연산을 부호 확장하지 않는"옵션 설정에 좌우되지 않도록하는 경우 mulu 함수를 이용하십시오. mulu 함수는 # pragmamul 지령을 선언하는 것으로 이용 가능합니다.

【사양】

#pragma mul

 

unsigned int mulu(x, y); unsigned char x; unsigned char y; x y 부호없는 곱셈합니다.

 

크기

스피드

int * int → int

20

11

int 형끼리의 곱셈 결과 ANSI 표준 C 언어 문법은 int 형끼리의 곱셈 결과는 int 형입니다. 따라서 int 형이 16 비트 마이크로 컴퓨터에서 위의 식에 10,000 × 10,000 결과이다 100,000,000 (1 ) 요구할 없습니다.

 

long 형을 이용한 곱셈 결과

크기스피드int * int → int2011long * int → long8152 long 형을 이용한 곱셈 결과 만약 16 비트 int 형끼리의 곱셈 결과를 제대로 32 비트에서 구하기 위해서는, 곱셈을 32 비트에서해야합니다. ANSI 표준 C 언어 문법에서는 한이 long 형의 경우, 한편도 long 형으로 변환하고 연산을 수행하고 결과를 long 형에서 구할 수 규정되어 있습니다. 따라서 10,000 × 10,000의 결과이다 100,000,000 (1 억)을 제대로 찾으려면, 위의 예와 같이 한쪽을 long 형의 변수에 할당하고 다른과 곱셈하는 것입니다. 그러나 32 비트끼리의 곱셈을 할 수 있으므로 사용 메모리 및 실행 속도가 모두 감소하게됩니다. mulsw 함수 (곱셈) 크기스피드int * int → int2011long * int → long8152mulsw 함수 사용시168 muluw 함수 (곱셈) 전 페이지까지의 내용, 즉 int 형 끼리는 정확한 곱셈 결과가 요구되지 않는, long 형을 사용하면 성능이 저하한다고 말했다 양자의 문제점을 해결하기 위해 RL78 패밀리 용 컴파일러는 int 형끼리의 곱셈 결과를 long 형으로 요구 mulsw 함수 와 unsigned int 형끼리의 곱셈 결과를 unsigned long 형으로 요구 muluw 함수가 준비되어 있습니다. 이러한 함수 unsigned char 형끼리의 곱셈 결과를 unsigned int 형으로 요구 mulu 함수와 마찬가지로 # pragmamul 지령을 선언하는 것으로 이용 가능합니다.  

 

 

【사양】 #pragma mul

unsigned long muluw(x, y); unsigned int x; unsigned int y; x y 부호없는 곱셈합니다.

# pragma mul

signed long mulsw(x, y); signed int x; signed int y; x y 부호 곱합니다.

 

 

 

 

divuw 함수 (나누기)


 

크기

스피드

나누기 연산자 사용시

35

33

divuw 함수 사용시

36

34

 

divuw 함수 (나누기)

 

RL78 패밀리 컴파일러는 unsigned int 형과 unsigned char 형의 나누기 연산을 요구 divuw 함수가 준비되어 있습니다. divuw 함수는 # pragma div 지령을 선언하는 것으로 이용 가능합니다.

그러나 RL78 경우 divuw 함수를 사용하지 않고 그대로 "/" 나누기 연산자를 사용해도 "昀適 (표준)"옵션 (-qx2) 설정하면 성능 차이는 거의 없습니다. "/" 나누기 연산자를 사용하여 "昀適 (속도 우선)"옵션 (-qx1) 설정하면 성능이 향상됩니다. 기존 제품의 78K 경우 divuw 함수를 사용하여 성능을 향상시킬 있었지만, RL78 경우 변화가 없습니다. 따라서 나누기 관해서는 divuw 함수를 사용할 필요가 없다고 있습니다.

 

【사양】 #pragma div

unsigned int divuw(x, y); unsigned int x; unsigned char y; x y 부호없는 나누고 몫을 반환합니다.

 

 

 

moduw 함수 (나머지)

 

크기

스피드

나머지 연산자 사용시

39

37

moduw 함수 사용시

37

35

   

moduw 함수 (나머지)

 

RL78 패밀리 컴파일러 unsigned int 형과 unsigned char 형의 나머지 결과를 요구 moduw 함수가 준비되어 있습니다. moduw 함수 # pragma div 지령을 선언하는 것으로 이용 가능합니다.

그러나 RL78 경우 moduw 함수를 사용하지 않고 그대로 "%"나머지 연산자를 사용해도 "昀適 (표준)"옵션 (-qx2) 설정하면 성능 차이는 거의 없습니다. "%" 나누기 연산자를 사용하여 "昀適 (속도 우선) 옵션"(-qx1) 설정하면 성능이 향상됩니다. 기존 제품의 78K 경우 moduw 함수를 사용하여 성능을 향상시킬 있었지만, RL78 경우 변화가 없습니다. 따라서 나머지에 관해서는 moduw 함수를 사용할 필요가 없다고 있습니다.

 

【사양】 #pragma div

unsigned char moduw(x, y); unsigned int x; unsigned char y; x y 부호없는 나누어 나머지를 반환합니다.

     

 

 

"적화 연산기를 사용하는"옵션 아래의 곱셈과 나눗셈 일본 재래의 주산 명령은 확장 명령 때문에 78K, 78K0R, RL78 제품마다 탑재 / 탑재가 다릅니다.

• MULHU (부호없는 16 비트 멀티)  

• MULH (부호있는 16 비트 멀티)  

• DIVHU (부호없는 16 비트 나누기)  

• DIVWU (부호없는 32 비트 나누기)  

• MACHU (부호없는 일본 재래의 주산 (16 비트 × 16 비트) +32 비트)  

• MACH (부호 일본 재래의 주산 (16 비트 × 16 비트) +32 비트) RL78 경우, 제곱 나누기 명령은 이전 페이지까지 소개 # pragma mul / div 의해昀適 명령에 배포되지만, 적화 연산에 대해서는 연산기 / 명령에 의해 지원 방법이 다릅니다.

또한 명령이 아니라 적화 연산기를 탑재하는 경우, "적화 연산기를 사용하는"옵션은 연산기를 사용하거나 라이브러리를 사용하는 방법을 전환 있도록되어 있습니다. 명령어를 지원하는 경우, 위의 "적화 연산기를 사용하는"옵션은 존재하지 않습니다.

 

【사양】 #pragma mac

unsigned long macuw( x, y, z );

unsigned long x;

unsigned int y;

unsigned int z;

x + (y * z) 부호없는 적화 연산을 수행하고 연산 결과를 반환합니다

     

 

크기

스피드

연산 장치를 사용 (RL78/G13)

148

258

라이브러리를 사용 (RL78/G13)

221

4845

적화 명령을 사용 (RL78/G14)

132

108

 

적화 연산의 코딩

적화 연산은 # pragma mac 지령을 선언하고 부호없는 형식의 적화 연산이면 macuw 함수 부호 형이면 macsw 함수를 사용합니다. 적화 명령을 지원하고도 적화 연산기를 지원하지 않아도 macuw 함수 / macsw 함수의 컴파일 결과는 동일하며 런타임 라이브러리를 사용하는 것입니다. 그러나 호출 런타임 라이브러리의 본체가 적화 명령의 유무, "적화 연산기를 사용하는"옵션 설정에 따라 달라집니다. 역시 적화 연산 기나 적화 연산을 사용하는 것이 라이브러리를 사용하는 것보다 성능이 우수하다고 말할 있습니다.

 

【사양】 #pragma mac

signed long macsw(x, y, z); signed long x; signed int y; signed int z; x + (y * z) 부호 적화 연산을 수행하고 연산 결과를 반환합니다 .

 

 

3.4 saddr 공간 활용 "자동 변수를 레지스터 또는 saddr 영역에 할당"옵션

 

"자동 변수를 레지스터 또는 saddr 영역에 할당"옵션 RL78 패밀리 컴파일러는 기본적으로 "자동 변수를 레지스터 또는 saddr 영역에 할당 "옵션 (-qv) 설정되어 있습니다. 따라서 함수 내부의 국소 변수 (자동 변수) 자동으로 CPU 내부 레지스터에 할당됩니다. 물론이 옵션을 "아니오" 설정하면 함수 내부의 국소 변수 (자동 변수) 스택 영역에 할당됩니다.

 

컴파일 결과 (옵션 설정시)

컴파일 결과 (옵션 설정시)

 

크기

스피드

, 옵션 설정시

11

99

아니오 옵션 설정시

20

112

 

 

"자동 변수를 레지스터 또는 saddr 영역에 할당"옵션의 효과 (1 바이트) "자동 변수를 레지스터 또는 saddr 영역에 할당"옵션 (-qv) 설정되어있는 경우, 국소 변수

(자동 변수) CPU 내부 레지스터 범용 레지스터 HL 할당됩니다. 따라서 signedchar / unsigned char 형의 1 바이트 크기의 국소 변수의 경우 3-6 페이지에서 소개 한대로, 스택 프레임을 사용하지 않으면 2 개까지는 범용 레지스터 HL 할당 있습니다.

반대로 "자동 변수를 레지스터 또는 saddr 영역에 할당"옵션 (-qv) 구성되지 않은 경우, 국소 변수 (자동 변수) 모든 스택 영역에 할당됩니다. 또한 RL78 제품군의 경우 후속으로 소개하는 "레지스터 변수를 saddr 영역에 할당"옵션 (-qr) 설정하지 않으면, 국소 변수 (자동 변수) saddr 영역에 할당 수는 없습니다.

 

 

소스 프로그램

컴파일 결과 (옵션 설정시)

컴파일 결과 (옵션 설정시)


 

크기

스피드

, 옵션 설정시

12

100

아니, 옵션 설정시

19

112

 

"자동 변수를 레지스터 또는 saddr 영역에 할당"옵션의 효과 (2 바이트) "자동 변수를 레지스터 또는 saddr 영역에 할당 "옵션 (-qv) 설정되어있는 경우, 국소 변수

(자동 변수) CPU 내부 레지스터 범용 레지스터 HL 할당됩니다. 따라서 signedshort / unsigned short / signed int / unsigned int 형의 2 바이트 크기의 국소 변수의 경우 3-7 페이지에서 소개 한대로, 스택 프레임을 사용하지 않으면 1 개만 범용 레지스터 HL 할당 있습니다.

반대로 "자동 변수를 레지스터 또는 saddr 영역에 할당"옵션 (-qv) 구성되지 않은 경우, 국소 변수 (자동 변수) 모든 스택 영역에 할당됩니다. 또한 RL78 제품군의 경우 후속으로 소개하는 "레지스터 변수를 saddr 영역에 할당"옵션 (-qr) 설정하지 않으면, 국소 변수 (자동 변수) saddr 영역에 할당 수는 없습니다.

 

"레지스터 변수를 saddr 영역에 할당"옵션 RL78 패밀리 컴파일러는 "레지스터 변수를 saddr 영역에 할당"옵션 (-qr) 레지스터 변수를 saddr 영역에도 할당 가능 해지고 있습니다. 그러나 RL78 제품군의 경우, "레지스터 변수를 saddr 영역에 할당"옵션 (-qr) 설정하면 그만큼 성능이 향상되지 않습니다. 기존 제품의 78K 달리 버스 구성과 명령 체계를 강화하고 있기 때문에, saddr 영역도 스택 영역도 같은 성능입니다. 반대로 saddr 영역을 이용하기에 앞서 해당 지역의 대피 · 복귀가 필요합니다. 5 장과 6 장에서 소개하는 인터럽트 함수의 경우, 처리 성능 저하를 초래할 가능성도 있기 때문에이 옵션은 설정하지 않는 것이 좋습니다.

 

컴파일 결과 (옵션 설정시)

 


 

크기

스피드

아니오 옵션 설정시

36

240

 

"레지스터 변수를 saddr 영역에 할당"옵션의 효과 ( 설정시) " 레지스터 변수를 saddr 영역에 할당 "옵션 (-qr) 구성되지 않은 경우, unsigned int 형의 국소 변수는 1 밖에 레지스터에 할당 없습니다. 따라서 위와 같이 unsigned int 형의 국소 변수가 2 개있는 경우 모든 스택 영역에 할당됩니다.

 

컴파일 결과 (옵션 설정시)

 

 

"레지스터 변수를 saddr 영역에 할당"옵션의 효과 (설정시)

"레지스터 변수를 saddr 영역 할당 "옵션 (-qr) 설정되어있는 경우 범용 레지스터 HL 이외에 saddr 영역에 국소 변수 (자동 변수) 할당 있습니다. 컴파일 결과 11 번째, 12 번째, 16 번째 줄에서 사용되는 _ @ KREG14 레지스터 변수에 대한 saddr 영역입니다.

그러나 레지스터 변수의 saddr 영역은 사용하는데있어서 원하는 영역의 대피 · 복귀가 필요합니다. 컴파일 결과 3 번째, 4 번째 줄이 대피 처리, 21 번째, 22 번째 줄이 복귀 처리합니다. 또한 레지스터 변수 외에도 RL78 패밀리 컴파일러 saddr 영역을 44 바이트 차지합니다. 다음 페이지에 RL78 패밀리 컴파일러 예약 saddr 영역의 기호 이름을 보여줍니다.

 

 

 

 

레지스터 변수 워크 세그먼트 정보 저장 런타임 라이브러리 인수

0FFEB4H에서 0FFEDFH까지 44 바이트

 

 

saddr 영역 레이블 목록 RL78 패밀리 컴파일러는 위에 설명 레이블 이름으로 saddr 영역을 참조합니다. 예를 들어 3-17 페이지 3-18 페이지 3-19 페이지의 곱셈 처리에 소개 런타임 라이브러리를 호출하면 _ @ RTARGn saddr

영역이 사용됩니다. 또한 "레지스터 변수를 saddr 영역에 할당"옵션 (-qr) 설정하면, 레지스터 변수의 saddr 영역이다 _ @ KREGn 사용됩니다. 결과, 사용자가 위의 saddr 영역을 사용할 없습니다. 이것이 2-10 페이지에서 소개 RL78 패밀리 컴파일러가 특정 목적으로 사용하는 44 바이트의 영역의 정체입니다.

 

 

 

 

 

'공부 > RL78' 카테고리의 다른 글

RL78 컴파일러 사용 10  (0) 2013.04.05
RL78 컴파일러 사용 9  (0) 2013.04.05
RL78 컴파일러 사용 7  (0) 2013.04.05
RL78 컴파일러 사용 6  (0) 2013.04.05
RL78 컴파일러 사용 5  (0) 2013.04.05

+ Recent posts