Páginas

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

UNIDAD 3 y 4

UNIDAD 3: Configuración y administración del espacio en disco Para la gestión del almacenamiento de una base de datos existen 4 conce...