不明白为什么MIPS汇编问题不正确

问题描述 投票:0回答:1

我在MIPS组装考试中有几个被标记为不正确的问题,我想知道是否有人可以帮助我找出原因,因为我根本不明白为什么。

第一个问题:

将寄存器$ t1的所有位设置为1

我的回答是ori $t1, $t1, -1


其他两个问题给出了一些汇编代码,并要求“编写每个汇编程序执行的操作。”原始代码未注释。下面的评论是我的。

第一个简短回答问题:

        .data
len:    .word   4
list:   .word   -4, 6, 7, -2, 1
        .text
main:   la $s0, list
        la $s1, len
        lw $t1, 0($s1)       // NOTE: 4, so loops over array
        add $t0, $zero, $zero
alpha:  lw $t2, 0($s0)
        blez $t2, beta
        add $t0, $t0, $t2
beta:   addi $t1, $t1, -1
        addi $s0, $s0, 4
        bgtz $t1, alpha
        add $v0, $zero, $t2   // NOTE: $t2 should be $t0?
        jr $ra

我对第一个简短答案的回答是:“将数组的所有正元素加起来,并返回数组的最后一个元素”

我以为倒数第二行应使用$ t0而不是$ t2,以便它将返回计算得出的总和,而不是最后一个元素,但是我在考试期间询问了讲师,他说要处理所有给定的代码即使我认为这是一个错误也要正确/预期。


第二个简短回答问题。同样,原始代码没有注释。下面的评论是我的。

        .data
len:    .word   4
list:   .word   -4, 6, 7, -2, 1
        .text
main:   la $s0, list
        la $s1, len
        lw $t1, 0($s1)        // $t1 = len
        add $t4, $zero, $zero // $t4 = 0
alpha:  lw $t0, 0($s0)
        add $t4, $t4, $t0     // $t4 adds up all elements of array
        addi $t1, $t1, -1
        addi $s0, $s0, 4
beta:   blez $t1, alpha
        or $v0, $t4, $zero
        jr $ra

我对第二个简短答案的回答是:“返回数组中所有元素的总和”

[如果有人可以帮助我弄清楚我做错了什么,或者如果它被标记为错了,我将非常感谢。谢谢!

assembly mips immediate-operand
1个回答
2
投票

[第一部分:ori采用零扩展的16位立即数(类似于其他按位布尔指令)。其他MIPS指令,包括addiu,会将其16位立即数符号扩展为32位,因此0xFFFFFFFF is可为这些指令编码。

[ori $t1, $t1, -1不能编码为单条机器指令,仅由MARS的汇编器支持为“扩展”伪指令,该伪指令在另一个寄存器中实现该常量,然后将其与or一起使用。 (例如addiu $at, $zero, -1 / or $t1, $t1, $at)。

您可以在一条真实的机器指令中完成此操作(并且没有任何输入依赖性):addiu $t1, $zero, -1


问题的第二部分实际上是一个单独的问题;其答案完全独立于ori的立即数。

© www.soinside.com 2019 - 2024. All rights reserved.