TITLE Cadena que solicita una cadena y una posición para
mostrarla
gotoxy macro fila,col ; macro con nombre gotoxy con
parametros fil,col
mov ah,02h ; posicionar cursor en pantalla
mov dh,fila ;
coordenada x para posicionar cursor
mov dl,col ; coordenada y para posicionar cursor
mov bh,0h ; posiciona en coordenadas pedidas
int 10h
endm ;
termina macro
pantalla macro que ;
macro pantalla con parametro que
mov ah,02h ; posicionar cursor en pantalla
mov dl,que ; recibimos caracter, y se almacena en
"que"
int 21h
endm
imprime macro eztryng
;macro imprime con parametro eztryng
mov dx,offset
eztryng;coloca mensajes
mov ah,9 ;funcion para imprimir variable
int 21h
endm
DATOS SEGMENT PARA PUBLIC
mensaje DB
"INGRESE UN CARACTER: ",13,10,"$"
mensaje2 DB
"INGRESE X del 0 al 9: ",13,10,"$"
mensaje3 DB "INGRESE Y del 0 al 9:
",13,10,"$"
caracter DB
40 ; variable para capturar cadena
varx DB ? ; variable para capturar coordenada x
vary DB ? ; variable para capturar coordenada y
vtext db 100 dup('$')
DATOS ENDS
CODIGO SEGMENT PARA PUBLIC 'code'
ASSUME CS:CODIGO,DS:DATOS
startup:
mov ax,DATOS ; asignacion de datos
mov ds,ax ; asignacion de datos al segmento datos
imprime mensaje ;
llama a macro imprime
mov si,00h ; limpia el apuntador SI
leer: ; metodo leer
mov ax,0000 ; limpia ax
mov ah,01h
int 21h
mov
caracter[si],al ;guarda dato capturado
en variable de caracter
inc si ;incremeta el apuntador
cmp al,0dh ; compara si la ultima tecla
presionada fue enter
ja leer ; si cumple brinca coordenadas
jb leer ; si no se cumple se vuelve a
ejecutar leer
mov dx,offset
caracter ; mostrar caracter
mov ah,0ah ; lee cadna de texto por teclado
int 21h
imprime
caracter ; llama macro imprime con
parametro caracter
imprime
mensaje2 ; llama a macro imprime con
parametro mensaje2
mov ah,01h ; captura lo que se teclea
int 21h
sub al,30h ; resta 30 en hexadecimal para que sea
reconocido como numero y no como caracter
mov bl,al ; se mueve a al
mov varx,al ; se
mueve a la variable varx
imprime
mensaje3 ; coordenadas y ( se repite
para coordenada y)
mov ah,01h
int 21h
sub al,30h
mov bl,al
mov vary,al
mov ax,0003h
int 10h
gotoxy
vary,varx ;llama a macro gotoxy con
parametros varx y vary, como fil y
pantalla
caracter[0] ;llama a macro pantalla para mostrar primer caracter
mov ah,01h
int 21h ;interrupcion
mov ax,4c00h ;funcion de fin
int 21h
CODIGO ENDS
end startup
Mi ejemplo Macro
Macro que cargue un mensaje del segmento de datos a AX, así
nos ahorramos 3 lineas de código al momento de imprimir una cadena.
inicio macro
;declaramos la macro, le damos el nombre de inicio
mov ax,@data ;Cargamos el segmento de datos.
mov ds,ax
mov dx,ax
endm
.model small
.stack 64
.data
msj db 'Este es mi
primer macro', 10,13,'$'
.code
inicio ;Llamamos al macro, lo único que hace es
cargar msj del segmento de datos.
mov ah,09h
lea dx,msj ;puede
ser mov dx,offset msj
int 21h
mov ax,4c00h ;Sale
del programa
int 21h
end
No hay comentarios:
Publicar un comentario