MIPS 轮询在 QtSpim 中有效吗? (垃圾邮件模拟器)

Does MIPS polling work in QtSpim? (spim simulator)

这是学校的作业。 我被要求用汇编编写一个 I/O 映射程序。

我卡在第 1 级,我只是简单地从键盘读取并使用轮询方法写入监视器。

###########################################################
.text 0x00400000

main:
    addi    $s0, [=10=], 0                      #   save address for transmitter data
    lui     $s0, 0xffff
poll_read:
    lw      $t0, 0($s0)                     #   read transmitter data word
    andi    $t0, $t0, 0x1                   #   keep the 1st bit
    beq     $t0, [=10=], poll_read              #   not ready, go back
    lw      $t1, 4($s0)                     #   read transmitter control word
    andi    $t1, $t1, 0xff                  #   keep the 1st 8 bits
    addi    $t1, $t1, 1

poll_write:
    lw      $t0, 8($s0)                     #   read receiver data word
    andi    $t0, $t0, 0x1                       #   keep the 1st bit
    beq     $t0, [=10=], poll_write             #   not ready, go back
    sw      $t1, 0xc($s0)                   #   display monitor
    j       poll_read

问题是 0xffff 0000 的就绪位始终为 0。

所以,我无能为力。

有没有什么技巧可以让它起作用?改变一些设置?

您必须在 PCSpim 设置中 select "Mapped I/O"。据此:http://www.cs.nott.ac.uk/~psztxa/g51csa/l12-hand.pdf好像是需要的

我查看了您的代码,它似乎是正确的。

但是,虽然代码是正确的,但注释是相反的。也就是说,你第一个lw的评论是"read transmitter data word"。评论应该说的是"read receiver control word"。还有一些其他的。