2015-04-30 2 views
0

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?

+0

je mets un commentaire là-bas, il est juste après « DoWhile: » Et je –

+1

isolé, devrait être facile à repérer –

Répondre

0

bgt attend deux opérandes de registre, mais vous essayez de lui donner deux opérandes de mémoire. Utilisez quelque chose comme ceci:

lw $t0, ($s8) 
lw $t1, ($s3) 
bgt $t0, $t1, elseif 
+0

Merci beaucoup, cela a fonctionné! Tu es un génie, je t'aime <3 –