Posicionar cadena indicada por el usuario en coordenadas
indicadas por el usuario
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