2014-01-26 3 views
2

Я пытаюсь найти минимальное значение и сумму массива в MIPS. Я не могу понять, что я делаю неправильно, что он выдает неправильную сумму, и он даже не анализирует и не возвращает минимальное значение массива.Поиск минимального значения в массиве с помощью MIPS

Мне разрешено использовать только две инструкции по разделению, bne и beq, но любая другая инструкция - честная игра.

# local variable register 
# int sum  $s0 
# int min  $s1 (To be used when students enhance the program.) 
# int *p  $s2 
# int *past_last $s3 
# 
    .text 
    .globl main 
main: 
    la $s2, arr  # p = arr 
    addi $s3, $s2, 24  # past_last = p + 6 
    lw $s0, ($s2)  # sum = *p 
while: 
    addi $s2, $s2, 4  # p++ 
    beq $s2, $s3, endwhile # if (p == past_last) goto L2 
    lw $t0, ($s2)  # $t0 = *p 
    lw $t1, -4($s2)  # $t1 = *(p--) 
    slt $t2, $t1, $t0  # $t2 = 1 if (*p < *(p--)) else $t2 = 0 
    bne $t2, $zero, minimum # if ($t2 != 0) goto minimum 
    add $s0, $s0, $t0  # sum += $t0 
    j while 
minimum: 
    lw $s1, ($t1)  # min = $t1 
    j while 
endwhile:  

ответ

2

Это не то, как вы двигаетесь одного регистра в другой:

lw $s1, ($t1)  # min = $t1 

Это инструкция будет читать слово из адреса, содержащегося в $t1 и положить его в $s1. Правильный способ перемещения регистра в другой будет:

move $s1, $t1 

Или, если вы не хотите использовать псевдо-инструкции:

or $s1, $zero, $t1 

Ваш метод расчета минимума поскольку вы считаете, только элемент в положении N меньше элемента в позиции N-1. То, что вам нужно сделать, - инициализировать min ($s1) первому элементу массива перед циклом (например, вы делаете с суммой), а затем сравнить его с текущим элементом для каждой итерации цикла.


add, $s0, $s0, $t0 инструкция должна быть помещена перед темbne $t2, $zero, $minimum инструкции. В противном случае текущий элемент не будет добавлен к сумме, когда ветка будет взята (если ваш имитатор/эмулятор не эмулирует временные интервалы задержки ветвления, и ваш ассемблер не будет автоматически заполнять интервалы задержки для вас).

+0

спасибо! – user2880990

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