Créditos para Núbia Cristine aluna de Ciência da computação - UFMA
%OUT Editor de texto - Escrever e justificar o texto -
%OUT Autor: Nubia Cristine Silveira dos Santos CP09142-81 -
%OUT--------------------------------------------------------------------------
.model small ;tamanho do segmento de dados
.stack 100h ;tamanho da pilha
.data ;segmento de dados, com definições de variáveis
;Vetores para utilizacao do MENU
MENU1 db "[Escrever] Sair$"
MENU2 db " Escrever [Sair]$"
MSG db "Escreva o texto e aperte ESC para retornar ao MENU:$"
texto DB 1600 DUP ('$')
.code
MAIN PROC ;Inicia o segmento de dados apontando para o início da área de dados
MENU_REPETIÇAO:
mov SI,0 ;Inicializa SI com 0h
mov ax,@data
mov ds,ax
MENU:
call LIMPATELA
LEA DX,MENU1 ; obtem o endereço efetivo de Msg
MOV AH,09h ; move valor 09h para o registrador AH (imprime a string na tela)
INT 21h
mov ah,1h
int 21h
cmp al, 0dh
je ESCREVER
cmp al,4dh
je MENUDIR
jmp MENU
MENUDIR:
call LIMPATELA
LEA DX,MENU2 ; obtem o endereço efetivo de MENU2
MOV AH,09h ; move valor 09h para o registrador AH (imprime a string na tela)
INT 21h
mov ah,1h
int 21h
cmp al,0dh
je SAIR
cmp al,4bh
je MENU
jmp MENUDIR
ESCREVER:
call LIMPATELA ; Limpa a tela para digitação
LEA DX,MSG ; obtem o endereço efetivo de MSG
MOV AH,09h ; move valor 09h para o registrador AH (imprime a string na tela)
INT 21h
CALL ENTER1
ESCREVE:
mov ah,1h
int 21h
cmp al,1bh
je MENU
cmp al,0dh
je CARAC_ENTER
cmp al,08h
je LIMPA
mov texto[SI],al
inc SI
push si
mov ah,3h ;esta função retorna em dl a coluna
int 10h
cmp dl,79 ;80 é a ultima coluna
je JUSTIFICAR ;MOV TEXTO[SI],AL
jmp ESCREVE
;-----------------------------------------------------------------------------------------------------------------
JUSTIFICAR:
mov ah,1h ;Esse trecho verifica o caractere da última coluna digitado e decide o que fazer
int 21h
cmp al,08h ;Faz comparação com a tecla Backspace
je LIMPA
cmp al,0dh ;Faz comparação com enter
je ESCREVE
cmp al,' ' ;Faz comparação com espaços
je ESCREVE
mov texto[si],al ;Se não for nenhuma joga o valor dentro do vetor texto
xor bl,bl ;zera BL para utilizá-lo como contador
JUSTIFICANDO:
cmp texto[si-1],' '
;-----------------------------------------------------------------------------------------------------------------
CARAC_ENTER: ;Efetuado quando o usuario digita o caractere "ENTER"
call ENTER1
mov texto[SI],AL ;Copia o caractere armazenado em AL para o espaco especificado por SI no vetor texto
inc SI ;Incrementa SI para apontar para a próxima posicao do Vetor
jmp ESCREVE ;Efetua o Loop para pedir nova entrada de caractere
jmp MENU ;mostra o resultado da busca
LIMPA: ;Efetuado quando o usuario digita o caractere "BACKSPACE"
CMP SI,0 ;Se for o inicio do texto,nao faz nada e pede nova entrada
JE ESCREVE ;Efetua o Loop para pedir nova entrada de caractere, Sem decrementar o contador CX
CALL BACKSPACE ;Pula para o label BACKSPACE
DEC SI ;Caso nao, decrementa SI
MOV texto[SI],'$' ;Coloca ,no espaco do vetor texto especificado por SI, o caractere '$'
JMP ESCREVE ;Efetua o Loop para pedir nova entrada de caractere,Sem decrementar o contador CX
;-----------------------------------------------------------------------------------------------------------------
ENTER1: ;Forca o Enter
PUSH AX ;Guarda AX na pilha
MOV DL,0DH ;Passa para DL o caractere "Retorno de Carro"
MOV AH,2h ;Função 2h para imprimir um caracter
INT 21h ;Imprime o caracter que está em DL
MOV DL,0AH ;Passa para DL o caractere "Line Feed"
MOV AH,2h ;Função 2h para imprimir um caracter
INT 21h ;Imprime o caracter que está em DL
POP AX ;DEVOLVE VALOR DE AX
RETN ;RETORNA PRA ONDE FOI CHAMADO
BACKSPACE: ;Forca o BACKSPACE
MOV DL,32 ;Copia 32 decimal para DL o equivalente a ESPAÇO
MOV AH,2h ;Função 2h para imprimir um caracter
INT 21h ;Imprime o caracter que está em DL
MOV DL,08h ;Copia 08 hexa para DL o equivalente ao retorno de carro
MOV AH,2h ;Função 2h para imprimir um caracter
INT 21h ;Imprime o caracter que está em DL
RET ;Retorna o controle ao procedimento que o chamou
LIMPATELA: ; Limpa e Ajusta a tela
PUSH AX ; Guarda AX na pilha
MOV AH,0H ; Ativa a IRQ 10 para a limpeza do vídeo
MOV AL,3H ; define o modo de video
int 10h ; Habilita a IRQ 10 (video)
POP AX ; Recupera AX da pilha
RET
SAIR:
mov ah,4ch ;função para retorno ao dos
int 21h
MAIN ENDP
END MAIN
Coloque aqui o seu email