【问题标题】:averge of 10 number mars mips平均 10 个数字 mars mips
【发布时间】:2017-03-21 07:34:25
【问题描述】:

下面我从用户那里读取一个包含 10 个整数的数组,并按升序对其进行排序。

 .data
 array:  .space 40  
 prompt: .asciiz "Enter a number: " 
 spacee: .asciiz " "
 output: .asciiz "The numbers are: "
 .text

 main:
 li $t1,10         #load 10 into $t1
  la $a1,array      #load a pointer to array into $a1

 loop:
  addi $t1,$t1,-1   #subtract 1 from $t1, save to $t1
  li $v0,4          #load 4 into $v0 (print string)
  la $a0,prompt     #load prompt text into $a
  syscall           #display prompt
  li $v0,5          #load 5 into $v0 (read integer)
  syscall           #prompt for input
  sw $v0,0($a1)     #store input int to array
  addi $a1,$a1,4    #add 4 to $a1, save to $a1
  bnez $t1,loop     #if $t1 isn't zero,goto loop
  li $t1,9          #if $t1 is zero, load 9 into $t1
  li $t2,9          #and load 9 into $t2
  la $a1,array      #load array pointer into $a1

 loop1:
  beqz $t2,here     #if $t2 is zero, goto here
  addi $t2,$t2,-1   #subtract 1 from $t2, save to $t2
  lw $t5,0($a1)     #load an input int into $t5
  lw $t6,4($a1)     #load the next one into $t6
  addi $a1,$a1,4    #add 4 to $a1, save to $a1
  ble $t5,$t6,loop1 #if $t5 <= $t6, goto loop1
  sw $t5,0($a1)     #else, store $t5 in $a1
  sw $t6,-4($a1)     #and store $t6 in $a1-4 (swapping them)
  bnez $t2,loop1    #if $t2 is not zero, to go loop1

 here:
  la $a1,array      #load array into $a1
  addi $t1,$t1,-1   #subtract 1 from $t1, save to $t1
  add $t2,$t2,$t1   #add $t2 to $t1, save to $t2
  bnez $t1,loop1    #if $t1 isn't zero, goto loop1
  li $v0,4          #load 4 into $v0 (print string)
  la $a0,output     #load 'the numbers are' into $a0
  syscall           #display message to screen
  la $a1,array      #load array pointer into $a1
  li $t1,10         #load 10 into $t1

 loop2:
  li $v0,1          #load 1 into $v0 (print int)
  lw $a0,0($a1)     #load $a1 into $a0
  syscall           #print first number to screen
  li $v0,4          #load 4 into $v1 (print string)
  la $a0,spacee     #load ' ' into $a0
  syscall           #print ' ' to screen
  addi $a1,$a1,4    #add 4 to $a1, save to $a1
  addi $t1,$t1,-1   #subtract 1 from $t1, save to $t1
  bnez $t1,loop2    #if $t1 isn't zero, goto loop2

  li $v0,10              #exit

     syscall

如何在不更改顺序的情况下计算此数组的平均值?我的意思是,我可以将其他代码放在哪里?

【问题讨论】:

    标签: assembly mips mars-simulator


    【解决方案1】:

    loop2 结束之后[syscall 10 之前],您可以添加另一个循环来计算总和。除了 no 打印代码

    之外,它将类似于 [并且比] 您的打印循环

    但是,您也可以在打印时计算 loop2 中的总和。无论哪种方式,方法都是相似的

    loop2: 之前将另一个寄存器初始化为零:(例如li $t2,0)以保存总和。

    然后,在lw之后,插入

        add     $t2,$t2,$a0             # calculate sum of array
    

    bnez $t1,loop2之后,添加以下内容:

        li      $t1,10                  # get the count
        div     $t2,$t1                 # avg = sum / count
        mflo    $t2                     # get quotient
    

    现在,您可以简单地打印 $t2 中的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多