Я пишу программу MiPS, которая проверит список из 15 результатов тестов. И он будет вводить из терминала. Ну, критерием прохождения является оценка 50. Выходные сигналы терминала будут включать в себя оценки в каждой категории, а также количество учащихся, прошедших и не прошедших обучение. с подсказками ввода и выводами ... Ниже приведена программа, которую я написал, но она не работала .... Пожалуйста, мне нужно .... Я не знаю, делаю ли я это неправильно ..
.globl main
.text
главный:
li $ t0, 0 # счетчик для сдачи оценок
la $ t1, pass #pointer для массива pass
li $ t2, 0 # счетчик для неудачных оценок
la $ t3, fail #pointer для проходного массива
li $ t4, 0 # счетчик операций
li $ t5, 0
li $ t6, 0
цикл:
li $ v0, 4 # системный вызов для печати строки
la $ a0, строка приглашения #load
системный вызов
li $v0, 5 #system call for read integer
syscall #read integer
bltu $v0, 50, else #if $v0 < 50 branch to else (failing grade)
sw $v0, 0($t1) #store word in pass array
addi $t1, $t1, 4 #t1 = t1 + 4 (increment pass pointer)
addi $t0, $t0, 1 #t0 = t0 + 1 (increment pass counter)
b l_end #branch over else statement
еще:
sw $ v0, 0 ($ t3) # слово магазина в массиве сбоев
addi $ t3, $ t3, 4 # t3 = t3 + 4 (увеличение приращения указателя)
addi $ t2, $ t2, 1 # t1 = t1 + 1 (счетчик ошибок приращения)
l_end:
addi $ t4, $ t4, 1 # общий счетчик
bltu $ t4, 15, цикл # если t4 <= 15 переход к циклу </p>
количество выходных данных
li $v0, 4 #system call for print string
la $a0, o_pasc #load string
syscall #output "Number of Passing Scores:
la $v0, 1 #system call for print integer
add $a0, $t0, 0 #load value of pass counter into $a0
syscall #output value
li $v0, 4 #system call for print string
la $a0, o_fasc #load string
syscall #output "Number of Failing Scores: "
la $v0, 1 #system call for print string
add $a0, $t2, 0 #load value of fail counter into $a0
syscall #output value
выходной проходной балл
li $v0, 4 #setup output
la $a0, o_pass #setup text
syscall #output string o_pass
la $t1, pass #load address of pass pointer to t1
lw $a0, 0($t1) #load word at $t1 into $a0
li $v0, 1 #system call for print integer
loop_a:
bleu $ t0, $ t5, lp_a_end #if t0 <= t5 переход в lp_a_end
системный вызов #output один балл </p>
li $v0, 4 #system call for print string
la $a0, o_coma #load string
syscall #ouput comma and space
li $v0, 1 #setup output
addi $t1, $t1, 4 #move pointer down by 1 word
lw $a0, 0($t1) #move word at pointer into $a0
addi $t5, $t5, 1 #add 1 to counter
b loop_a #branch to top
lp_a_end:
результаты с ошибками вывода
la $t5, 0 #clear t5 (counter)
li $v0, 4 #setup output
la $a0, o_fail #setup text
syscall #output string o_fail
la $t3, fail #load address for fail pointer into $t3
lw $a0, 0($t3) #load word at mem addy $t3 into $a0
li $v0, 1 #system call for print integer
loop_b:
bleu $ t2, $ t5, lp_b_end #if t2 <= t5 переход в lp_a_end
системный вызов #output один балл </p>
li $v0, 4 #system call for print string
la $a0, o_coma #load string
syscall #output comma and space
li $v0, 1 #setup output
addi $t3, $t3, 4 #move pointer down by 1 word
lw $a0, 0($t3) #load word from mem addy $t3 to $a0
addi $t5, $t5, 1 #add 1 to counter
b loop_b #branch to top
lp_b_end:
конец
li $v0, 4 #setup output
la $a0, o_brk #setup text
syscall #output line break
li $v0, 10 #loads 10 to $v0
syscall #ends program