【问题标题】:use of offset in MIPS在 MIPS 中使用偏移量
【发布时间】: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)如果没有,请调试它。

标签: mips offset


【解决方案1】:

试试这个代码:

               .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,$s1,4
        add $s3,$s3,4
        j loop

        end:


          li $a0, 0
          li $v0, 17              #exit
          syscall

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2016-07-28
    • 2018-08-11
    相关资源
    最近更新 更多