gpt4 book ai didi

c - 如何在 MPLAB C18 中使用内联汇编?

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:27 24 4
gpt4 key购买 nike

我正在使用 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

我希望有人能阐明“必须使用全文助记符进行表读/写”的含义以及可能导致构建错误的原因。

谢谢!

最佳答案

我将不得不仔细检查,但我相信您必须将 TBLRD*+ 替换为助记符 TBLRDPOSTINC。我稍后会发布修改以确认。

关于c - 如何在 MPLAB C18 中使用内联汇编?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com