C プロジェクトからアセンブリ関数を呼び出すことができる内部アセンブラを提供する MPLAB C18 を使用しています。インライン アセンブリの使用方法に関する規則に従っていますが、プロジェクトのビルド時に「テーブルの読み取り/書き込みにはフル テキスト ニーモニックを使用する必要があります」という問題が原因で、構文エラー メッセージが表示されると思われます。
The internal assembler differs from the MPASM assembler as follows:
No directive support
Comments must be C or C++ notation
Full text mnemonics must be used for table reads/writes. i.e.,
TBLRD
TBLRDPOSTDEC
TBLRDPOSTINC
TBLRDPREINC
TBLWT
TBLWTPOSTDEC
TBLWTPOSTINC
TBLWTPREINC
No defaults for instruction operands - all operands must be fully specified
Default radix is decimal
Literals are specified using C radix notation, not MPASM assembler notation. For example, a hex number should be specified as 0x1234, not H'1234'.
Label must include colon
Indexed addressing syntax (i.e., []) is not supported - must specify literal and access bit (e.g., specify as CLRF 2,0, not CLRF [2])
これは、フラッシュ メモリからの読み取りに関するPIC18F87J11データシートから取得した、使用しているコードです。
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base
MOVWF TBLPTRU ; address of the word
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
READ_WORD
TBLRD*+ ; read into TABLAT and increment
MOVF TABLAT, W ; get data
MOVWF WORD_EVEN
TBLRD*+ ; read into TABLAT and increment
MOVF TABLAT, W ; get data
MOVWF WORD_ODD
これは、アセンブリ コードを機能させるために行った変更です。TBLRD*+に関する何か が構文エラーを引き起こしていると思われます。
_asm
MOVLW CODE_ADDR_UPPER
MOVWF TBLPTRU
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
READ_WORD:
TBLRD*+
MOVF TABLAT, W
MOVWF WORD_EVEN
TBLRD*+
MOVF TABLAT, W
MOVWF WORD_ODD
_endasm
「テーブルの読み取り/書き込みにはフルテキストニーモニックを使用する必要があります」の意味と、ビルドエラーの原因を誰かが明確にしてくれることを願っています。
ありがとう!