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: