问题描述
假设$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,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,2
add $s0,$t0,s0
sw $s1,($s0)
addi $s0,1
addi $t0,4
j loop
end:
我不知道如何从这里前进,谁能帮忙
解决方法
试试这个代码:
.data
array:
.word 0,1,2,3,4,5,6,7,8,9,10,11
counter: .word 44 # 11 *4 bytes
.text
.globl main
main:
lw $t1,counter
la $s0,array # array[i]
la $s1,array #
add $s1,$s1,4 # array[i+1]
la $s2,array
li $s3,0 # position
li $s4,4 # offset = 4 bytes
li $t4,0
loop:
beq $s3,$t1,end
add $t4,$s3,$s4 # $t4 = position + offset
lw $t3,($s1)
sw $t3,($s0)
add $s0,$s0,4
add $s1,4
add $s3,4
j loop
end:
li $a0,0
li $v0,17 #exit
syscall