MIPS随机数不输出到控制台

时间:2011-03-10 02:17:05

标签: assembly input console mips

我有这个MIPS分配,每按一次键就会生成一个随机数,数字范围从0到99.按Enter键退出。

但是,按键盘上的任何内容都不会在控制台上输出数字。实际上,它没有输出任何东西。有谁知道为什么?

.data           # Data declaration section
nl: .asciiz "\n"
msg:    .asciiz "\nHow Lucky Can You Get?"
bye:    .asciiz "\n** Come Back Again **"
    .text
main:
    li  $a3, 0xffff0000  # Base address of I/O
    li  $s1, 2
    sw  $s1, 0($a3) # Enable Keyboard Interrupt
    li  $s1, 0x0000ffff     # Mask to enable all interrupts
    mtc0    $s1, $12        # Store enable bits in Status register
    li  $v0, 4      # Print message
    la  $a0, msg 
    syscall 
    li  $t0, 211        # Seed values
    li  $t1, 3021377 
clear:
    li  $v1, 0      # Clear the flag
ranloop:
    mult    $t0, $t1
    mflo    $t0
    addiu   $t0, $t0, 5923
    beqz    $v1, ranloop    # Keystroke will change $v1
                # to ASCII value for the key
    addiu   $v1, $v1, -10
    beqz    $v1, quit       # Quit if Enter Key
    li  $v0, 4      # Print newline
    la  $a0, nl 
    syscall 
    li  $v1, 100        # Controls Range (0 – 99)
    divu    $t0, $v1
    mfhi    $a0     # Get Remainder
    li  $v0, 1      
    syscall         
    b   clear
quit:
    li  $v0, 4      # Print newline
    la  $a0, bye
    syscall 
    li  $v0, 10
    syscall 

1 个答案:

答案 0 :(得分:0)

我添加了一个调用,在beqz之前打印出$v1的值,如下所示:

li      $v0, 1      #print value of $v1
move    $a0, $v1
syscall
beqz    $v1, ranloop    # Keystroke will change $v1

总是0,无论在代码运行之前我做了多少次按键操作。我怀疑键盘中断没有像你期望的那样通过。看看它的那一部分。

如果你还没有尝试过,MARS是一个很好的MIPS工具。它有一些有用的调试工具(逐步执行代码,查看寄存器和内存等)。看看它here.