【发布时间】:2010-10-23 13:16:03
【问题描述】:
我正在编写一个 MiPS 程序,它将检查 15 个测试分数的列表。它将从终端输入。嗯,通过标准是50分。终端的输出将包括每个类别的分数以及通过和失败的学生人数。带有输入提示和输出语句...下面是我编写的程序,但它没有工作....请我需要....我不知道我是否做错了..
.globl main
.text
主要:
li $t0, 0 #及格分数计数器
la $t1, 通过#pointer 传递数组
li $t2, 0 #不及格的计数器
la $t3, 失败 #pointer for pass 数组
li $t4, 0 #总计数器
li $t5, 0
li $t6, 0
循环: li $v0, 4 #系统调用打印字符串 la $a0, 提示 #load string 系统调用
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, loop #if t4
输出计数
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
循环_a: bleu $t0, $t5, lp_a_end #if t0
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
循环_b: bleu $t2, $t5, lp_b_end #if t2
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
【问题讨论】:
-
你应该编辑这个,有些部分的代码是不可读的(夸大其词,我知道)