#arrays #mips
#массивы #mips
Вопрос:
Я новичок в MIPS, и я немного обескуражен, это моя первая задача в этом, и я уже чувствую, что застрял. Кажется, я не могу найти проблему.
.data
myArray: .space 40
.text
#For later to check if the number is even
addi $s2, $zero, 2
#values for the array
addi $t0, $zero, 1
addi $t1, $zero, 2
addi $t2, $zero, 3
addi $t3, $zero, 4
addi $t4, $zero, 5
addi $t5, $zero, 6
addi $t6, $zero, 7
addi $t7, $zero, 8
addi $t8, $zero, 9
addi $t9, $zero, 10
#initial index
addi $s1, $zero, 0
#putting the values in an array
sw $t0, myArray($s1)
addi $s1, $s1, 4
sw $t1, myArray($s1)
addi $s1, $s1, 4
sw $t2, myArray($s1)
addi $s1, $s1, 4
sw $t3, myArray($s1)
addi $s1, $s1, 4
sw $t4, myArray($s1)
addi $s1, $s1, 4
sw $t5, myArray($s1)
addi $s1, $s1, 4
sw $t6, myArray($s1)
addi $s1, $s1, 4
sw $t7, myArray($s1)
addi $s1, $s1, 4
sw $t8, myArray($s1)
addi $s1, $s1, 4
sw $t9, myArray($s1)
addi $s1, $s1, 4
#cleaning
addi $s1, $zero, 0
addi $s0, $zero, 0
loop:
beq $s1, 40, exit
addi $s1, $s1, 4
lw $s3, myArray($s1)
div $s3, $s2
mfhi $s4
beqz $s4, true
j loop
true:
add $s0, $s0, $s3
j loop
exit:
move $a0, $s0
syscall
Я был бы очень признателен за помощь в решении этой проблемы, а также за некоторые предложения по более глубокому пониманию mips и источников для изучения.
Заранее благодарю вас.
Ответ №1:
Вы не говорите, в чем «проблема».
По какой-либо причине вы не начинаете с массива, в котором уже есть данные?
myArray: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Вам нужно установить основную метку
.text
.globl main
main:
# the code
Для цикла проверки, является ли его четным:
loop:
beq $s1, 40, exit
addi $s1, $s1, 4
Это увеличит s1 на 4 перед его использованием, поэтому вы не получите первое значение. поэтому необходимо переместить часть добавления на after, где вы получаете текущее значение массива.
Для проверки, является ли оно четным, или можно было бы выполнить и нижнего бита значений — если установить его нечетным, в противном случае его событие
Итак
div $s3, $s2
mfhi $s4
может быть изменено на
and $s4, $s3,