我正在尝试在存储在内存中的 MIPS 中创建一个鼓音序器,使用指令“.word”、0 和 1 值。1 表示需要播放 4/4 小节循环的 1/16。因此,寄存器 $t8 将寻址内存中的 16 个字,程序将控制声音是否必须播放 (1) 或睡眠 (0)。$t7 是一个计数器,用于验证循环何时结束并且必须重新启动序列。问题是,当我组装程序(并且 MARS 做得很好)并运行它时,在执行一个步骤后,我收到以下消息:“--程序已完成运行(从底部掉下)--”好的......但是为什么 ?!
这是源代码:
.data
LOOP1: .word 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0
la $t8, LOOP1 #
addi $t9, $t9, 0 #increments $t8 with the correct amount to adress every 1/16
li $t2, 114 #sound's timbre
Loop:
addiu $t8, $t8, $t9
lw $t1, 0($t8)
addi $t7, $t7, 1 #$t7 is used to verify the loop's end
bne $0, $t1, PlaySound
li $a0, 100
li $v0, 32
syscall #sleep syscall
Afterplayng:
sll $t9, $t9, 2
beq $t7, 16, ReinitializeLoopCounter
j Loop #jumps back to the top of loop
PlaySound:
li $a0, 62
li $a1, 100
move $a2, $t2
li $a3, 120
la $v0, 33
syscall #calls service 33, playing music
j Afterplayng
ReinitializeLoopCounter:
addi $t7, $0, 1
addi $t8, $t8, -64
j Loop