Architecture 评估汇编代码的操作

Architecture 评估汇编代码的操作,architecture,mips,computer-architecture,Architecture,Mips,Computer Architecture,这是我的家庭作业 尽可能简洁地描述以下MIPS代码 实现?假设寄存器$8包含数组A的基址 现在我得到的答案是 如果[0]包含的值小于0,则循环将继续无限运行 大于或等于0。 如果我做错了,请指导我 提前谢谢。再看一看这个。7号线上发生的事情很重要。addi$8、$8、4在做什么?这将有助于你回答问题。我认为您当前的答案还不够。在a的帮助下,让我们将汇编代码翻译成更容易理解的形式: Compute r0 + 0 and store to r10. L1: Load word at

这是我的家庭作业

尽可能简洁地描述以下MIPS代码 实现?假设寄存器$8包含数组A的基址

现在我得到的答案是

如果[0]包含的值小于0,则循环将继续无限运行 大于或等于0。 如果我做错了,请指导我


提前谢谢。

再看一看这个。7号线上发生的事情很重要。
addi$8、$8、4在做什么?这将有助于你回答问题。我认为您当前的答案还不够。

在a的帮助下,让我们将汇编代码翻译成更容易理解的形式:

    Compute r0 + 0 and store to r10.
L1:
    Load word at address r8 + 0 to r16.
    If r0 is less than r16, then set r9 to 1, else set r9 to 0.
    If r9 equals r0 then goto L2.
    Compute r10 + 1 and store to r10.
    Compute r8 + 4 and store to r8.
    Goto L1.
L2:
请注意,r0的值始终为零

让我们进一步翻译:

r10 = 0
while true:
    r16 = memory[r8]
    r9 = if r16 > 0 then 1 else 0
    if r9 == 0:
        break
    r10 += 1
    r8 += 4

下面是对原始问题的完整、直接的回答——“代码做什么?”:

  • 我们假设r8指向有符号32位整数数组的开始
  • 代码在数组中向前搜索一个非正元素,当且仅当它找到这样一个元素时才会停止。如果停止,则这些属性保持不变:
    • r10等于找到的元素的数组索引。(即0、1、2等)
    • r8等于找到的元素的地址。(这是r8加上4*r10的原始值。)
    • r16等于找到的元素的值(为零或负)
    • r9等于0。(条件代码)

(解释在我的另一篇回复文章中。)

我可以从中看出,它将继续增加到数组A的下一个索引。这就是你的意思吗?对,这是它的关键部分。接下来,这与beq$9,$0,L2指令有什么关系?看看你是否可以用这个想法修改你的家庭作业答案。数组A的索引将不断增加,直到找到值0为止。我说得对吗?靠近点。这是下一条关键指令:
slt$9、$0、$16
。这里发生了什么?而且(因为你已经得到了答案)这是如何改变循环行为的?现在困扰我的问题是,“r16能保持什么?”注意到r16在每次循环迭代中都会被重写?
r10 = 0
while true:
    r16 = memory[r8]
    r9 = if r16 > 0 then 1 else 0
    if r9 == 0:
        break
    r10 += 1
    r8 += 4