COMMENT [
Programa - Letras Verticais
Recebe um texto e o escreve em uma coluna vertical.
Estrutura: .EXE
Montagem: MASM/Z B:LETRAS,B:LETRAS,B:LETRAS,B:LETRAS;
LINK B:LETRAS,B:LETRAS;
DEL B:LETRAS.OBJ
LETRAS - executa o LETRAS.EXE
[
PAGE 62,132
TITLE *** Letras Verticais ***
CR EQU 13 ;ASCII Carriage Return
LF EQU 10 ;ASCII Line Feed
BS EQU 8 ;ASCII Backspace
BEL EQU 7 ;ASCII Bel
ESQ EQU 27 ;ASCII Escape
DOS MACRO FUNCAO
IFB
ERR
%OUT Você não passou o número da função
ELSE
MOV AH,função
INT 21H
ENDIF
ENDM
DOSSEG
.MODEL SMALL
.STACK
.DATA
PAGINA DB 0
ATRIBUTO DB 7
MENSA_1 DB ESQ,'=',1,22'L E T R A S V E R T I C A I S'
DB 27,'=',3,4,'Digite o texto:',00
CRLFLF DB CR,LF,LF,0
BUFFER DB CR,LF,?'$'
MOLDE1 DB 27,'=',?,?,201,27,'R',?,205,187,0
MOLDE2 DB 27,'=',?,?,200,27,'R',?,205,188,0
MOLDE3 DB 27,'=',?,?,186,27',=',?,?,186,0
AREA DB 32,?,32 DUP (00)
INÍCIO: .CODE
MOV Ax,@DATA
MOV DS,AX
MOV ES,AX
LACO_PROG:
CALL CLRSCR ;apaga a tela
MOV AX,0201H ;define as coordenadas
MOV DX,044FH ;para desenhar uma
CALL MOLDURA ;moldura na tela
LEA SI,MENSA_1 ;endereça a mensagem
CALL WRITE ;título do programa
LEA DX,AREA ;e a imprime
DOS 10 ;aguarda a digitação
LEA SI,CRLFLF ;avança duas linhas em
CALL WRITE ;branco
MOV CL,AREA[1] ;move contador de
MOV CH,0 ;caracteres para CX
JCXZ FIM_PROG ;se nada foi digitado,
LEA SI,AREA + 2 ;encerra o programa
LACO_REPET:
LODSB ;apanha um caractere
MOV BUFFER+2,AL;move-o p/ a área de
LEA DX,BUFFER ;impressão.Utiliza a
DOS 9 ;função 9 para escrevê-lo
LOOP LACO_REPET;na tela, após um CR LF
MOV AH,0 ;aguarda a digitação de
INT 16H ;uma tecla
JMP LACO_PROG ;repete tudo novamente
FIM_PROG: DOS 4Ch ;saída do programa,com
ENDP ;retorno ao DOS
INCLUDE B:VIDEO.ASM;tratamento de vídeo
END INICIO