如何使用内联汇编MPLAB C18?(How to use Inline Assembly with

2019-10-18 09:46发布

我使用MPLAB C18提供一个内部汇编以使得从C项目调用组件的功能。 我下面就如何使用内联汇编的规则,我怀疑一些关于“ 全文本助记符必须用于表读/写 ”在建设我的项目是导致语法错误消息。

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 

我希望有人能澄清什么“ 全文本助记符必须用于表读/写 ”手段,什么可能会导致生成错误。

谢谢!

Answer 1:

我将不得不仔细检查,但我相信,你必须更换TBLRD*+用助记符TBLRDPOSTINC 。 以后我会后编辑确认。



文章来源: How to use Inline Assembly with MPLAB C18?