微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 MIPS 中使用偏移量

如何解决在 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 举报,一经查实,本站将立刻删除。