我有这个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
答案 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.