Случайные числа MIPS не выводятся на консоль - PullRequest
0 голосов
/ 10 марта 2011

У меня есть это назначение 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 голосов
/ 10 марта 2011

Я добавил вызов, чтобы распечатать значение $v1 перед beqz, вот так:

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

Это всегда 0, независимо от того, сколько нажатий клавиш я выполняю до запуска этого кода. Я подозреваю, что прерывание клавиатуры не проходит, как вы ожидаете. Посмотрите на эту часть.

Если вы еще не пробовали, MARS - хороший инструмент для работы в MIPS. Он имеет несколько полезных инструментов отладки (пошаговое выполнение кода, просмотр регистров и памяти и т. Д.). Взгляните на это здесь.

...