我对MIPS相对较新,并且一直在寻找扩展我的技能的示例问题。我遇到了这个问题:
从一个档案中减去另一个档案的元素并替换其中的值 第一个数组。
给定数组a和b,每个10个字长,每个值i为0 &lt; = i&lt; 10,设c = A [i] - B [i]。然后,如果c < 0设置A [i] = 0。 否则,设置A [i] = c。
完成代码以便正确加载数据值, 计算和存储。您必须使用循环来迭代加载 和商店
以下是我的编码尝试,但我注意到我的$12
和$13
未分别加载a
和b
的第一个值,因为我希望它们。任何帮助将非常感谢!
.data 0x10010000
.word 23 # a[0]
.word 6
.word 11
.word 7
.word 44
.word 32
.word 9
.word 16
.word 29
.word 13
.data 0x10010040
.word 6 # b[0]
.word 22
.word 9
.word 1
.word 3
.word 15
.word 10
.word 4
.word 30
.word 8
.text
.globl main
main:
lui $16, 0x1001 # $16 contains the address of a[0]
add $17, $16, 0
ori $17, $17, 0x0040 # $17 contains the address of b[0]
li $9, 0 #initiate iterator value
loop:
lw $12, 0($16) #load register with value of a
nop
lw $13, 0($17) #load register with value of b
nop
li $8, 0 #set c to 0
sub $8, $12, $13 # c = A(i) - B(i)
blt $8, 0, negative # if c is negative branch
nop
li $12, 0
add $12, $12, $8 #else A(i) = c
addi $9, $9, 1 #add 1 to iteration value
sw $12, 0($16) #store value back into a
nop
bne $9, 10, update #check that we have not the last array
nop
b exit #if so finish program
nop
negative:
li $12, 0
sw $12, 0($16) #store value back into a
addi $9, $9, 1 #add 1 to iteration value
beq $9, 10, exit
nop
b loop
nop
update:
add $16, $16, 4 #move to the next value in a
add $17, $17, 4 #move to next value in b
b loop
nop
exit:
b exit
nop
答案 0 :(得分:0)
当减法结果为负数时,您没有更新指针($16
和$17
)。
你应该删除行
nop
b loop
nop
位于beq $9, 10, exit
标签后的negative
之后。
我在代码中注意到的其他事项是,您在nop
和lw
之后添加了sw
,这是不需要的。