よくある質問(FAQ)

アセンブラ関数「asm void func() {アセンブラ命令}」で解析エラーが発生しました。

解析エラーの回避策について

質問

アセンブラ関数で解析エラーが発生しています。回避策を教えてください。

■記述例
asm void func ()
{
 /* アセンブリ言語で記述 */
 MOV R0, R1
 NOP
}

■解析エラー
CasePlayer2-E-SYN : ; が必要です.
  C:\XXXXXXXX\YYYYYYYY\ソースファイル名.c(行番号)
CasePlayer2-E-SYN : 名前( MOV )が宣言されていません.
  C:\XXXXXXXX\YYYYYYYY\ソースファイル名.c(行番号)

回答

アセンブラ関数は、C言語仕様 (ANSI-C,C99,GNU-C) に違反する記述形式のため、解析エラーとなります。

■回避策
「Cオプションパラメータ」及び「プリプロセッサの設定」を併用することで、解析エラーを回避できます。

■ Cオプションパラメータの設定
キーワード:user_asm
種類   :ASM
後置記述 :EXPRESSION{EXPRESSION}

■プリプロセッサの設定
下記の定義(#define...)をしたヘッダファイル(gaio.h)を「プレインクルードファイル」に追加します。
※ C99 及び GNU-C では キーワード「asm」は予約語となっているため、競合を避けるため「user_asm」へ置き換えます。
--[gaio.h]-------------------
#define asm user_asm
-------------------------------