我正在编写一个应该播放歌曲的mips程序,但它不起作用。
.data
buffer: .asciiz ""
fin: .asciiz "Over_the_Horizon.mp3" #nom du fichier en input
loadMusic: .word 0
#LECTURE/ENREGISTREMENT DU FICHIER
.text
fichier:
li $v0, 13 #appel system pour ouvrir le fichier
la $a0, fin #on entre le nom du fichier
li $a1, 0 #ouvrir le fichier pour le lire
li $a2, 0
syscall
move $s6, $v0 #enregistrer la description du fichier
li $v0, 14 #appel système pour lire le fichier
move $a0, $s6 # description fichier
la $a1, buffer #adresse de buffer d'ou lire le fichier
la $a2, 200000 # longueur/espace de buffer
syscall #lire depuis le fichier
li $v0, 16 #appel système pour fermer le fichier
move $a0, $s6 #description fichier pour fermer
syscall #fermer le fichier
#LECTEUR DE SON
playsong:
li $t0, 0
channelStart:
lb $t1, buffer($t0)
addi $t0, $t0, 1
li $t2, 0
chgmtChannel1:
bge $t2, $t1, play
li $v0, 88
lb $a0, buffer($t0)
addi $t0, $t0, 1
lb $a1, buffer($t0)
addi $t0, $t0, 1
syscall
addi $t2, $t2, 1
j chgmtChannel1
play:
li $t1, 0
li $v0, 97
lb $a2, buffer($t0)
addi $t0, $t0, 1
lb $a0, buffer($t0)
addi $t0, $t0, 1
lb $a3, buffer($t0)
addi $t0, $t0, 1
sub $sp, $sp, 4
sw $t4 , 0($sp)
jal readMusic
lw $t4, 0($sp)
addi $sp, $sp, 4
addi $t0, $t0, 1
la $a1, ($t4)
syscall
sub $sp, $sp, 4
sw $t4 , 0($sp)
jal readMusic
lw $t4, 0($sp)
addi $sp, $sp, 4
addi $t0, $t0, 1
beqz $t4, play
li $v0, 32
la $a0, ($t4)
syscall
j play
#
readMusic:
lb $t1, buffer($t0)
addi $t0, $t0, 1
lb $t2, buffer($t0)
addi $t0, $t0, 1
lb $t3, buffer($t0)
addi $t0, $t0, 1
lb $t4, buffer($t0)
sll $t4, $t4, 0
sw $t4, loadMusic
sb $t3, loadMusic
lw $t4, loadMusic
sll $t4, $t4, 0
sw $t4, loadMusic
sb $t2, loadMusic
lw $t4, loadMusic
sll $t4, $t4, 0
sw $t4, loadMusic
sb $t1, loadMusic
lw $t4, loadMusic
jr $ra
当我尝试执行程序时,它向我显示以下内容:
/home/sokhna1109/projet_son/playson 第 65 行中的错误:运行时 0x004000ec异常:无效或未实现的系统调用服务:97
Go:执行因错误而终止。
因为这个:
li $v0, 97 <-- $v0 = 97
lb $a2, buffer($t0)
addi $t0, $t0, 1 |
lb $a0, buffer($t0) |
addi $t0, $t0, 1 |
lb $a3, buffer($t0) |
addi $t0, $t0, 1 |
sub $sp, $sp, 4 | none of this modifies $v0
sw $t4 , 0($sp) |
jal readMusic |
lw $t4, 0($sp) |
addi $sp, $sp, 4 |
addi $t0, $t0, 1 |
la $a1, ($t4) /
syscall <-- syscall, uses $v0 for the system call number
据推测,您使用的模拟器没有实现任何系统调用 97。