.MODEL small
.STACK 100h
.DATA
Message1 DB 'Digite uma 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 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,127 ;tenho que verificar se o caracter em al, está entre 0 e 9.
ja NOT_DIGIT ;senão é digito
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
FINALIZA1:
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,4ch ;DOS terminate program function
int 21h ;terminate the program ;
GUARDA_NO_VETOR proc near
push bx ;empilha bx
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 bx ;desempilha bx
ret
limite_do_vetor:
mov ah,9
mov dx,OFFSET Message3
int 21h
ret
ENDP
END ;fim