【问题标题】:"Error: operand out of range" when using PPC assembler使用 PPC 汇编程序时出现“错误:操作数超出范围”
【发布时间】:2011-06-27 08:40:47
【问题描述】:

我使用 cygwin 在 Windows 中使用 'powerpc-eabi' 作为 TARGET 构建 gcc 交叉编译器/汇编器/链接器。组装时出现以下错误....

code/sfiles/init_evh.s: Assembler messages:
code/sfiles/init_evh.s:381: Error: operand out of range (0x0000fffd is not between 0xffff8000 and 0x00007fff)

但是,在该行号中,有以下指令:

addi  r2,0,0xFFFD

我正在使用以下命令进行组装:

c:/cygwin/home/cdot/powerpc/bin/powerpc-eabi-as -mbig-endian -m603 -mregnames --
defsym _NDI_=1 --defsym _DBGR_ON_=1 --defsym DEBUG=1 --defsym _PARAM_DEBUG_=1 --
defsym _NIU_=1 -gdwarf-2 -I code/hfiles -o build/niu_ndi_dbgr_init_evh.o code/sf
iles/init_evh.s 2>build/niu_ndi_dbgr_init_evh.err

我想知道为什么会出现上述错误。

请在这个方向上提供帮助。

【问题讨论】:

  • 指令是你写的还是编译器生成的?因为如果你写了它,你应该简单地改变它(从错误消息中猜测,我想它会接受 0xfffffffd 并取低两个字节),而如果它是由编译器生成的,那将是一个错误,你应该报告它到 gcc 错误跟踪器。

标签: gcc assembly inline-assembly powerpc


【解决方案1】:

编译器/汇编器在此处发出错误消息是正确的。 PPC 汇编中的立即型指令不能使用常量0xfffd

PowerPC 立即指令(例如您尝试执行的addi)具有通用指令格式,每个指令格式为 6/5/6/16 位,用于操作码/源/目标/常量; 16 位常量是有符号,因此范围是-32768 ... 32767;这是 符号扩展 到 32 位,这意味着您将获得 0xffff8000 ... 0x7fff 的范围。另见:

IBM Developerworks PPC Assembly Introduction,尤其是“清单 3”。

这就是错误消息试图告诉您的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多