Running on MARS but not running on Qtspim

626 views Asked by At

I have a problem I made a university project on MARS and it runs ok, but our teacher told us that the program must run on QTSPIM,so my question is where are the errors that don't allow my program to run on QTspim?

The errors are "exception occured at PC=0x00400154 ecc.."

The code is reading txt file (a sequence of binary numbers) called Sequenza and it searches in the string for Signed magnitude and one's complement of a number from user input.

.data
file: .asciiz "c:/sequenza.txt"
fBuffer: .space 1024
stringB: .asciiz "Sequenza : "
stringI: .asciiz "Inserisci un numero -511<=n<=511 :"
stringA: .asciiz "\n"
stringE: .asciiz "\n valore inserito non corretto \n \n "
stringH: .asciiz "valore inserito:"
stringF: .asciiz "completato"
stringV: .asciiz " "
stringMS: .asciiz "\n Sequenze Modulo e Segno :"
stringC1: .asciiz "\n Sequenze Complemento a 1 :"
stringNC: .asciiz " Nessuna occorrenza identificata"
outputf: .asciiz "  "   
outputg: .asciiz " nessuna occorrenza"  
array: .space 11                                                                
.text



main:           addi $t5,$zero,511              # limiti
        addi $t6,$zero,-511


    # lettura del file
    #returns: pointer to file's text in $a1
openFile:       
        li   $v0, 13                        # system call for open file 
        la   $a0, file                      #fin is the file name
            li   $a1, 0                         # 0 means 'read'
            li   $a2, 0
            syscall                                 # open file
            move $t8, $v0                       # save the file descriptor

#read from file
        li   $v0, 14                        # system call for read from file
            move $a0, $t8                       # file descriptor 
            la   $a1, fBuffer   
            li   $a2, 1024                      # hardcoded buffer length
            syscall                             # read from file
        move $a3,$v0                        # sposta in $s0 la lunghezza della srtinga
        la $a0,stringB                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall
        addi $t9,$a3,-8
        la $a0,fBuffer                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall

        la $a0,stringA                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall

#inizio con richiesta inserimeno input
start:          
        la $a0,stringI                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall
        li $v0,5                            #codice letture intero da console =5
        syscall                         #legge il valore inserito e lo colloca in $v0

        move $s3,$v0
        addi $s4,$zero,2
        add $t0,$zero,$s3

        bgt $t0,$t5,Errore
        blt $t0,$t6,Errore
        li $v0, 9                       # richiamo la procedura dello "sbrk"
        addi $a0, $zero, 40                 # creo spazio necessario (10 celle)
        syscall
        add $s2,$zero,$v0
        la $a0,stringMS                     #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall


convert:    remu  $t3,$t0,$s4
    move $a0,$t3
    sb $a0,36($s2)
    div $t0,$t0,$s4
    subu $s2,$s2,4
    beqz $t0,postconvert
    addi $s6,$s6,1
    j convert

negativo:   addi $s0,$zero,1 
    sb $s0,0($s2)
    addi $s0,$s0,1
    j mod

postconvert:        


        la $t7,fBuffer #indirizzo di fBuffer e $t7
        li $v0, 9                       # richiamo la procedura dello "sbrk"
        addi $a0, $zero, 100                    # creo spazio necessario (4 celle)
        syscall
        add $s1, $v0, $zero 

        addi $t1,$zero,1                    # azzero t1
loop:       lb $t6,($t7)                     # leggo un carattere della stringa (pseudoistruzione)
        addu $t6,$t6,-48
        sb $t6,($s1)
            beq $t1,$a3,postloop                 # se è zero ho finito (pseudoistruzione)

            add $t7,$t7,1  # incremento la posizione sulla stringa
            add $t1,$t1,1
        add $s1,$s1,4

        j loop

postloop:       addu $s2,$zero,268697600
        addu $s1,$zero,268697640
        add $s1,$s1,$t4
        add $t4,$t4,4
        add $t3,$zero,$zero
        addi $t0,$t0,1
        beq $t0,$t9,c1

        bltz $s3,negativo

mod:            lb $t1,0($s1)
        lb $t2,0($s2)
        bne $t1,$t2,postloop               #c'è da cambiare l'offset

        addi $t3,$t3,1
        addi $s1,$s1,4
        addi $s2,$s2,4
        beq $t3,10,sequenzaok
        j mod

sequenzaok:     add $s5,$s5,1   
        move $a0,$t0
        li,$v0,1
        syscall
        la $a0,stringV                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall
        j postloop

sequenzaok2:    
        move $a0,$t0
        li,$v0,1
        syscall
        la $a0,stringV                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall
        j control

c1:         addi $s0,$zero,0 
        sb $s0,0($s2)
        beqz $s5,nocaso
c1x:            addu $s2,$zero,268697600
        addu $s1,$zero,268697640
        add $t0,$zero,$zero
        add $t1,$zero,$zero
        add $t2,$zero,$zero
        add $t4,$zero,$zero
        la $a0,stringC1                 #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall

loopcs:     beq $t2,10,control
        addi $t2,$t2,1
        lb $t0,36($s2)
        beqz $t0,piu1
        beq $t0,1,meno1


loopc1:     sb $t0,36($s2)
        add $t0,$zero,$zero
        addi $s2,$s2,-4
        j loopcs        

piu1:           addi $t0,$t0,1
        j loopc1
meno1:      subu $t0,$t0,1  
        j loopc1

control:        addu $s2,$zero,268697600
        addu $s1,$zero,268697640
        add $s1,$s1,$t4
        add $t4,$t4,4
        add $t3,$zero,$zero
        addi $t0,$t0,1
        beq $t0,$t9,c2

realc1:         lb $t1,0($s1)
        lb $t2,0($s2)
        bne $t1,$t2,control               #c'è da cambiare l'offset

        addi $t3,$t3,1
        addi $s1,$s1,4
        addi $s2,$s2,4
        beq $t3,10,sequenzaok2
        j realc1


nocaso:     la $a0,stringNC                 #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall
        j c1x
Errore:         

        la $a0,stringE                      #carica la stringa stringz(per andare a capo)in $a0
        li $v0,4                            #codice di stampa sul terminale =4
        syscall
        j start




c2: 
0

There are 0 answers