У меня есть вложенный цикл цикла с несколькими условиями для преобразования с использованием MIPS. Мой конкретный вопрос: как я сломаю эту строку из кода C, чтобы завершить эту инструкцию в 1 ветви в преобразовании MIPS? ->if((a[i] > 0) && (b[j] > 0))
Вложенные в Loop множественные условия Mips
* Я обновил код, чтобы разбить условие if. Я получаю сообщение об ошибке при работе на Марсе. Ошибка:
строка 28: время выполнения исключение в 0x00400074: адрес выборки не выровнен по границе слова 0x10010069
код C находится здесь:
int i, j, M, N, count;
int a[];
int b[];
for(i=0; i<M; i++) {
for(j=0; j<N; j++) {
if((a[i] > 0) && (b[j] > 0)) {
count = count + 1;
}
}
}
То, что я здесь:
.data
a: .space 100 # Declare a array with 100 bytes of data
b: .space 100 # Declare b array with 100 bytes of data
i: .word 0 # Declare i counter
j: .word # Declare j counter
.text
addi $t0, $zero, 10 # $t0 variable with score 10
addi $s1, $zero, 0 # $s1 variable with array index 0
sw $t0, a($s1) # Store 10 into a array at location
addi $t1, $zero, 15 # $t0 variable with score 15
addi $s2, $zero, 0 # $s2 variable with array index 0
sw $t1, b($s2) # Store 15 into b array at location 0
lw $t2, i($zero) # Initialize loop index i to 0
lw $t3, j($zero) # Intialize loop index j to 0
addi $s2, $zero, 5 # Initialize M to 5
addi $s3, $zero, 5 # Initialize N to 5
addi $s4, $zero, 0 # Initialize count to 0
OuterLoop: beq $t2, $s2, Exit # i=M Exit the loop
lw $t0, a($s1) # Load value from a array
bgt $t0, 0, InnerLoop # if a[i] > 0
InnerLoop: beq $t3, $s3, Exit # j=N Exit the loop
lw $t1, b($s2) # Load value from b array
bgt $t1, 0, Increment # if b[j] > 0
Increment: addi $s4, $s4, 1 # Increment count by 1
addi $t2, $t2, 1 # Increment i by 1
addi $t3, $t3, 1 # Increment j by 1
j OuterLoop
Exit:
Вы понимаете, что можете вытащить 'a [i]> 0' из внутреннего цикла? – EOF
@EOF, что вы имеете в виду? – Kay
Вы можете переписать циклы как 'for (i = 0, i 0) для (j = 0; i 0 ; ' –
EOF