编写一个MIPS程序,生成并累加从1到100的所有偶数.
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
- 程序运行完毕 -