MAEC TOOL NEWS:
MAECT-NC308WA_1-010701D
NC308WA, NC30WA, NC79WA, NC77WA
ご使用上のお願い
|
Cコンパイラ (アセンブラ・統合化開発環境付き) NC308WA, NC30WA, NC79WA, NC77WAの使用上の注意事項を連絡します。
- ユーザーズマニュアルおよびリリースノートにインラインアセンブル機能に関する記述が抜けていました。
- 該当製品
| M16C/80シリーズ用Cコンパイラ | : NC308WA V.1.00 Release 1 ~ V.3.10 Release 3 |
| M16C/60, M16C/20シリーズ用Cコンパイラ | : NC30WA V.1.00 Release 1 ~ V.4.00 Release 2 |
| 7900シリーズ用Cコンパイラ | : NC79WA V.2.00 Relaese 1 ~ V.4.10 Release 1 |
| 77xxシリーズ用Cコンパイラ | : NC77WA V.3.00 Relaese 1 ~ V.5.20 Release 4 |
- ユーザーズマニュアル・リリースノートの追加内容
Cコンパイラはレジスタを介して渡される引数およびレジスタ変数に対して、これらの有効範囲を解析しコードを生成します。しかし、インラインアセンブル機能 (#pragma ASM~#pragma ENDASMまたはasm関数) を使用してレジスタ値を操作する記述を行った場合、Cコンパイラはインラインアセンブル機能で記述されたプログラム部分で有効となるこれらの引数およびレジスタ変数の範囲の情報を保持することができません。
したがって、インラインアセンブル機能を使用してレジスタを操作する記述を行う場合は、必ずレジスタの退避・復帰を行ってください。
[記述例:NC308WA, NC30WAの場合]
--------------------------------------------------------------------
int k;
int func(int i)
{
int j;
asm( " pushm R0,R1" ); /* レジスタの退避 */
asm( " mov.w #000AH,R1" );
asm( " add.w R1,R0" );
asm( " mov.w R0,_k" );
asm( " popm R0,R1" ); /* レジスタの復帰 */
j = i + 100;
return j;
}
--------------------------------------------------------------------
[記述例:NC79WA, NC77WAの場合]
--------------------------------------------------------------------
int k;
int func(int i)
{
int j;
asm( " pha" ); /* レジスタの退避 */
asm( " lda.W A,#000AH" );
asm( " sta.W A,DT:_k");
asm( " pla" ); /* レジスタの復帰 */
j = i + 100;
return j;
}
--------------------------------------------------------------------