# Data da última alteração: 27/08/2021 # ContaAsEsOs # Author: Ney Calazans # # Programa ContaAsEsOs: Este programa recebe como entrada uma cadeia de # caracteres ASCIIE de nome Cadeia e produz como resultado um valor # inteiro NumAsEsOs, cujo valor final deve ser o número total de # letras As, Es e Os, maiúsculas ou minúsculas que existem ao todo # em Cadeia. Por exemplo, se Cadeia vale # “Poderia Eu Omitir minha paixão por umbus do Uruguai? Inicialmente, # não visualizo tAl possibilidade!”, tem-se como resultado da # execução do programa que o valor final armazenado em NumAsEsOs # é 21, certo? Lembre-se que o caractere ASCIIE ã é diferente de a # e de A. Logo, as letras ã não são contabilizadas pelo programa, # o mesmo valendo para á, ê, ó etc. # # .text .globl main # Declara rótulo main como ponto de entrada main: la $t1,Cadeia # Obtém endereço de Cadeia (ponteiro para primeiro caractere) em $t1 addiu $t2,$zero,0 # Zera o contador de As/Es/Os, $t2 lacotest: lbu $t3,0($t1) # Obtém próximo caractere e coloca em $t3 beq $t3,$zero,fim # Se chegou no fim da Cadeia conclui o programa addiu $t4,$zero,'A' # Coloca 'A' no byte mais à direita de $t4 beq $t3,$t4, achei # Se achei 'A', salta para incrementar addiu $t4,$zero,'a' # Coloca 'a' no byte mais à direita de $t4 beq $t3,$t4, achei # Se achei 'a', salta para incrementar addiu $t4,$zero,'E' # Coloca 'E' no byte mais à direita de $t4 beq $t3,$t4, achei # Se achei 'E', salta para incrementar addiu $t4,$zero,'e' # Coloca 'e' no byte mais à direita de $t4 beq $t3,$t4, achei # Se achei 'e', salta para incrementar addiu $t4,$zero,'O' # Coloca 'O' no byte mais à direita de $t4 beq $t3,$t4, achei # Se achei 'O', salta para incrementar addiu $t4,$zero,'o' # Coloca 'o' no byte mais à direita de $t4 beq $t3,$t4, achei # Se achei 'o', salta para incrementar cont_no_laco: addiu $t1,$t1,1 # Se não achou, incrementa ponteiro j lacotest # e continua achei: addiu $t2,$t2,1 # incrementa o contador de AsEsOs j cont_no_laco # volta para dentro do laço para continuar os testes # Acabou o programa. fim: la $t5,NumAsEsOs # Obtém o endereço da variável que vai conter o resultado sw $t2,0($t5) # Escreve o valor obtido depois de executar o laço li $v0,10 # Chamada do sistema para sair do programa syscall # Sai do programa! .data Cadeia: .asciiz "Poderia Eu Omitir minha paixão por umbus do Uruguai? Inicialmente, não visualizo tAl possibilidade!" NumAsEsOs: .word 0