【问题标题】:Convert If-Else Statement to MIPS Assembly Code将 If-Else 语句转换为 MIPS 汇编代码
【发布时间】:2021-06-16 23:46:27
【问题描述】:

假设变量f, g, h, i, and j分别分配给寄存器$s0, $s1, $s2, $s3, and $s4。假设arrays A的基地址在寄存器$s6.中

if (f==g)
     A[4] = f+g;
else if (f == h)
             A[4]  = A[h] + f;
        else
             A[i] = g-h;

我正在尝试将上述 C++ 代码转换为 MIPS。这是我所做的:

.data


.text
main:
    beq $s0,$s1,if #if $s0 = $s1 go to then
    beq $s0,$s2,elseif
    
    #else statement
    sub $t0, $s1, $s2 # $t0 = g - h
    sll $t1, $s3, 2 # Calculating offset
    add $t2, $t1, $s6 # $t2 = offset + base
    sw $t3, 0($t2)
                    
    if: #if statement
        add $t0, $s0, $s1 # $t0 = f + g
        sw $t0, 16($s6) # A[4]
        j exit #jump to exit
    
    elseif: #elseif statement
        sll $t1,$s2,2 # Calculating offset
        add $t2,$t1,$s6 #t2 = offset + base
        lw $t3,0($t2) # t3 = A[h] 
        add $t0,$t3,$s0 # $t0 = A[h] + f
    
    exit: 
        
    

如果改正了,有人可以看看吗? 非常感谢

【问题讨论】:

  • “有人可以看看它是否得到纠正” 这应该很容易让您使用可用的 MIPS 模拟器(QtSPIM、MARS 等)之一来验证自己)。

标签: assembly mips


【解决方案1】:

这是不正确的。在 f != g 和 f != h 的情况下,它将执行正确的 else 子句,然后继续执行第一个 then 子句。您应该在模拟器中运行它才能看到。

此外,elseif: 部分没有存储指令,因此无法翻译。

【讨论】:

    猜你喜欢
    • 2019-08-03
    • 2013-11-21
    • 2019-04-09
    • 2014-09-01
    • 2021-12-08
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多