codice:
################# Data segment #####################
.data
input: .asciiz "\nInserire un carattere --> "
end: .asciiz "\nFine del programma!"
output: .asciiz "\n\nI caratteri inseriti sono --> "
howMany: .asciiz "\nQuanti elementi vuoi inserire? --> "
check: .asciiz "\nCarattere che sto controllando --> "
compare: .asciiz " le volte che compare il carattere sono: "
array: .space 20 #alloca 20 byte (ogni carattere vale 1 byte)
################# Code segment #####################
.text
.globl main
main:
li $s0, 0 #uso $s0 come indice dell'array
li $s1, 19 #max elementi memorizzabili
numEl:
la $a0, howMany
li $v0, 4
syscall
li $v0, 5
syscall
move $s2, $v0
bge $s2, 21, numEl
inserimento:
la $a0, input #stampa della stringa input
li $v0, 4
syscall
la $t0, array #$t0 prende l'indirizzo dell'array
li $v0, 12
syscall
move $t1, $v0
sb $t1, array($s0)
addi $t0,$t0, 1
addi $s0, $s0, 1
bne $s0, $s2, inserimento
#la $a0, output #stampa della stringa output
#li $v0, 4
#syscall
print:
#addi $s0, $s0, -1
#lb $a0, array($s0)
#li $v0, 11
#syscall
#bne $s0, $zero, print
la $s0, 0
conteggio:
lb $a0, array($s0)
beq $a0, $zero, exit
la $t2, 0
la $a0, check
li $v0, 4
syscall
lb $a0, array($s0)
li $v0, 11
syscall
move $s1, $a0 #contiene il carattere che sto controllando
conto:
lb $a0, array($s3)
move $t0, $a0
beq $t0, $zero, carattereSuccessivo
beq $s1, $t0, incremento
addi $s3, $s3, 1
j conto
incremento:
addi $t2, $t2, 1
addi $s3, $s3, 1
j conto
carattereSuccessivo:
addi $s0, $s0, 1
fine:
la $a0, compare
li $v0, 4
syscall
move $a0, $t2
li $v0, 1
syscall
la $s3, 0
j conteggio
exit:
la $a0, end #stampa della stringa fine
li $v0, 4
syscall
li $v0, 10 #uscita dal programma
syscall
Come posso fare a dirgli di non ricontare i caratteri che ho gia inserito?