【发布时间】:2017-10-09 18:02:25
【问题描述】:
我正在尝试将用户输入存储到堆栈中,当用户输入 0 时,程序将停止接收输入并打印出用户添加的所有数字,不包括零。我不确定如何正确解决这个问题。到目前为止,这是我的代码。
.data
prompt: .ascii "Please enter numbers, enter (0) to exit: "
.text
main:
li $v0, 4
la $a0, prompt
syscall
do:
li $v0, 5
syscall
addi $sp, $sp, -4 # Move stack four bytes down -- MAYBE MAKE SOME OF COUNTER TO KEEP TRACK OF HOW MUCH DATA NEEDS TO BE STORED IN STACK??
sw $v0, 0($sp) # Places contents of $t0 into first spot into the stack -- THINK I NEED TO CHANGE THIS TO ACCOMADATE CHANGE IN MEMORY??
#while
bne $t0, 0, do # Branch to print section if input = 0
print:
lw $t0, 0($sp)
addi $sp, $sp, 4
# Do printing instructions here from stack
end:
li $v0, 10
syscall
非常感谢任何建议或帮助!
【问题讨论】:
-
您似乎走在了正确的轨道上。由于您需要以相同的顺序打印,我建议您将
$sp的原始值存储在某处。然后使用该副本遍历数字,直到达到$sp的当前值。 PS:您想将do标签向上移动,以便重新加载$v0,这当然会被输入破坏。 -
好吧,这似乎是有道理的,所以存储堆栈的初始值开始的位置,即 0($sp),然后减 4 存储新值等,直到值等于 0,移动堆栈指向初始值的指针,并将用户输入的次数减 4。
标签: assembly mips mars-simulator