我使用cygwin在windows中使用'powerpc-eabi'作为TARGET来构建gcc交叉编译器。
在汇编下面的代码lis r4, %hi(IMMR_OFFSET)
时,我得到了以下内容
错误。
init/code/sfiles/init_core.s:141: Error: bad expression
init/code/sfiles/init_core.s:141: Error: syntax error; found `h', expected `,'
init/code/sfiles/init_core.s:141: Error: junk at end of line: `hi(IMMR_OFFSET)'
我想知道为什么上面的错误出现在每个类似上面的lis指令中。
请朝这个方向帮忙。
IMMR_OFFSET的值在另一个.h file
中定义,如下所示....
.equ IMMR_OFFSET, 0xF0010000
我正在使用follwing命令进行汇编....
c:/cygwin/home/cdot/powerpc/bin/powerpc-eabi-as -mbig-endian -g --defsym _NDI_=1
--defsym _DBGR_ON_=1 --defsym DEBUG=1 --defsym _PARAM_DEBUG_=1 --defsym _NIU_=1
-gdwarf-2 -I init/code/hfiles -o init/build/niu_ndi_dbgr_init_core.o init/code/
sfiles/init_core.s 2>init/build/niu_ndi_dbgr_init_core.err
答案 0 :(得分:1)
我感觉你的汇编源代码是用不同的汇编程序构建的......
有些PPC汇编程序确实支持%hi(foo)
语法,但不支持GNU汇编程序(除非有一些我不知道的文档记录很差)。
除非您使用r4
标志,否则它也不会将-mregnames
识别为注册名称。
GNU汇编语法中的等价物是
lis 4, IMMR_OFFSET@h
(或lis r4, IMMR_OFFSET@h
如果您使用-mregnames
)也会有效。
同样,%lo(foo)
和%ha(foo)
需要分别写为foo@l
和foo@ha
。