我不是很喜欢组装,但对于一个项目,我必须为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
等的警告?答案 0 :(得分:1)
我认为你可以用同一行定义的标签替换$。
00001$:
jnb T0Full, 00001$
请注意,根据SDCC Compiler User Guide:
内联汇编程序代码中定义的所有标签都必须是格式 nnnnn $其中nnnnn是一个小于100的数字(这意味着每个函数最多有100个内联汇编程序标签)。
至于其他编译器警告,那些是假定未在任何地方定义的符号。它们是如何在原始C51代码中定义的?
答案 1 :(得分:1)
这可能会有所帮助。现在我还不是专家,但他们说的一些事情并没有像他们说的那样奏效。我不得不同时使用SDCC手册和迁移手册,我找到了我想要的正确语法......