Loops 简单for循环的MIPS组件(2)
这是我第一次努力学习MIPS中的循环Loops 简单for循环的MIPS组件(2),loops,assembly,mips,Loops,Assembly,Mips,这是我第一次努力学习MIPS中的循环 .data spc: .asciiz ", " .globl main main: li $t0, 0 loop: bgt $t0, 14, exit # branch if($t0 > 14) addi $t0, $t0, 1 # $t0++ for loop increment # print a comma la $a0, spc # copy spc to $a0 for
.data
spc: .asciiz ", "
.globl main
main:
li $t0, 0
loop:
bgt $t0, 14, exit # branch if($t0 > 14)
addi $t0, $t0, 1 # $t0++ for loop increment
# print a comma
la $a0, spc # copy spc to $a0 for printing
li $v0, 4 # syscall value for strings
syscall
# repeat loop
j loop
exit:
li $v0, 10 # syscall value for program termination
syscall
输出:
-- program is finished running (dropped off bottom) --
该程序应在I/O控制台中打印15个逗号。这并没有发生
可能是什么问题
Ref:您将所有代码组装到
.data
部分;您从未切换回.text
如果您使用的是MARS,GUI在反汇编(组装后)中不显示asm指令。这就是为什么
显然,MARS没有在
main
的不可执行页面上出错,而是在您启动程序后立即决定该程序“从底部掉下来”。链接页面中显示的另一个程序如何?@user366312:如何?在main:
之前添加.text
可以使代码正常工作;我看不出这个问题还有什么需要回答的地方。此程序没有.text
@user366312:是的,有。它从不切换到.data
段,所以它都在.text
段中。@JörgWMittag,哦,明白了。#将spc复制到$a0
不,该注释是错误的la
设置$a0
=标签的地址。它不会从任何地方复制spc
;它必须从即时数据中具体化寄存器中的静态地址。(如lui
/ori
)。