2011-06-27 24 views
2

Cygwinを使用してWindowsでTARGETとして 'powerpc-eabi'のbullet gccクロスコンパイラ/アセンブラ/リンカを使用しました。組み立てるとき、私は....PPCアセンブラを使用すると "エラー:オペランドが範囲外です"

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 

私は組み立てにfollwingコマンドを使用しています:

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 

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

この方向でお手伝いしてください。

+0

命令を記述しましたか、コンパイラによって生成されましたか?もしあなたがそれを書いたならば、単純にそれを変更するべきです(エラーメッセージから推測して、0xfffffffdを受け入れて下位の2バイトを取ると思います)。コンパイラによって生成された場合はバグであり、 gccのバグトラッカーに –

答えて

5

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

PowerPCの即時命令(実行しようとしているaddiなど)は、opcode/source/dest/constantにそれぞれ6/5/6/16ビットの汎用命令フォーマットを持っています。 16ビット定数はであり、と書かれているので、範囲は-32768 ... 32767です。これはの符号がから32bitに拡張されたものです。つまり、0xffff8000 ... 0x7fffの範囲を取得します。他にも:

IBM Developerworks PPC Assembly Introduction特に "リスト3"

これは、エラーメッセージがあなたに伝えようとしていることです。

関連する問題