2013-10-26 2 views
0
function: 


la $s0, array1  # loads address of array1 into $s0 
lw $t8, ($s0)  # loads word contained in $s0 into $t8 

la $s1, array2  # loads address of array2 into $s1 
lw $t9, ($s1)  # loads word contained in $s1 into $t9 

beq $t8, $t9, count # if first element of arrays is equal --> count 
j end 

count: 

la $t7, counter  # loads address of count into $t7 
lw $t3, ($t7)  # loads word contained in $t7 into $t3 
addi $t3, $t3, 1 # increments count by 1 
sw $t3, counter  # now count var contains 1 


printcount: 

li $v0, 4    # print string syscall code 
la $a0, prompt3  # prints "number of same elements: " 
syscall 

la $t6, counter  # loads address of count into $t6 
lw $t5, ($t6)  # loads word contained in $t6 into $t5 
li $v0, 1    # print integer syscall code 
move $a0, $t5  # move integer to be printed into $a0 
syscall 


end: 

    li $v0, 10   # system code halt 
syscall 

Привета, в этом разделе программы предполагается сравнить первый элемент из двух массивов (которые пользователь введенного, я подтвердил, что массивы хранится правильно), и если эти элементы равны, «счетчик» будет увеличен на 1 и напечатан, чтобы я знал, правильно ли он работает.MIPS: сравнение первого элемента из двух массивов

Проблема в том, что она всегда печатает '1', независимо от того, равны или не равны два элемента. Что может быть причиной этого?

+0

Вы можете использовать 'count' в качестве метки кода и как элемент данных - это на самом деле не может быть и другое. –

+0

спасибо, я скопировал код неправильно. Должен быть правильный код сейчас. – DjokovicFan

+1

забыл добавить условие, если два не были равны. Добавлен. – DjokovicFan

ответ

0

Ну, код заканчивается выполнением инструкций на этикетке count независимо от того, взята ли ветка. Попробуйте что-то вроде bne вместо beq:

bne $t8, $t9, skip_count # if first element of arrays not equal --> skip_count 


count: 

la $t7, counter  # loads address of count into $t7 
lw $t3, ($t7)  # loads word contained in $t7 into $t3 
addi $t3, $t3, 1 # increments count by 1 
sw $t3, counter  # now count var contains 1 

skip_count: 
+0

спасибо, я только понял, что после того, как я опубликовал последний комментарий, lol. Код работает по своему усмотрению. – DjokovicFan

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