2011-02-06 76 views
1

我以为我正确实现了一个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

您可能想提一下具体问题是什么 - 代码实际运行?你会得到预期的提示吗?它接受输入吗?接下来发生什么 ?为了调试它,你尝试了什么? – 2011-02-06 20:54:05

+0

谢谢。代码运行,我可以输入第一个和第二个数字。但我无法让它显示结果。输入第二个数字后它不显示任何内容。代码的想法是做一个while循环来模仿乘法。我尝试过单步调试,但我无法弄清楚我做错了什么。 – bdmflyer 2011-02-06 21:00:14

回答

1

这几乎是不可能说什么是错的:

  1. 我们不知道什么是在系统调用发生。
  2. 您正在使用$t寄存器来存储值。这很糟糕,因为MIPS将它们定义为临时注册器。使用$s0改为$s7而不是
  3. 我们不知道您的目标。这是真正的硬件还是仿真器?
  4. 我们不知道如果代码完整

顺便说一句,如果你正确地输入了两个数字,你的代码必须运行进入循环。同样,由于系统调用可能会丢失寄存器,它可能会运行很长时间。

尝试改变寄存器分配,然后再删除不改变计算成$t3结果循环。并可能检查您的系统调用是否正确打印。

0

这是因为你没有在程序中描述'syscall'中发生了什么过程似乎没有真正的输出结果。