Я пытаюсь посчитать количество символов в файле, я прочитал файл и сохранил его в массиве, я начал делать это только для одной буквы (а), затем я сделаю все остальное,Проблема, с которой я сталкиваюсь, - это когда я загружаю адрес массива и проверяю значение первого элемента в массиве, если это буква (а) или нет, если это не так, я перехожу на букву (б), в противном случае, еслизначение то же самое, я увеличиваю значение счетчика и перехожу к следующему адресу.
проблема в том, что я пробовал один способ, но он всегда сохраняет значение ($ t0) одинаковым (97),поэтому я попробовал другое решение, но оно не сработало
. Любые идеи или помощь будут оценены
.data
.align 2
A: .space 10000 # space for 10000 Char
file: .asciiz "input.txt" # the txt file is in the same dirictory as MARS
tool and the source code
error: .asciiz "File does not exist"
.text
.globl main
main:
la $t0, A
# Open file for reading
li $v0, 13 # system call for open file
la $a0, file # input file name
li $a1, 0 # flag for reading
li $a2, 0 # mode is ignored
syscall # open a file
move $s6, $v0 # save the file descriptor
bltz $s6,noFile
# checking the value of $s6 if it saved values means the file exist if not
there's not file
# if file is not found exit - Branch if $a0 is 0 which mean no data
# reading from file to Array (A)
li $v0, 14 # reading from file
move $a0, $s6 # file descriptor
la $a1, A # address of buffer from which to read
li $a2, 10000
syscall # read from file
CountA:
lb $t0 , 0($a1)
bne $t0,'a', CountB
addi $t1,$t1,1 #counter
addi $a1,$a1,4 # to move to next address
addi $t0,$t0,1 # to incr t0 to check for next char
b CountA
CountB:
# not completed yet
exit:
# Close the file
li $v0, 16 # system call for close file
move $a0, $s0 # file descriptor to close
syscall # close file
li $v0, 10 # Exit
syscall
noFile: # if file is not found show message and exit
li $v0, 4
la $a0,error #load error msg
syscall # print error msg
li $v0, 10 # Exit
syscall
образец файла input.txt
a
a
a
b
b
c
c
d