0

我不是很喜欢汇编,但对于一个项目,我必须将 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等的警告?
4

2 回答 2

1

我认为您可以将 $ 替换为在同一行上定义的标签。

00001$: 
  jnb     T0Full, 00001$

请注意,根据SDCC 编译器用户指南

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

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

于 2013-07-24T14:30:55.430 回答
1

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

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

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

于 2016-02-20T04:56:51.420 回答