mardi 28 avril 2015

MIPS lb command not loading anything?

I am trying to read a random word from a text file but sometimes depending on the value of $s5 an infinite loop happens and the value of $t2 never changes.

Sorry for the block of text. I've never used stack overflow before and I don't know how much of my code I should provide. Thank you very much.

.data

randomword: #word to be found inside the file
        .asciiz "\0\0\0\0\0\0\0"
fin:    
        .asciiz "dictionarysmall.txt"      # filename for input

fileContents:
        .word 0
sizeOfFile:
        .word 0

str2:       .asciiz "loop 2"
str3:       .asciiz "loop 3"
str4:       .asciiz "loop 4"
fileBuffer: 
        .asciiz
.text
###############################################################
# Open (for reading)
li   $v0, 13       # system call for open file
la   $a0, fin     # input file name
li   $a1, 0        # Open for writing (flags are 0: read, 1: write)
li   $a2, 0        # mode is ignored
syscall            # open a file (file descriptor returned in $v0)
move $s6, $v0      # save the file descriptor 

###############################################################
li $v0, 42
li $a0, 9
li $a1, 250 #if using dictionary.txt value is 171900
syscall

move $t1, $a0   #generate a random number within 0 to 171920
move $s5, $t1   #$s5 contains the random number

# Read file just opened
li   $v0, 14       # read from file
move $a0, $s6      # file descriptor 
la   $a1, fileBuffer   # address of buffer from which to write
la   $a2, ($s5)       #buffer length
syscall            # read from file
###############################################################
# Close the file 
li   $v0, 16       # system call for close file
move $a0, $s6      # file descriptor to close
syscall            # close file
###############################################################

#****HERE IS WHERE THE ERRORS BEGIN OCCURRING.
li $s5, 60 #changing this number decides whether the program works or fails


wordfindloop1:  #run through bits until random number is reached
la   $t7, fileBuffer
la   $t6, randomword
li   $t1, 13   #newline
li   $t2, 0

add  $t7, $t7, $s5
j wordfindloop2

wordfindloop2:  #go through bits until \n is found and then store word
#li $v0, 4
#la $a0, str2
#syscall

#li $v0, 11
#la $a0, ($t7) #prints out contents of $t7 which are very strange
#syscall

beq  $t2, $t1, wordfindloop3 #0 is the newline char which would mark the start of a word
lb   $t2, ($t7) #$t2 contains the next char
addi $t7, $t7, 1
j wordfindloop2

wordfindloop3:  #bad code probably but add 2 to the address

#li $v0, 4
#la $a0, str3
#syscall

addi  $t7, $t7, 1

wordfindloop4:

#li $v0, 4
#la $a0, str4
#syscall

lb   $t2, ($t7)
beq  $t2, 13, finish
sb   $t2, ($t6)
addi $t7, $t7, 1
add  $t6, $t6, 1
j wordfindloop4

finish:
li $v0, 4
la $a0, randomword
syscall




Aucun commentaire:

Enregistrer un commentaire