汇编语言MIPS:初始化和求和一个数组

3

假设我们有一个包含10个数字的数组,并且我们想将这些数字相加并存储到一个变量中,代码如下:

int arr[10]= {1, 15, 0, -3, 99, 48, -17, -9, 20, 15};

sum = 0;

for(i=0; i<10; i++)

   sum = sum + arr[i];

当我尝试“汇编MIPS”时,会出现一个特定的行错误:
.data
arr: .word 1, 12, 0, -3, 99, 48, -17, -9, 20, 15

.text
.globl main
main:

add $t0, $zero, $zero   #counter i
add $t1, $zero, $zero   #sum

la  $t2, arr      #loading the address of the array to a register

loop:
slti    $t3, $t0, 10        #i<10
beq $t3, $zero, EXIT

add $t1, $t1, $t2($t0)     #wrong wrong very wrong

addi    $t0, $t0, 1        #i++
j loop
EXIT:

li  $v0, 10
syscall

我有一个问题,不明白如何将"arr[i]"点表达为汇编语言。

正确的表达式是什么?

每个数组数字是否都需要使用另一个寄存器?


看看这个答案是否有帮助。 - Jester
我在beq指令后添加了"lw $t4, ($t2) addi $t2, $t2, 4",并删除了错误的命令。程序能够运行,但没有展示任何东西。 - Coursal
你没有任何代码可以展示。 - Jester
我忘记在循环结束时添加一些打印代码了。在 EXIT 标签之后,应该是 "add $a0, $zero, $t1\n\nli $v0, 1\nsyscall"。非常感谢。 - Coursal
1个回答

5
感谢上面的Jester,正确的代码如下:
.data
arr: .word 1, 12, 0, -3, 99, 48, -17, -9, 20, 15

.text
.globl main
main:

add $t0, $zero, $zero   #counter i
add $t1, $zero, $zero   #sum

la  $t2, arr

loop:
slti    $t3, $t0, 10        #i<10
beq $t3, $zero, EXIT

lw  $t4, ($t2)  #$t4 = arr[i]
addi    $t2, $t2, 4

add $t1, $t1, $t4   #sum = sum + arr[i]

addi    $t0, $t0, 1 #i++
j loop
EXIT:

add $a0, $zero, $t1     #moving the sum to $a0 register for printing

li  $v0, 1
syscall

li  $v0, 10
syscall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接