All pastes #2077074 Raw Edit

armazena

public text v1 · immutable
#2077074 ·published 2011-06-09 02:16 UTC
rendered paste body
.MODEL small
.STACK 100h
.DATA
    Message1 DB 'Digite uma sequencia de caracteres:',13,10,'$'
    Message4 DB 'Digite outra sequencia de caracteres:',13,10,'$'
    Message2 DB 'Este nao e um caracter valido:',13,10,'$'
    Message3 DB 'Tamanho do vetor foi excedido',13,10,'$'
    Vetor1 DB  0,0,0,0,0,0,0,0,0,0,13,10,'$'
    Vetor2 DB  0,0,0,0,0,0,0,0,0,0,13,10,'$'
    newline DB 13,10,'$'
    var1 DB 0
    var2 db 0
    POS db 0 ;posicao no vetor
    Tam DB 10
.CODE
    mov  cx,@data              ;
    mov  ds,cx                 ;set DS to point to the data segment
    xor cx,cx                  ;limpa cx
    mov  ah,9                  ;funcao mostrar na tela
    mov  dx,OFFSET Message1    ;funcao mostrar na tela
    int  21h                   ;funcao mostrar na tela
Pega_caracter_Verifica:
    mov ah,1                   ;funcao 1 da int 21 h, pega caracter 
    int 21h                    ;caracter que eu peguei, vai em al
    cmp cx,0
    je primeiro_vetor
    ja segundo_vetor
primeiro_vetor:    
    cmp al,13                  ;compara bl com 13
    je PROXIMO_VETOR           ;condicional
    cmp al,32                   ;compara bl com 32 valor em inteiro de space
    jb NOT_DIGIT               ;verificar se o primeiro caracter pego é um digito
    cmp al,127                   ;tenho que verificar se o caracter em al, está entre 0 e 9.
    ja  NOT_DIGIT              ;senão é digito
    mov bx, OFFSET Vetor1 ;move FibVetor para bx
    CALL GUARDA_NO_VETOR
    jmp Pega_caracter_Verifica
segundo_vetor:
    cmp al,13                  ;compara bl com 13
    je FINALIZA1               ;condicional
    cmp al,32                   ;compara bl com 32 valor em inteiro de space
    jb NOT_DIGIT               ;verificar se o primeiro caracter pego é um digito
    cmp al,126                   ;tenho que verificar se e um caracter q esta em al entre 32 e 126.
    ja  NOT_DIGIT              ;senão é digito
    mov bx, OFFSET Vetor2       ;move FibVetor para bx
    CALL GUARDA_NO_VETOR
    jmp Pega_caracter_Verifica
NOT_DIGIT:
    xor ax,ax                  ;limpa ax
    mov  ah,9                  ;funcao mostrar na tela
    mov  dx,OFFSET Message3    ;funcao mostrar na tela
    int  21h                   ;funcao mostrar na tela
    jmp  Pega_caracter_Verifica  ;pula para Pega_Numero_Verifica

PROXIMO_VETOR:
    mov cx,1
    mov [POS],0
    mov [Tam],10
    mov ah,9                   ;move 9 para ah
    mov dx,OFFSET newline      ;pula linha
    int 21h  
    mov  ah,9                  ;funcao mostrar na tela
    mov  dx,OFFSET Message4    ;funcao mostrar na tela
    int  21h                
    jmp Pega_caracter_Verifica
FINALIZA1:
    mov ah,9                   ;move 9 para ah
    mov dx,OFFSET newline      ;pula linha
    int 21h  
    mov ah,9                   ;move 9 para ah
    mov dx,OFFSET newline      ;pula linha
    int 21h  

    xor ax,ax                  ;resetar ax
    mov  ah,9                  ;DOS print string function
    mov  dx,OFFSET Vetor1    ;ponteiro para o conteudo de fibvetor
    int  21h                   ;Mostra o conteudo do vetor
    mov ah,9                   ;move 9 para ah
    mov dx,OFFSET newline      ;pula linha
    int 21h  
    mov  ah,9                  ;DOS print string function
    mov  dx,OFFSET Vetor2    ;ponteiro para o conteudo de fibvetor
    int  21h  
    mov  ah,4ch                ;DOS terminate program function
    int  21h                   ;terminate the program                        ;


GUARDA_NO_VETOR proc near
        ;push bx                 ;empilha bx
        push cx
        xor ch,ch               ;limpa ch
        mov cl, [POS]           ;move tam para cl
        cmp cl,[Tam]
        je limite_do_vetor
        mov si, cx              ;move cx para si
        ;mov bx, OFFSET Vetor1 ;move FibVetor para bx
        mov [bx][si],al        ;move ah para vetor
        inc cx                  ;decrementa cx
        mov [POS],cl            ;move cl para tam
        pop cx
        ret
limite_do_vetor:
        mov ah,9
        mov dx,OFFSET Message3
        int 21h
        pop cx
        ret
ENDP
END                             ;fim