从数组 MIPS 中获取偶数(从 1-10)的总和
Getting the sum of even numbers (from 1-10) from an array MIPS
我是 MIPS 的新手,我有点灰心,这是我的第一个任务,我已经感到卡住了。我似乎找不到问题。
.data
myArray: .space 40
.text
#For later to check if the number is even
addi $s2, $zero, 2
#values for the array
addi $t0, $zero, 1
addi $t1, $zero, 2
addi $t2, $zero, 3
addi $t3, $zero, 4
addi $t4, $zero, 5
addi $t5, $zero, 6
addi $t6, $zero, 7
addi $t7, $zero, 8
addi $t8, $zero, 9
addi $t9, $zero, 10
#initial index
addi $s1, $zero, 0
#putting the values in an array
sw $t0, myArray($s1)
addi $s1, $s1, 4
sw $t1, myArray($s1)
addi $s1, $s1, 4
sw $t2, myArray($s1)
addi $s1, $s1, 4
sw $t3, myArray($s1)
addi $s1, $s1, 4
sw $t4, myArray($s1)
addi $s1, $s1, 4
sw $t5, myArray($s1)
addi $s1, $s1, 4
sw $t6, myArray($s1)
addi $s1, $s1, 4
sw $t7, myArray($s1)
addi $s1, $s1, 4
sw $t8, myArray($s1)
addi $s1, $s1, 4
sw $t9, myArray($s1)
addi $s1, $s1, 4
#cleaning
addi $s1, $zero, 0
addi $s0, $zero, 0
loop:
beq $s1, 40, exit
addi $s1, $s1, 4
lw $s3, myArray($s1)
div $s3, $s2
mfhi $s4
beqz $s4, true
j loop
true:
add $s0, $s0, $s3
j loop
exit:
move $a0, $s0
syscall
我真的很感激能得到解决这个问题的帮助,还有一些关于更多地理解 mips 的建议和学习资源。
提前谢谢你。
你不说 'problem' 是什么。
为什么你不从一个已经有数据的数组开始?
myArray: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
您需要设置主标签
.text
.globl main
main:
# the code
用于检查是否为偶数的循环:
loop:
beq $s1, 40, exit
addi $s1, $s1, 4
这将使 s1 在您使用之前 增加 4 ,因此您不会获得第一个值。所以需要将添加部分移动到 after 那里你得到当前数组值。
用于检查它是否为偶数,或者可以对值底部位进行与运算 - 如果设置为奇数,否则为事件
所以
div $s3, $s2
mfhi $s4
可以改为
and $s4, $s3,
我是 MIPS 的新手,我有点灰心,这是我的第一个任务,我已经感到卡住了。我似乎找不到问题。
.data
myArray: .space 40
.text
#For later to check if the number is even
addi $s2, $zero, 2
#values for the array
addi $t0, $zero, 1
addi $t1, $zero, 2
addi $t2, $zero, 3
addi $t3, $zero, 4
addi $t4, $zero, 5
addi $t5, $zero, 6
addi $t6, $zero, 7
addi $t7, $zero, 8
addi $t8, $zero, 9
addi $t9, $zero, 10
#initial index
addi $s1, $zero, 0
#putting the values in an array
sw $t0, myArray($s1)
addi $s1, $s1, 4
sw $t1, myArray($s1)
addi $s1, $s1, 4
sw $t2, myArray($s1)
addi $s1, $s1, 4
sw $t3, myArray($s1)
addi $s1, $s1, 4
sw $t4, myArray($s1)
addi $s1, $s1, 4
sw $t5, myArray($s1)
addi $s1, $s1, 4
sw $t6, myArray($s1)
addi $s1, $s1, 4
sw $t7, myArray($s1)
addi $s1, $s1, 4
sw $t8, myArray($s1)
addi $s1, $s1, 4
sw $t9, myArray($s1)
addi $s1, $s1, 4
#cleaning
addi $s1, $zero, 0
addi $s0, $zero, 0
loop:
beq $s1, 40, exit
addi $s1, $s1, 4
lw $s3, myArray($s1)
div $s3, $s2
mfhi $s4
beqz $s4, true
j loop
true:
add $s0, $s0, $s3
j loop
exit:
move $a0, $s0
syscall
我真的很感激能得到解决这个问题的帮助,还有一些关于更多地理解 mips 的建议和学习资源。 提前谢谢你。
你不说 'problem' 是什么。
为什么你不从一个已经有数据的数组开始?
myArray: .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
您需要设置主标签
.text
.globl main
main:
# the code
用于检查是否为偶数的循环:
loop:
beq $s1, 40, exit
addi $s1, $s1, 4
这将使 s1 在您使用之前 增加 4 ,因此您不会获得第一个值。所以需要将添加部分移动到 after 那里你得到当前数组值。
用于检查它是否为偶数,或者可以对值底部位进行与运算 - 如果设置为奇数,否则为事件
所以
div $s3, $s2
mfhi $s4
可以改为
and $s4, $s3,