PUBLIC    LER_INT,HexaAsc

; -----------------------------------------------------------

; Procedure de Leitura de Valores na Tela

; -----------------------------------------------------------

LER_INT PROC NEAR

        PUSH DX

        PUSH CX

        PUSH BX

        PUSH AX

        MOV CX,0

LER:    MOV AH,01  ; Para informar a funcao int21h que vai ser solicitado a digitacao

        INT 21h    ; Solicita a digitacao de um valor e coloca em AL o caracter ASC pressionado

        CMP AL,13h ; Compara o valor de AL (pressionado no teclado) = 13h (enter)

        JZ FIM     ; JE Desvia se CMP for igual ao valor comparado

        CMP AL,30h ; Compara o valor de AL (pressionado no teclado) = 30h (0)

        JB LER     ; JB Desvia se CMP for menor ao valor comparado

        CMP AL,'9' ; Compara o valor de AL (pressionado no teclado) = '9' (9 na tabela asc)

        JA LER     ; JA Desvia se CMP for maior ao valor comparado

        PUSH AX    ; Guarda o valor de AX na pilha

        MOV AX,CX

        MOV BX,10

        IMUL BX

        POP CX     ; Retira o valor da pilha e coloca em CX

        AND CX,15  ; Verifica se CX = 15h

        ADD CX,AX  ; Soma o valor de AX com CX

        JMP LER    ; Volta para o LER

LER_INT ENDP



; -----------------------------------------------------------

; Procedure de Leitura em Hexa e Conversao em ASC

; -----------------------------------------------------------

HexaAsc proc  far

        push  ax

        push  bx

        push  cx

        pushf

        cld          ; Clear Direction (Zera a Flag de Direcao)

        mov   cl,16

        mov   bx,ax

HexA1:  mov   ax,bx

        sub   cl,4

        shr   ax,cl

        and   al,0Fh

        cmp   al,9

        jbe   HexA2

        add   al,7

HexA2:  add   al,30h

        stosb        ; Armazena em um endereo de memria o valor de AL

        cmp   cl,0   ; Se cl <> 0 vai para Hexa1

        jne   HexA1

        popf

        pop   cx

        pop   bx

        pop   bx

        ret

HexaAsc endp



