2015-11-30 5 views
0

То, что я пытаюсь сделать здесь, это рассчитать смещение и добавить его в массив, чтобы сохранить значение в этой позиции в массиве. Я видел это сделано так:MIPS Asm - Неверный/незаконный второй операнд

board: .space 36 

move $s0, $a0    # Save our arg (cell offset) in $s0 

li $t0, 6     # Store the size of the board in $t0 
div $s0, $t0    # Cell Offset/Board Size 
mflo $s1      # $s1 is our cell row index 
mfhi $s2      # $s2 is our cell col index 

lb  $t1, board + 0($s0)  # Load current cell's value in $t1 

Следующая строка,

lb  $t1, board + 0($s0)  # Load current cell's value in $t1 

вызывает ошибку при попытке компиляции:

Error: Invalid/illegal second operand. 

Я видел это сделано в других программах сборки MIPS, поэтому я не уверен, почему это не работает.

+0

Вы забыли упомянуть, какой ассемблер вы используете. – Jester

ответ

2

Ваш ассемблер недостаточно умен, чтобы сообщить, что board + 0 - это смещение, используемое регистратом wrt $s0.

Обойти бы для вас, чтобы вычислить, что смещение, то есть:

lb  $t1, board($s0)  # Load current cell's value in $t1 

Здесь я удалил + 0 в board+0 как смещение точно так же. Ваш ассемблер должен почитать хотя бы этот формат, ярлык (зарегистрируйтесь)

1

Вы можете выполнять только постоянные операции во время сборки. board + 0($s0) не является постоянной операцией, потому что ассемблер не имеет возможности узнать, какое значение имеет значение 0($s0), так как это зависящее от времени значение.

Смежные вопросы