;Programa para fazer a media de 10 numeros
;E mostrar os numeros maiores que a Media
;dw - define word (2 bytes)
;db - define byte
;dup(x) - duplica x vezes
;? - valor indefinido

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)
      Soma       Dw 0
      Acumulador Dw 0
      MsgMedia   Db 'Media :'
      NumAsc     Db 6 Dup(0),10,13,'$'
      Media      Dw 0
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 Soma,0
         Mov Cx,10
         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
              Add Soma,Ax
              Mov [Di],Ax
              Cmp Ax,0
              Jbe ParaLeitura
              Add Di,2
              Add Acumulador,1
              Call PulaLinha
         Loop Ler
;Inicia o Calculo da Media
         ParaLeitura: Call PulaLinha
         Mov Dx,0
         Mov Ax,Soma
         Mov Bx,Acumulador
         Cmp Bx,0
         Jbe DivPorZero
         IDiv Bx
         DivPorZero: Mov Media,Ax
;Mostra o valor da Media
         Mov Di,OffSet NumAsc
         Call DecAsc
         Mov Dx,OffSet MsgMedia
         Call Mostra
         Call PulaLinha
;Inicia a Busca pelo Maior Numero
         Mov Cx,10
         Mov Di,OffSet Numeros
         Volta2: Mov Ax,[Di]
                 Cmp Ax,Media
                 Jbe NaoMostra
                 Push Di
                 Mov Di,OffSet NumAsc
                 Call DecAsc
                 Mov Dx,OffSet NumAsc
                 Call Mostra
                 Pop Di
                 NaoMostra: Add Di,2
         Loop Volta2
     Ret
     Inicio Endp
     Extrn DecAsc:Near
     Extrn Mostra:Near
     Extrn LerInt:Near
     Extrn PulaLinha:Near
Programa Ends
End Inicio
