2

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

上記のエラーが表示される理由を知りたいです。

この方向で助けてください。

4

1 に答える 1

5

ここでエラー メッセージを出力するコンパイラ/アセンブラは正しいです。0xfffdPPC アセンブリの即値型命令では、定数を使用できません。

PowerPC の即時命令 (addi実行しようとしているものなど) には、opcode/source/dest/constant に対してそれぞれ 6/5/6/16 ビットの一般的な命令形式があります。16 ビット定数は符号付きであるため、範囲は-32768 ... 32767; これは32 ビットに拡張された符号です。つまり、範囲は0xffff8000 ... 0x7fff. 以下も参照してください。

IBM Developerworks PPC Assembly Introduction、特に「リスト 3」。

それがエラーメッセージが伝えようとしていることです。

于 2011-06-27T09:03:47.747 に答える