我正在编写一个 MiPS 程序,它将检查 15 个测试分数的列表。它将从终端输入。嗯,通过标准是50分。终端的输出将包括每个类别的分数以及通过和失败的学生人数。带有输入提示和输出语句...下面是我编写的程序,但它没有工作..请我需要..我不知道我是否做错了..
.globl main
.text
main: li $t0, 0 #通过分数计数器 la $t1, pass #pointer for pass 数组
li $t2, 0 #counter 分数不及格 la $t3, fail #pointer for pass array li $t4, 0 #overall counter li $t5, 0 li $t6, 0
loop: li $v0, 4 #system call for print string la $a0, prompt #load string syscall
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
else: sw $v0, 0($t3) #store word in fail array addi $t3, $t3, 4 #t3 = t3 + 4 (递增失败指针) addi $t2, $t2, 1 #t1 = t1 + 1 (递增失败计数器)
l_end: addi $t4, $t4, 1 #增量总计数器 bltu $t4, 15, loop #if t4 <= 15 分支到循环
输出计数
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 branch to lp_a_end syscall #output single score
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 branch to lp_a_end syscall #output single score
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