如何解决在 MIP 堆栈中查找最大数量和平均值
我一直在努力寻找这个项目中堆栈中最大的数字。我已经能够很好地获得准确的平均值,但最大值的值不准确。通常是 1 或 11。有什么想法吗?
当前的输出如下:
输入第一个数字:2
输入第二个数字:4
输入第三个数字:5
输入第四个数字:2
平均值为:3,最大为:11
.data
prompt1: .asciiz "Enter first number: "
prompt2: .asciiz "Enter second number: "
prompt3: .asciiz "Enter third number: "
prompt4: .asciiz "Enter fourth number: "
largest: .asciiz "The largest is: "
average: .asciiz "The average is: "
newLine: .asciiz "\n"
.text
#Subprogram largestAndAverage($a1,$a2,$a3,$a4)
#{
# int var0 = $a0,var1 = $a1,var2 = $a2,var3 = $a3;
# $s0 = getLarger($a1,$a2);
# $v0 = getLarager(s0,$a4); // Largest is in $v0
# $v1 = (var0 + var1 + var2 + var3)/ 4; // (Integer) Average is in $v1
# return;
#}
#Subprogram getLarger($a0,$a1) {
# $v0 = $a0
# if ($a1 > $a0)
# $v0 = $a1
# return;
#}
.globl main
main:
# register conventions
# $s0 - num1
# $s1 - num2
# $s2 - num3
# $s3 - num4
# $s4 - largest
# $s5 - average
# Todo: First numb
li $v0,4
la $a0,prompt1
syscall
li $v0,5
la $a0,newLine
syscall
move $s0,$v0
# Todo: Second numb
li $v0,prompt2
syscall
li $v0,newLine
syscall
move $s1,$v0
# Todo: Third numb
li $v0,prompt3
syscall
li $v0,newLine
syscall
move $s2,$v0
# Todo: Fourth numb
li $v0,prompt4
syscall
li $v0,newLine
syscall
move $s3,$v0
# Todo: Call Function
# .......
jal Largest_Avg
# .......
# Todo: Print the largest
# Todo: Print average
jal Exit
###############################################################
# YOUR PRECEDURES HERE ...........
###############################################################
Largest_Avg:
#load registers
la $a0,($s0)
la $a1,($s1)
la $a2,($s2)
la $a3,($s3)
bgt $a0,$a1,getLarger
#calculate average
add $t1,$a0,$a1
add $t2,$a3
add $t3,$t1,$t2
addi $t4,$zero,4
div $v1,$t3,$t4
li $v0,average
syscall
li $v0,1
add $a0,$v1
syscall
getLarger:
la $t5,($a0)
la $t6,($a1)
bgt $t5,$t6,print_num
move $v0,$t5
li $v0,largest
syscall
li $v0,$v0
syscall
print_num:
li $v0,1
la $a0,($v0)
syscall
###############################################################
.include "utils.asm"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。