mips,数组元素的乘法

时间:2014-04-21 19:47:23

标签: arrays mips32

我的代码有问题。我有一个数组matrix1,我的目标是打印另一个数组matrix2。第二个数组的元素是matrix1[i]* i。 我的代码的问题是乘法的过程仅适用于第一个数字。

例如:

第一阵列:2 6 16 10
第二个数组必须是:2 12 54 40
但它是:2 4 6 8

这是我的代码

multing:
bgt $t0,$s0,jump     #t0=i , $s0=dimention
lw $t1,0($a1)        #a1=address of first array , t1=matrix[i]
mul $t2,$t1,$t0      #t2=t1*t0
sw $t2,0($a2)        #store the element
addi $t0,$t0,1       #i=i+1
addi $a1,$a1,4       #next address in first array
addi $a2,$a2,4       #next address in second array
b multing            #repeat loop

1 个答案:

答案 0 :(得分:0)

你的algthm没有错。它按预期工作(3*16 = 48除外)。我怀疑你正在设置你的算法错误或打印出数组进行验证不正确。

以下是使用您的algthm的程序,该程序按预期工作并打印2 12 48 40

.data
array1: .word 2,6,16,10
array2: .word 0,0,0,0

.text
main:

la $a1 array1
la $a2 array2
li $t0 1
li $s0 4

multing:
bgt $t0,$s0,jump     #t0=i , $s0=dimention
lw $t1,0($a1)        #a1=address of first array , t1=matrix[i]
mul $t2,$t1,$t0      #t2=t1*t0
sw $t2,0($a2)        #store the element
addi $t0,$t0,1       #i=i+1
addi $a1,$a1,4       #next address in first array
addi $a2,$a2,4       #next address in second array
b multing            #repeat loop

jump:

move $t0 $zero
la $a1 array2
li $t1 4

printLoop:
    lw $a0 0($a1)
    li $v0 1
    syscall

    li $a0 ' '
    li $v0 11
    syscall

    addi $a1 4
    addi $t0 1

    blt $t0 $t1 printLoop

jr $ra