我以为我正确实现了一个while循环,但为什么我没有得到任何输出?
我的书并没有那么大的帮助,我也无法在线找到资源。
##### The Data Segment #########
.data
strFirstNumber: .asciiz "Enter the first number (0-63): "
strSecondNumber: .asciiz "Enter the second number (0-63): "
strError: .asciiz "That number is not in the 0-63 range.\n\n"
#### The Text Segment ##########
.text
.globl main
main:
li $t2, 0
#First Number
li $10, 64
li $v0, 4
la $a0, strFirstNumber
syscall
li $v0, 5
syscall
blez $v0, in_error
bgeu $v0, $10, in_error
j DoneIf
in_error:
li $v0, 4
la $a0, strError
syscall
li $v0, 4
la $a0, strFirstNumber
syscall
li $v0, 5
syscall
bltz $v0, in_error
bgeu $v0, $10, in_error
DoneIf:
move $t0, $v0
#Second Number
li $v0, 4
la $a0, strSecondNumber
syscall
li $v0, 5
syscall
bltz $v0, in_error2
bgeu $v0, $10, in_error2
j DoneIf2
in_error2:
li $v0, 4
la $a0, strError
syscall
li $v0, 4
la $a0, strSecondNumber
syscall
li $v0, 5
syscall
blez $v0, in_error2
bgeu $v0, $10, in_error2
DoneIf2:
move $t1, $v0
Loop:
beq $t2, $t0, Exit
add $t3, $t1, $t1
add $t2, $t2, 1
j Loop # go to Loop
Exit:
li $v0, 1
add $a0, $0, $t3
syscall
jr $31
答案 0 :(得分:1)
几乎不可能说出什么是错的:
$t
个寄存器来存储值。这很糟糕,因为MIPS将它们定义为临时管理员。使用$s0
代替$s7
顺便说一句,如果你正确输入了两个数字,你的代码必须进入循环。同样,考虑到系统调用可能会破坏寄存器,它可能会运行...很长时间。
首先尝试更改寄存器分配,然后删除不会将计算结果更改为$t3
的循环。并且可能检查您的系统调用是否正常打印。
答案 1 :(得分:0)
这是因为你没有在程序中描述'syscall'中发生了什么过程似乎没有真正的输出结果。