微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 MIP 堆栈中查找最大数量和平均值

如何解决在 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 举报,一经查实,本站将立刻删除。