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 형끼리의
곱셈
결과 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 장에서
소개하는
인터럽트
함수의
경우, 그
처리
성능
저하를
초래할
가능성도
있기
때문에이
옵션은
설정하지
않는
것이
좋습니다.
컴파일
결과 (옵션
미
설정시)
"레지스터
변수를 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 바이트의
영역의
정체입니다.