C51 C编译器内联汇编到SDCC内联汇编

时间:2013-07-24 08:01:42

标签: assembly keil sdcc c51

我不是很喜欢组装,但对于一个项目,我必须为C51 C编译器修改几行汇编代码到SDCC。

这是C51的代码

setb    T1Run
setb    T0Run

setb    IDLE
jnb     T0Full, $

使用SDCC编译生成

?ASlink-Warning-Undefined Global 'IDLE' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global '$' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T0Run' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T1Run' referenced by module 'Com_Func'

?ASlink-Warning-Byte PCR relocation error for symbol  $
         file              module            area              offset
  Refby  ./Com_Func.rel    Com_Func          CSEG                     004A
  Defin  ./Com_Func.rel    Com_Func          CABS                     0000

作为编译器错误/警告。

  • 我知道$ - 符号被汇编程序指令的实际地址所取代 - 但是SDCC等价物是什么?
  • 如何解决T0Run等的警告?

2 个答案:

答案 0 :(得分:1)

我认为你可以用同一行定义的标签替换$。

00001$: 
  jnb     T0Full, 00001$

请注意,根据SDCC Compiler User Guide

  

内联汇编程序代码中定义的所有标签都必须是格式   nnnnn $其中nnnnn是一个小于100的数字(这意味着每个函数最多有100个内联汇编程序标签)。

至于其他编译器警告,那些是假定未在任何地方定义的符号。它们是如何在原始C51代码中定义的?

答案 1 :(得分:1)

大声笑......这听起来像是sdcc,很有趣。我刚刚开始添加头文件。我不得不把它放在bin Dir中,因为它在项目文件夹中找不到keil。

这可能会有所帮助。现在我还不是专家,但他们说的一些事情并没有像他们说的那样奏效。我不得不同时使用SDCC手册和迁移手册,我找到了我想要的正确语法......

http://www.infineon.com/dgdl/AP0806510_XC800_Migration_Keil_2_SDCC.pdf?folderId=db3a30431375fb1a01138c57204603bd&fileId=db3a304314dca389011517efc5860d61&ack=t