我的MIPS程序是否正确?

4 assembly mips

编写一个MIPS程序,生成并累加从1到100的所有偶数.

  • 它必须至少有一个循环
  • 它应该将总和存储在寄存器R12中

这就是我写的:
main:
    li      $t0, 0               # clear register $t0 to zero
    li      $t4, 0               # clear register $t4 to zero
loop:
    add     $t0, $t0, 2          # generating even numbers in register $t0
    add     $t4, $t4, $t0        #  compute the sume
    bne     $t0, 100, loop       # if t0 reached 100 then go to loop.
    b endloop                    # branch to endloop
endloop:
    li      $v0, 10              # terminate program run and
    syscall                      # Exit 
Run Code Online (Sandbox Code Playgroud)

它是否正确?

mmc*_*ole 10

我刚刚完成了我的MIPs汇编课程,我有一个建议:不要使用PC Spim!

我使用过PC Spim,Mars和Qemu,一般的课程工作最好的是Mars(Mips Assembler和Runtime Simulator).编辑器很好,它崩溃了很多,它允许您轻松调试和设置断点.它是免费的,开源的,由密苏里州立大学创建.

它是一个.jar文件,因此您可以在Windows和Linux上运行它. 替代文字
[ 火星Mips仿真器 ]

在一般情况下,判断数字是偶数还是奇数的简单方法是使用数字与(按位)1,如果结果为0则数字为偶数.

但是,由于我们想要一系列中的所有偶数,我们可以循环并将数字增加2,就像在发布的代码中一样.

添加立即值时,应使用"addi"或"addu"指令,而不是"添加".你还说你想把结果放在寄存器$ r12中,但这不是一个有效的MIPs寄存器.查看MIPs维基百科链接以查看所有寄存器的列表:MIPS - 注册用法.

我已修改您的程序以正常工作.它将最终结果存储在$ t1中,然后打印最终结果.

                .text
                .globl main
main:
    li      $t0, 0               # $t0 = loop counter
    li      $t1, 0               # $t1 = sum of even numbers
loop:
    addi    $t0, $t0, 2          # generating even numbers in register $t0
    add     $t1, $t1, $t0        #  compute the sum
    bne     $t0, 100, loop       # if t0 reached 100 then go to loop.

    li      $v0, 4
    la      $a0, result
    syscall                      # print out "Sum = "

    li      $v0, 1
    move    $a0, $t1
    syscall                      # print out actual sum


exit:
    li      $v0, 10              # terminate program run and
    syscall                      # Exit 


                .data
result:         .asciiz "Sum = "
Run Code Online (Sandbox Code Playgroud)

在火星上运行后,我得到以下内容:

Sum = 2550
- 程序运行完毕 -


tun*_*l45 0

试试这个模拟器。当我学习计算机组织时,我使用了SPIM,它相当容易使用。您还可以在线找到有关 MIPS 的教程。请记住,谷歌是你的朋友。