如何解决在 MIPS 中使用偏移量
假设$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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。