2016-10-31 7 views
0

Я пытаюсь выполнить очень простую программу, но я получаю ошибку: Invalid language elementсборочно-инвалидные MIPS элемент языка

lw $t0, 0($a0)    #load integer from $a0->$t0 
beq $t0, 1, 1dimensional  #branch if $t0=1 

1dimensional: 
do something 

Я не могу понять, почему я получаю сообщение об ошибке.

+0

http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html говорит, что BEQ принимает два регистровых операнда и метку, а не сразу. –

+0

@PeterCordes Использование немедленного, поскольку второй аргумент _valid_, потому что 'beq' является псевдооператором [если ассемблер поддерживает его, что делает« mars'). Он генерирует следующую «реальную» последовательность команд: 'addi $ at, $ zero, 1' /' beq $ at, $ t0,1dimensional'. –

+0

Ах, ладно, тогда не дубликат http://stackoverflow.com/questions/16760255/why-we-cant-compare-bne-beq-a-register-with-an-immediate-assembly-mips в конце концов, если вы используете ассемблер, который будет уничтожать $ r1 для вас при расширении beq как псевдооператора. Это кажется мне очень странным, но я думаю, что когда у вас есть 31 архитектурный регистр, это «нормально», чтобы отбросить некоторые из них, как и два, что ОС разрешено асинхронно сжиматься. –

ответ

2

Вы оставили важную часть сообщения об ошибке, а именно , что недействительным языковым элементом.
О чем жалуется ассемблер, является метка 1dimensional. Для ассемблеров обычно допускается только буквы и символы подчеркивания (и, возможно, один .) в качестве первого символа метки. Поэтому измените имя этого ярлыка на то, что соответствует этому требованию, например. onedimensional.