我在窗口中使用cygwin构建了以"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
我正在使用以下命令进行组装。。。。
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
我有一种感觉,您的汇编源代码希望使用不同的汇编程序构建。。。
一些PPC汇编程序确实支持%hi(foo)
语法,但不支持GNU汇编程序(除非有一些我不知道的文档不完整的选项)。
它也不会将r4
识别为寄存器名,除非您使用-mregnames
标志。
GNU汇编程序语法中的等效程序是
lis 4, IMMR_OFFSET@h
(或者如果使用-mregnames
,lis r4, IMMR_OFFSET@h
也可以)。
类似地,%lo(foo)
和%ha(foo)
需要分别写为foo@l
和foo@ha
。