2011-06-27 2 views
2

J'ai bulit gcc croisé compilateur/assembleur/éditeur de liens avec 'powerpc-eabi' comme CIBLE dans Windows en utilisant cygwin. Lors du montage, je reçois l'erreur suivante ...."Erreur: opérande hors limites" lors de l'utilisation de l'assembleur 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) 

Mais, dans ce numéro de ligne, l'instruction suivante est là:

addi r2,0,0xFFFD 

J'utilise la commande follwing pour le montage:

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 

Je voudrais savoir pourquoi l'erreur ci-dessus apparaît.

S'il vous plaît aider dans cette direction.

+0

Avez-vous écrit l'instruction ou a-t-elle été générée par le compilateur? Parce que si vous l'écrivez, vous devriez simplement le changer (deviner à partir du message d'erreur je suppose qu'il acceptera 0xfffffffd et prendre les deux octets inférieurs de toute façon) alors que s'il était généré par le compilateur, ce serait un bug et vous devriez le signaler à gcc bug tracker. –

Répondre

5

Le compilateur/assembleur a correctement émis un message d'erreur ici. L'utilisation d'une constante 0xfffd n'est pas possible avec des instructions de type immédiat dans l'assemblage PPC.

Les instructions immédiates PowerPC (telles que le addi que vous essayez de faire) ont un format d'instruction générique 6/5/6/16 bits pour opcode/source/dest/constant; la constante 16 bits est signée, d'où la plage est -32768 ... 32767; C'est signe étendu à 32 bits, ce qui signifie que vous aurez une plage de 0xffff8000 ... 0x7fff. Voir aussi:

IBM Developerworks PPC Assembly Introduction, en particulier "listing 3."

C'est ce que le message d'erreur essaie de vous dire.