MIPS Assembly File Writing

511 Views Asked by At

I am trying to write to a file in MIPS assembly and it seems that I cannot get it to work. The code is straightforward, but the $v0 register returns -1 no matter what I type. I have tried other people's code and still end up getting the same results.

The code:

filename: .asciiz "file.txt"
buffer: .asciiz "hello textual world"

.text
open_file:
    li $v0, 13      # open file
    la $a0, filename    # file name
    li $a1, 1       # write flag
    li $a2, 0       # ignore mode
    syscall
    jal print
write_to_file:  
    move $a0, $v0       # descriptor
    li $v0, 15      # write to file
    la $a1, buffer      # buffer
    li $a2, 20      # max chars to write
    syscall
    jal print
close_file: 
    li $v0, 16      # close
#   move $a0, $v0       # descriptor
    syscall
    jal print

    li $v0, 10      # exit program
    syscall

print:
    move $a0, $v0
    li $v0, 1
    syscall         # print v0
    li $v0, 11
    li $a0, '\n'
    syscall         # print '\n'
    jr $ra

The output:

-1
-1
16

-- program is finished running --

A Screenshot of the Mars dir. Note: I know that the dir contains "FILES.txt" rather than the "file.txt" one. However, I am trying to create a new file.

EDIT:

After some time I ran the program and solved the issue. For some reason, the first syscall did not return -1 when I ran it today, but the problem was that in "jal print", $v0 changed its value, which means that the line that follows it, first line of write_to_file label, loads an incorrect descriptor to $a0. Another potential problem is that I put 20 characters to print instead of 19.

Long story short, I've saved the file descriptor in $s0 and put 19 characters to be written and now the program works.

0

There are 0 best solutions below