【发布时间】:2021-03-26 13:21:04
【问题描述】:
假设$t0存储字数组的基地址,$s0关联位置,$s1关联偏移量。我得把下面的程序段转换成Assembly,记下得到的数组内容
array = [0,1,2,3,4,5,6,7,8,9,10,11]
position = 0
offset = 1
while position < 11:
array[position] = array [position + offset]
position = position + 1;
到目前为止我已经写了这个-
.data
array:
.word 0,1,2,3,4,5,6,7,8,9,10,11
counter: .word 11
lw $t1,counter
la $t0,array
li $s0,0
li $s1,1
loop:
beq $s0,$t1,end
lb $s0,0($t0)
add $s0,$s0,@s1
sll $s0,$s0,2
add $s0,$t0,s0
sw $s1,($s0)
addi $s0,$s0,1
addi $t0,$t0,4
j loop
end:
我不知道如何从这里继续前进,有人可以帮忙
【问题讨论】:
-
假装你是电脑。在每条指令之后写下每个寄存器的值。您可能会注意到,您同时将
$s0用于两个相互冲突的目的。 -
我试图做出改变,但我不明白我哪里出错了
-
我的错误,您使用
$s1来保存偏移量,而不是$s0。但是,仍然不确定您的问题是什么。从这里开始的方法是(1)查看代码是否有效,(2)如果没有,请调试它。