Как правильно записать в файл прочитанную строку? - PullRequest
0 голосов
/ 24 октября 2019

Я ищу программу, которая читает файл, затем в сохраненном буфере меняет определенный символ для другого во всех их появлениях и затем записывает копию этого измененного буфера в другой файл, программа, кажется, работает хорошо, ноэто не пишет то, что нужно, это то, что я сделал:

.data 
    file: .asciiz "test.txt"
    fout: .asciiz "result.txt"
    buffer: .space 128
    bsize: .word  127
    msg: .asciiz "The program has been written properly"
    char_to: .asciiz "n"
    char_re: .asciiz "p"

#Macro for open a file for reading
.macro open_file_r()
    li $v0, 13 
    la $a0 file 
    li $a1 0 
    li $a2 0 
    syscall
    move $s0, $v0

.end_macro 

.macro read_file()
    li $v0, 14 #Llamada al sistema para leer archivo
    move $a0, $s0
    la $a1, buffer
    lw $a2, bsize #Longitud del buffer 
    syscall
.end_macro 

#Open a file for writing
.macro open_file_w()
    li $v0, 13
    la $a0 fout
    li $a1 1
    li $a2 0
    syscall 
    move $s6, $v0
.end_macro

.macro write_file()
    li   $v0, 15       # system call for write to file
    move $a0, $s6      # file descriptor 
    la   $a1, ($t0)   # address of buffer from which to write
    li   $a2, 127     # hardcoded buffer length
    syscall         # write to file
.end_macro

.macro close_file()
    li $v0, 16
    move $a0, $s0
    syscall 
.end_macro

.macro close_file_W()
    li $v0, 16
    move $a0, $s6
    syscall 
.end_macro  

.macro exit()
    li $v0 10
    syscall
.end_macro

.text
    main: 
        open_file_r() 
        read_file() 
        la $t0 buffer 
        la $t1, char_to  
        la $t2, char_re
        addi $s1, $t1, 0
        addi $s2, $t2, 0 
    loop:
        lbu $t3, 0($t0) 
        addi $t0, $t0, 1 
        beq $t3 $s1 replace 
        beq $t3 $zero end
        bne $t3 $s1 loop 
    replace:
        sb $s2 -1($t0) 
        b loop 
    end:
        close_file()
        open_file_w()
        write_file()
        close_file_W()
        exit()

И вывод в файле (который он предупрежден как поврежденный):

\00 \ 00 \ 00Программа написана правильно. \ 00n \ 00p \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00

Итак, кто-нибудь может помочь мне увидеть, что не так в коде?

...