这个任务要求编写一个 MIPS 函数,该函数接受一个数组作为参数,将数组中所有元素相加并返回结果。主要问题是我对汇编语言不熟悉,并不确定如何在汇编语言中传递数组。目前我所拥有的代码如下:
# Title: homework2.asm
# Author: Jacob Suarez
# Date: 9/28/14
# Purpose: Create a function that can find the sum of the elements in an array, and run two arrays through it
# Text Segment
.text
.globl __start
__start:
li $t0, 0 # $t0 <- sum
li $a0, 0 # $a0 <- array index
# Set arr1 as the argument for the sumArr function
la $t4, arr1
sw $t4, arrx
# Set upper bound of array index
li $t9, 4
# Call function to calculate the sum of arr1
jal sumArr
sw $v0, sum1
la $a0, sum1
# Print sum1 from $a0
li $v0, 1
syscall
la $a0, end1
li $v0, 4
syscall
# Reset function arguments to 0
li $t0, 0 # $t0 <- sum
li $a0, 0 # $a0 <- array index
# Set arr2 as the argument for the sumArr function
la $t4, arr2
sw $t4, arrx
# Set upper bound of array index
li $t9, 5
# Call function to calculate the sum of arr2
jal sumArr
sw $v0, sum2
la $a0, sum2
# Print sum2 from $a0
li $v0, 1
syscall
la $a0, end2
li $v0, 4
syscall
# End program
li $v0, 10
syscall
sumArr:
lw $t2, arrx($a0) # $t2 <- value in the array
add $t0, $t0, $t2 # sum += A[i]
addi $a0, $a0, 4 # i++ in bytes
blt $a0, $t9, sumArr
# Move contents of $t0 to $a0
move $t0, $a0
# Return
jr $ra
# Data Segment
.data
arrx: .space 100
arr1: .word 8,12,20,40
arr2: .word 15,25,35,55,-129
sum1: .word 0
sum2: .word 0
end1: .asciiz " is the sum of arr1.\n"
end2: .asciiz " is the sum of arr2.\n"
# end of file homework2.asm
现在,这一切都运行得很好,但问题是结果似乎只是从未初始化的内存空间中提取出来的,所以我只得到像4268501128这样显然错误的数字,因此我认为我的问题是如何将数组传递给函数,具体来说是代码的这一部分:
# Set arr1 as the argument for the sumArr function
la $t4, arr1
sw $t4, arrx
任何建议吗?还是我的问题完全不同?
编辑:我认为我的问题实际上可能是数组没有正确初始化,或者我从中获取数据的方式,但我无法确定是否真的是这种情况,因为在我初始化它们的方式上似乎没有任何问题。
sw $t4,arrx
,我相信你需要使用la $??,arrx sw $t4,($??)
,因为MIPS不能直接从/向内存中加载/存储。 - puppydrum64