Я только начинаю в MIPS.У меня есть следующее назначение:
Подсчитать количество кратных X в данном массиве из 8 неотрицательных чисел, где X - выбранное пользователем значение степени двух, например, 1, 2, 4, 8,….
Введите необходимый код для:
a.Прочитайте значение пользовательского ввода, X. Вы можете предположить, что X всегда является целым числом степени двух, т. Е. Нет необходимости проверять неправильный ввод пользователя.
b.Подсчитайте количество кратных X в массиве A и выведите результат на экран.
Для этого набора входных данных, приведенных в коде, я пытаюсь получить вывод:
2
3
Однако у меня возникает следующая ошибка: «Неверный адрес в данных / стекечитать: 0x00000090 "
Я использую симулятор QTSpim, и это информация о сегменте данных.Могу ли я узнать, как 0x00000090 не является ячейкой памяти первого элемента массива, к которому я пытаюсь получить доступ?Этот код может не достичь желаемого результата, потому что я застрял на этой стадии отладки.
# arrayCount.asm
.data
arrayA: .word 11, 0, 31, 22, 9, 17, 6, 9 # arrayA has 8 values
count: .word 999
char: .ascii "\n"
.text
main:
# code to setup the variable mappings
la $t0, 144 #map arrayA
la $t8, 146 #map count
# code for reading in the user value X
li $v0, 5
addu $a1, $v0, -3
syscall
#start printing out the stored int here
li $v0, 1
addu $a0, $a1, $zero
syscall
#print newline character(Assuming string)
li $v0, 4
la $a0, char
syscall
#to set the higher bound to do a while loop
li $a0, 8
addi $t2, $zero, 0
# code for counting multiples of X in arrayA
loop:
slt $t1, $t2, $a0
beq $t1, $zero, exit
sll $t3, $t2, 2
add $t4, $t3, $t0
lw $t5, 0($t4)
and $t6, $t5, $a1
beq $t6, $zero, skip
addi $t8, $t8, 1
skip:
addi $t2, $t2, 1
j loop
exit:
# code for printing result
li $v0, 1
addu $a0, $t8, $zero
syscall
# code for terminating program
li $v0, 10
syscall