Я пытаюсь создать барабанный секвенсор в MIPS, который я сохранил в памяти, с директивой «.word», значениями 0 и 1. 1 означает, что необходимо сыграть 1/16 4/4 такта цикла. Таким образом, регистр $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