如何解决以mips为单位查找数组平均值的问题
我最近开始学习 Mips 汇编语言并了解它的基础知识。我在以 mips 为单位找到我的程序的平均值时遇到了一些问题。有人可以通过向我解释用于找出平均值的说明来帮助我。非常感谢代码示例。
解决方法
我可以为您提供示例代码。有用的信息通过下面代码中的注释被告知。我希望这会有所帮助。
.数据
arr: .word 1,2,3,4,5,6,7 arrLen: .word 7 平均值:.asciiz "\n平均值:"
.text .globl 主
主要:
la $t0,arr #array is stored
lw $t1,arrLen #array length stored
li $t2,0
li $t3,0
loop: #loop 求和
sltiu $t7,$t2,7 #should be run uptil 7 since its the array length
beq $t7,$0,stop
lw $t4,($t0)
addu $t3,$t3,$t4
addiu $t0,$t0,4
addiu $t2,1
j loop
停止:
la $a0,avg
li $v0,4
syscall
div $t5,$t1 #average is taken out using the sum calculated above
move $a0,$t5 #value moved to a0 register to be printed
li $v0,1
syscall
li $v0,10
syscall #end
,
.data
大小:.word 0 to_store: .word 0 总和:.word 0 平均:.word 0
size_prompt: .asciiz "请输入元素数量:" element_prompt: .asciiz "输入一个元素:" msg_space: .asciiz " "
.text
.globl main
主要:
# Prints prompt
la $a0,size_prompt
addi $v0,4
syscall
# Gets input from user
addi $v0,5
syscall
sw $v0,size
addi $t0,0
# Creates the list
lw $s0,size
addi $t1,4
mult $s0,$t1
mflo $t2
add $a0,$t1,$t2
addi $v0,9
syscall
堆栈: beq $t0,$s0,list_sum
# prompt user for list element
la $a0,element_prompt
addi $v0,4
syscall
# read in element value
addi $v0,to_store
lw $t5,to_store
# push element to stack
addi $sp,$sp,-4
sw $t5,0($sp)
addi $t0,1
j stack
# get sum of array elements
list_sum: beq $s0,average # 最后?如果是,飞 lw $t6,sum # 获取之前的总和 lw $t7,0($sp) # 获取下一个数组元素值 addi $sp,4 # 提前数组指针 添加 $t6,$t7,$t6 # sum += array[i] sw $t6,sum # 存储它 addi $s0,-1 # 减少计数 j list_sum
平均: lw $t0,sum # 求和
# print the sum
li $v0,1
move $a0,$t0
syscall
# NOTE/FIX: restore the count value
lw $s0,size
div $t0,$s0 # divide by count
mflo $t0
sw $t0,avg # store average
li $v0,4
la $a0,msg_space
syscall
# print average
lw $a0,avg
addi $v0,1
syscall
退出: li $v0,10 # 退出程序 系统调用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。