.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,'$' POS db 0 ;posicao no vetor Tam DB 10 ;constante serve para referencia da posicao .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 ;cx e uma flag em 0 continua operando com o vetor1 | cx=1 opera com vetor2 je primeiro_vetor ;se for 0 vetor1 ja segundo_vetor ;se for 1 vetor2 primeiro_vetor: cmp al,13 ;compara bl com 13(enter) je PROXIMO_VETOR ;se for enterentao passa pro proximo vetor cmp al,32 ;compara bl com 32 valor em inteiro de space jb NOT_DIGIT ;verificar se o caracter é valido cmp al,127 ;tenho que verificar se e um caracter q esta em al entre 32 e 126. ja NOT_DIGIT ;senão é digito mov bx, OFFSET Vetor1 ;move vetor1 para bx para usar na funcao de armazenar CALL GUARDA_NO_VETOR ;chamada de funcao pra armazenar no vetor jmp Pega_caracter_Verifica ;retorna para a o inicio segundo_vetor: cmp al,13 ;compara bl com 13(enter) je FINALIZA1 ;se for enterentao passa pro proximo vetor cmp al,32 ;compara bl com 32 valor em inteiro de space jb NOT_DIGIT ;verificar se o caracter é valido 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 vetor2 para bx CALL GUARDA_NO_VETOR ;chamada de funcao pra armazenar no vetor jmp Pega_caracter_Verifica ;retorna para a o inicio NOT_DIGIT: xor ax,ax ;limpa ax mov ah,9 ;funcao para imprimir cadeia de caracteres mov dx,OFFSET Message2 ;move vetor Message2 em dx int 21h ;interrupção do sistema e imprime message3 jmp Pega_caracter_Verifica ;voltar para o inicio PROXIMO_VETOR: mov cx,1 mov [POS],0 ;reseta posicao para trabalhar com o novo vetor 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 mov dx,OFFSET newline ;pula linha int 21h mov ah,9 mov dx,OFFSET newline ;pula linha int 21h xor ax,ax ;resetar ax mov ah,9 ;DOS print string function mov dx,OFFSET Vetor1 ;mov vetor1 pra dx para imprimir int 21h mov ah,9 mov dx,OFFSET newline ;pula linha int 21h mov ah,9 ;DOS print string function mov dx,OFFSET Vetor2 ;mov vetor2 para dx para imprimir seu conteudo int 21h mov ah,4ch ;DOS terminate program function int 21h ;terminate the program ; GUARDA_NO_VETOR proc near push cx ;empilha cx pois preciso usar o valor dele como flag no inicio do programa xor ch,ch ;limpa ch mov cl, [POS] ;move pos para cl cmp cl,[Tam] ;compara cl com tam para ver se excedeu o tamanho jae limite_do_vetor ;se pos for igual ou maior q 10 excedeu e vai para o flag limite_do_vetor mov si, cx ;move cx para si mov [bx][si],al ;move ah para vetor inc cx ;decrementa cx mov [POS],cl ;move cl para tam pop cx ;desempilha cx para voltaro valor da flag , ret ; assim podendo utilizar no inicio do programa limite_do_vetor: ;significa q o excedeu o tamanho do vetor e n vai armazenar mais mov ah,9 mov dx,OFFSET Message3 int 21h pop cx ;desempilha cx para voltaro valor da flag , ret ; assim podendo utilizar no inicio do programa ENDP END ;fim