;Programa de Contagem de Letras em Strings

;Nome - Luiz Erivelto de Oliveira Jr

;Ra   - 97427



Pilha Segment para Stack 'Stack'

      Db 512 Dup(0)

Pilha Ends



Dados Segment para Public 'Data'

      Contador  Db 0

      TabNomes  Db 4000 Dup(0)

      Buffer    Db 40,?,41 Dup(0)

      Totais    Dw 27 Dup(0)

      MsgTotal  Db 'Total de Letras '

      Letra     db  ?,' ='

      Saida     Db 6 Dup(0),10,13,'$'

Dados Ends

Programa Segment para Public 'Code'

      Assume Cs:Programa,Ds:Dados,Es:Dados

      Org    100h

      Inicio Proc Far

          Push Ds

          Xor Ax,Ax

          Push Ax

          Mov Ax,Dados

          Mov Ds,Ax

          Mov Es,Ax

          Cld



          Mov Di,OffSet TabNomes

Leitura:  Mov Ah,0Ah

          Mov Dx,OffSet Buffer



          Push Di    ;Limpa o Buffer Antes da Entrada

          Mov Di,OffSet Buffer+2

          Mov Al,' '

          Mov Cx,40

          Rep StoSb

          Pop Di



          Int 21h

          Cmp Buffer+1,0

          Je  FimLeit

          Call PulaLinha

          Mov Si,OffSet Buffer +2

          Mov Cx,40

          Rep MovSb     ;Move Si -> Di, Cx Vezes

          Jmp Leitura 

FimLeit:  Mov Al,3

          StoSb

          Mov Si,OffSet TabNomes

Contagem: LodSb

          Cmp Al,3

          Je  FimContagem

          Cmp Al,'A'

          Jb Contagem

          Cmp Al,'Z'

          Ja Contagem

          Sub Al,'A'

          Shl Al,1

          Mov Ah,0

          Mov Bx,Ax

          Inc Totais[Bx]

          Jmp Contagem

FimContagem: Mov Contador,0

          Mov Si,OffSet Totais

MostraQt: Cmp Contador,26

          Je  MostraFim

          Mov Al,Contador

          Add Al,'A'

          Mov Letra,Al

          LodSw

          Cmp Ax,0

          Je Acrescenta

          Mov Di,OffSet Saida

          Call DecAsc

          Mov Dx,OffSet MsgTotal

          Call Mostra

Acrescenta: Add Contador,1

          Jmp MostraQt

          

MostraFim: Ret

      Inicio Endp

      Extrn DecAsc:Near

      Extrn Mostra:Near

      Extrn PulaLinha:Near

Programa Ends

End Inicio

