Mips 取消设置和重置某些位

Mips 取消设置和重置某些位,mips,mips32,Mips,Mips32,对于学校的家庭作业,我需要使用MMIO LED显示屏,其中每个LED正好存储在一个字节中的2位。对于作业,我需要上下左右移动这些指示灯。我还需要设置颜色(我将使用0x40)。这是我的问题: 当我单击“右”箭头将LED移到1列上时,当LED应返回到黑色(0x00)时,它仍保留在当前列中。如果我右键单击4次(移动正好1个字节),我会看到另一个亮起的LED,将原来的LED留在那里 这是我的MIPS代码: getLedPattern: move $t2, $s2 andi $t1, $t2, 0x3 #

对于学校的家庭作业,我需要使用MMIO LED显示屏,其中每个LED正好存储在一个字节中的2位。对于作业,我需要上下左右移动这些指示灯。我还需要设置颜色(我将使用0x40)。这是我的问题:

当我单击“右”箭头将LED移到1列上时,当LED应返回到黑色(0x00)时,它仍保留在当前列中。如果我右键单击4次(移动正好1个字节),我会看到另一个亮起的LED,将原来的LED留在那里

这是我的MIPS代码:

getLedPattern:
move $t2, $s2
andi $t1, $t2, 0x3 #remainder of x / 4 is in $t0
sll $t0, $t2, 2 #x / 4 is in $t0
beq $t0, 0, case0
beq $t0, 1, case1
beq $t0, 2, case2
case3:
    andi $a0, 0xFFFFFFFC
    #insert $a1 into bits 0 and 1 of $a0 into $v0
    or $v0, $a0, $a1
    jr $ra

case2:
    andi $a0, 0xFFFFFCFF
    #insert $a1 into bits 2 and 3 of $a0 into $v0
    #srl $a1, $a1, 2
    or $v0, $a0, $a1
    jr $ra

case1:
    andi $a0, 0xFFFCFFFF
    #insert $a1 into bits 4 and 5 of $a0 into $v0
    #srl $a1, $a1, 4
    or $v0, $a0, $a1
    jr $ra

case0:
    andi $a0, 0xFCFFFFFF
    #insert $a1 into bits 6 and 7 of $a0 into $v0
    #srl $a1, $a1, 6
    or $v0, $a0, $a1
    jr $ra

setLED:
    addi $sp, $sp, -20
    sw $ra, 0($sp)
    sw $t0, 4($sp)
    sw $t1, 8($sp)
    sw $t2, 12($sp)
    sw $t3, 16($sp)

move $t5, $a0
sll $t6, $a1, 5     # y*32
srl $t2, $a2, 2     # x/4
add $t5, $t5, $t6
add $t5, $t5, $t2
lb $a0, 0($t5)
move $a1, $a3
jal getLedPattern
sb $v0, 0($t5)
move $s3, $t5

lw $ra, 0($sp)
lw $t0, 4($sp)
lw $t1, 8($sp)
lw $t2, 12($sp)
lw $t3, 16($sp)
addi $sp, $sp, 20
jr $ra
逻辑是它从内存位置0xFFFFOO8(左上方的LED)开始,向下移动一行(+32字节)并超过x列(加上x*位)。然而,我似乎无法解除当前LED的设置并将其移到一个LED上。任何帮助都将不胜感激。我相信我的or在getLedPattern中是错误的,但不是100%确定的


希望得到正确的结果,我将能够在一般意义上得到正确的结果(没有LED显示)。

我猜您的清除位常量是错误的。 请尝试以下操作:

0xfffffffc  // or ~0x03
0xfffffff3  // or ~0x0C
0xffffffcf  // or ~0x30
0xffffff3f  // or ~0xC0
您的代码中还有其他奇怪之处:

  • 使用s2,但从未设置
  • s3已设置,但从未使用
  • 案例1和案例2将永远无法到达,因为$t0既不能容纳1,也不能容纳2

andi应该在$a0中设置位,然后在$a1中设置位。然而,作业到期了,我没有弄明白(谢谢。我没有试一试,因为项目已经到期了(我没有时间)。$s3是一个全局变量,我自始至终都在使用……我该如何计算剩余部分呢?