получить доступ к файлу в mips с помощью инструмента mars

Я пытаюсь получить доступ к файлу с помощью инструкции mips.
Я хочу читать файл построчно, а не весь файл за раз, поэтому этот код (1) не работает.

Также я хочу писать в файл, а не перезаписывать!
Кто-нибудь может мне помочь?

Код:

Откройте файл для записи

li   $v0, 13       # system call for open file
la   $a0, file      # board file name
li   $a1, 0        # Open for reading
li   $a2, 0
syscall            # open a file (file descriptor returned in $v0)
move $s6, $v0      # save the file descriptor 

Читать из файла

li   $v0, 14       # system call for read from file  
move $a0, $s6      # file descriptor   
la   $a1, buffer   # address of buffer to which to read  
li   $a2, 40     # hardcoded buffer length  
syscall            # read from file  

Закрыть файл

li   $v0, 16       # system call for close file  
move $a0, $s6      # file descriptor to close  
syscall            # close file  

person Sundus Karaja    schedule 20.05.2013    source источник


Ответы (2)


Я хочу читать файл построчно, а не весь файл за раз, поэтому этот код (1) не работает.

Чтение фрагментов данных в буфер (например, несколько килобайт). Затем обработайте этот буфер построчно (ища символы перевода строки) и прочитайте больше данных из файла, когда вы достигли конца буфера.

Также я хочу писать в файл, а не перезаписывать!

Установите флаги ($a1) на 9 при открытии файла (системный вызов 13). Это соответствует «только для записи с созданием и добавлением» (см. справку по системным вызовам MARS< /а>).

person Michael    schedule 20.05.2013
comment
li $v0, 14 # системный вызов для чтения из файла move $a0, $s6 # файловый дескриптор la $a1, buffer # адрес буфера для чтения li $a2, 4096 # жестко заданная длина буфера 256*16 syscall # чтение из file li $v0, 4 # la $a0, buffer # буфер содержит значения syscall # print int lb $a1 , buffer($0) Я пытался сделать то, что вы только что предложили мне, но я не могу это реализовать !!!! !!!!! Может кто-нибудь помочь мне !! я хочу сохранить его как шестнадцатеричный из буфера - person Sundus Karaja; 21.05.2013

это работа спасибо много :)

.data  
fin: .asciiz "file.txt"      # filename for input
buffer: .space 128
buffer1: .asciiz "\n"
val : .space 128
.text

################################################ fileRead:

# Open file for reading

li   $v0, 13       # system call for open file
la   $a0, fin      # input file name
li   $a1, 0        # flag for reading
li   $a2, 0        # mode is ignored
syscall            # open a file 
move $s0, $v0      # save the file descriptor 

# reading from file just opened

li   $v0, 14       # system call for reading from file
move $a0, $s0      # file descriptor 
la   $a1, buffer   # address of buffer from which to read
li   $a2,  6  # hardcoded buffer length
syscall            # read from file

li  $v0, 4          # 
la  $a0, buffer     # buffer contains the values
syscall             # print int

lb $t1 , buffer

# reading from file just opened

li   $v0, 14       # system call for reading from file
move $a0, $s0      # file descriptor 
la   $a1, buffer   # address of buffer from which to read
li   $a2,  6  # hardcoded buffer length
syscall            # read from file

li  $v0, 4          # 
la  $a0, buffer     # buffer contains the values
syscall             # print int

## sh  $t5 , val($0)    #sw    $t5, theArray($t0)

# Close the file 

li   $v0, 16       # system call for close file
move $a0, $s6      # file descriptor to close
syscall            # close file
person Sundus Karaja    schedule 22.05.2013