;Programa para ler 10 numeros

;E mostrar os numeros em ordem crescente



Pilha Segment para Stack 'Stack'

      Db 512 Dup(0)

Pilha Ends



Dados Segment para Public 'Data'

      MsgNumero   Db 'Digite o Numero :$'

      Numeros     Dw 10 Dup(0)

      Acumulador  Dw 0

      Acumulador2 Dw 0

      Maior       Dw 0

      Menor       Dw 0

      NumAsc      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    ;Mov Ax,0

         Push Ax

         Mov Ax,Dados

         Mov Ds,Ax

         Mov Es,Ax

         Mov Acumulador,0

         Mov Di,OffSet Numeros

;Inicia a Leitura dos Numeros

         Ler: Cmp Acumulador,10

              Jae ParaLeitura

              Mov Dx,OffSet MsgNumero

              Call Mostra

              Call LerInt

              Mov [Di],Ax

              Add Di,2

              Add Acumulador,1

              Call PulaLinha

         Loop Ler

;Inicia o Calculo da Media

         ParaLeitura: Call PulaLinha



;Inicia a Busca pelo Maior Numero

         Mov Cx,10

         Mov Maior,0

         Mov Acumulador,0

         Mov Di,OffSet Numeros

         Volta: Mov Ax,[Di]

                Cmp Ax,Maior

                Jb  NaoGrava

                Mov Maior,Ax

                NaoGrava: Add Di,2



                Add Acumulador,1

                Cmp Acumulador,10

                Je  Classificar

         Loop Volta



;Inicia a Classificacao

         Classificar: Mov Cx,10

         Mov Menor,0

         Mov Acumulador,0

         Mov Acumulador2,0

         Mov Di,OffSet Numeros

         Volta2: Mov Ax,[Di]

                 Cmp Ax,Acumulador

                 Jne NaoMostra

                 Mov Menor,Ax

                 Push Di

                 Mov Di,OffSet NumAsc

                 Call DecAsc

                 Mov Dx,OffSet NumAsc

                 Call Mostra

                 Pop Di



                 NaoMostra: Add Di,2

                 Add Acumulador2,1

                 Cmp Acumulador2,10

	         Je  Recomecar



         Loop Volta2

         Recomecar: Mov Di,OffSet Numeros

                    Mov Acumulador2,0

                    Add Acumulador,1

                    Mov Cx,Maior

                    Cmp Acumulador,Cx

                    Jbe Volta2

     Terminou: Ret

     Inicio Endp

     Extrn DecAsc:Near

     Extrn Mostra:Near

     Extrn LerInt:Near

     Extrn PulaLinha:Near

Programa Ends

End Inicio

