Je suis en train de construire un programme sur MIPS pour vérifier si la colonne d'une matrice est ordonnée de façon croissante, de façon décroissante, si tous ses nombres sont égaux ou si elle est désordonné. Voici le code:MIPS "spim: (parser) erreur de syntaxe"
# #include <iostream>
# int m; int n;
# int M[m][n];
#
# int i=0; bool ordenada=true; int direccion=0; int j=0;
#
# cout<<"\n¿Qué columna desea comprobar? ";
# cin>>j;
#
# do{
# if (m[i][j] > m[i+1][j])
# if (direccion != 0) ordenada = false;
# else if (m[i][j] < m[i+1][j]){
# if ((direccion != 1)&&(i>0)) ordenada = false;
# direccion = 1;
# }
# else{
# if ((direccion != 2)&&(i>0)) ordenada = false;
# direccion = 2;
# }
# i++;
# }while ((i<m)&&ordenada);
# cout<<"\nLa columna "<<j;
# if (ordenada){
# cout<<" está ordenada";
# if (direccion == 0) cout<<" de manera decreciente."<<endl;
# else if (direccion == 1) cout<<" de manera creciente."<<endl;
# else cout<<" de manera que todas las variables son iguales."<<endl;
# }
# else cout<<" está desordenada."<<endl;
.globl main
.data
m: .word 4 # numero de filas de m1
n: .word 5 # numero de columnas de m1
size: .word 4 # tamano de cada elemento
m1: .word 1,2,3,4,5
.word 1,2,3,4,5
.word 1,2,3,4,5
.word 1,2,3,2,5
# la primera fila es la fila 0
# la primera columna es la columna 0
pregunta: .asciiz "\n¿Qué columna desea comprobar? Tenga en cuenta que las columnas se empiezan a contar desde 0: "
principio: .asciiz "\nLa columna "
ordenada: .asciiz " está ORDENADA"
creciente: .asciiz " de manera creciente."
decreciente: .asciiz " de manera decreciente."
igualada: .asciiz " de manera que todas las variables son iguales."
desordenada: .asciiz " está DESORDENADA"
.text
main:
lw $s6,m # numero de filas de m1
lw $s7,n # numero de columnas de m1
li $v0,4
la $a0,pregunta
syscall
li $v0,5
syscall
move $s0,$v0 #$s0 = columna objeto de estudio
li $t0,4
mult $s7,$t0
mflo $s4 #$s4 = número de bytes que debe saltar cada vez para recorrer una fila
li $s1,1 #$s1 = variable ordenada
li $s2,0 #$s2 = i (num. fila)
la $s3,m1 #$s3 = puntero a la matriz
move $s5,$zero #$s5 = direccion
li $t0,4
mult $s0,$t0
mflo $t0
add $s3, $s3, $t0 #posicionamos el vector en el primer elemento de la columna objeto de estudio
add $s8, $s4, $s3
dowhile:
bgt 0($s8),0($s3),elseif #THIS IS THE LINE QTSPIM COMPLAINS ABOUT
ifa: beq $s5,$zero,elseif
move $s1,$zero
j endif
elseif:
bge 0($s3),0($s8),else
ifb: beq $s5,1,endifb
ble $s2,$zero,endifb
move $s1,$zero
endifb: li $s5,1
j endif
else:
ifc: beq $s5,2,endifc
ble $s2,$zero,endifc
move $s1,$zero
endifc: li $s5,2
endif:
addi $s2, 1
add $s3,$s3,$s4
add $s8,$s8,$s4
bne $s1,$zero,endw
bgt $s2, $s6, dowhile
endw:
li $v0,4
la $a0,principio
syscall
li $v0,1
move $a0,$s0
syscall
ifd:
beq $s1,$zero,endifd
li $v0,4
la $a0,ordenada
syscall
cre: bne $s5,$zero,dec
la $a0,creciente
syscall
j exit
dec: li $t0,1
bne $s5,$t0,igu
la $a0,decreciente
syscall
j exit
igu: la $a0,igualada
syscall
j exit
endifd:
li $v0,4
la $a0,desordenada
syscall
exit:
li $v0,10
syscall
Le problème est que lorsque je tente de le charger sur QtSpim l'erreur suivante apparaît:
spim: (parser) syntax error on line 83 of file
C:/Users/Tutoru/Desktop/Universidad/Principios de Computadores/practica4.s
bgt 0($s8),0($s3),elseif
Toutes les idées?
je mets un commentaire là-bas, il est juste après « DoWhile: » Et je –
isolé, devrait être facile à repérer –