【问题标题】:Understanding MIPS assembly Code了解 MIPS 汇编代码
【发布时间】:2017-12-20 15:50:47
【问题描述】:

A,B,C 是长度为 6 的数组,基地址在寄存器中找到如下:

A=[0 1 2 3 4  5], Base = $t0
B=[1 3 5 7 9 11]  Base = $t1
C=[0 5 2 6 3  8]  Base = $t2

现在是代码本身:

add $t4, $zero, $zero
Loop: add $t5, $t4, $t1
      lw $t6, 0($t5)
      add $t5, $t4, $t2
      lw $t7, 0($t5)
      or $t6, $t6, $t7
      add $t5, $t4, $t0
      sw $t6, 0($t5)
      addi $t4, $t4, 4
      slti $t5, $t4, 20
      bne $t5, $zero, Loop

我的问题是:

1.) 当添加 $t4 和 $t1 时,我们是否在每个 B[i] 中添加零?

2.) 在 mips 中添加数组时,假设 add $t6, $t0,$t1 我们在做什么:

  • A[i]+B[i] 为所有索引,然后 $t6 是一个新数组?
  • 或者我们只是在做 A[0]+B[0]?

3.) 您究竟如何在数组上使用 OR?

【问题讨论】:

  • 然后 $t6 是一个新数组?不可能是这样的。它只是一个 32 位的寄存器。内存中发生的情况取决于您存储它的位置(使用sw $t6, 0($t5),其中$t5 之前计算为指向您现有的数组之一)。
  • Assembly 不像高级语言,您可以使用一条指令处理整个数组。这就是为什么这段代码在循环中!

标签: assembly mips smips


【解决方案1】:
  1. 不,因为t4 不会保持为零。这也是指针算法,不处理值。
  2. 您通常不会这样做,添加地址通常没有意义。代码中没有这样的东西。
  3. 我不明白这个问题。您将其应用于循环中的项目。这意味着什么,取决于数组包含的内容。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2013-06-04
    • 2018-10-22
    • 1970-01-01
    • 2014-08-16
    • 2017-08-18
    • 2014-09-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多