Проверка количества нулей в массиве MIPS

У меня есть вопрос следующим образом:

Учитывая массив 32-битных целых чисел со знаком в памяти и его длину в одном из регистров, напишите программу MIPS, которая подсчитывает, сколько нулей содержит этот массив. Предположим, что массив начинается с Ox12345678, а длина массива уже хранится в $1. Количество нулей должно быть сохранено в $2, который мэр не может быть инициализирован с нуля в начале. Обратитесь к Таблице 1 за инструкциями по сборке MIPS.

Вот куда я попал в своей голове, но у меня есть один главный вопрос:

1) Я думаю, что если у меня есть подпрограммы, мне нужно вытолкнуть, а затем вытолкнуть данные из стека с помощью sw $ra, 4($sp) а также addi $sp,$sp,-8 а также sw $fp, 0($sp), Однако, используя мою программу, у меня есть предложение break, которое перемещается в подпрограмму только по условию (если что-то стоит $0). Так что я не jal к подпрограмме я beq в подпрограмму. Как я могу изменить свой код для этого?

Вот мой текущий код:

Add $3, $0, $0 #Set a counter to 0, the start of the array
Lui $4, 0x1234
Ori $4, $4, 0x5678  #Store register $4 to start of the array so you can offset
Add $2, $0, $0 #Sets $2 to $0 which is the total number of zeros

Start_for:  Beq $3, $1, end_for #If counter is equal to the array length, go to end
            Lw $5, 0x0($4) Load the current value of array into temp register $5
            Addi $4, $4, 4 #Increment array pointer to next value
            Beq $5, $0, increment #Increment the sum by 1 if the array[i] is zero
            Addi $3, $3, 1 #Increment counter by 1
            J start_for     
increment:
            Addi $2, $2, 1 #Increment the number of zeros by 1 and add to sum
            Jr $ra
End_for:    Lui $8, 0xffff
            Ori $8, $8, 0xf004 Load the outtray into $8
            Lw $8, 0x0($2) Store the number of zeros in the array to the outtray

0 ответов

Другие вопросы по тегам