Итак, мне было поручено написать функцию MIPS (называемую «my_inthist»), которая вычисляет гистограмму массива неотрицательных целочисленных значений (не более 100 элементов) и возвращает количество уникальных значений.
-адрес входного массива будет передан с использованием регистра $ a0
-количество элементов с использованием регистра $ a1
-адрес выходного массива для сохранениярезультаты в $ a2 (мы предполагаем, что выходной массив достаточно большой)
- Записи в результирующем массиве должны быть отсортированы от малого к большому в соответствии со значениями во входном массиве.
Вот как должен выглядеть вывод:
Please enter an integer: 5
7 6 1 2 7 .
The number of unique values is 4.
1 1.
2 1.
6 1.
7 2.
Your counts are correct.
Your results are sorted correctly.
Итак, вот код, который у меня есть, и неправильные результаты, которые он продолжает печатать.
my_inthist:
add $t0, $zero, $zero # i = 0
add $t3, $zero, $zero # k = 0
loop:
slt $t1, $t0, $a1 # i < num of elements(length)
beq $t1, $zero, end
sll $t1, $t0, 2
add $t1, $a0, $t1 # $t1 = a[i]
lw $t2, 4($t1) # $t2 = a[a+i]
beq $t1, $t2, count # if one int is equal to another, k--
addi $t3, $t3, 1 # i++
addi $t0, $t0, 1 # k++
j loop
count:
subu $t3, $t3, 1 # k--
j loop
end:
move $v0, $t3 # return num of unique values k
jr $ra
Вот результаты, которые я продолжаю получать:
Please enter an integer: 5
7 6 1 2 7 .
Number of unique values is 5.
0 0.
0 0.
0 0.
0 0.
0 0.
Your counts are correct.
Your results are not sorted.
Я все еще не уверен в двух вещах: почему именно он не будет подсчитывать числа и выводить счетчики, икак именно сортировать полученный массив.