miércoles, 11 de abril de 2018

Ejemplo macros 2-modificado


; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt
org 100h

gotoxy macro fila,col  ;macro que  pone el cursor en la posicion deseada   
    mov ah,02h    ;funcion imprimir caracter     
    mov dh,fila   ;ingresamos la coordenada de x      
    mov dl,col    ;ingresamos la coordenada de y      
    mov bh,0h     ;numero de pagina         
    int 10h       ;interrupcion  
    endm          ;fin del macro
 
pantalla macro que  ;macro que imprime el primer caracter de la palabra escrita          
    mov ah,02h      ;funcion  imprimir caracter 
    mov dl,offset que   ;ponemos el mensaje en dl     
    int 21h             ;interrupcion
    endm                ;fin del macro
 
imprime macro eztryng   ;macro que imprime los mensajes que le enviemos    
    mov dx,offset eztryng  ;ponemos elmensaje en dx
    mov ah,9                ;funcion imprimir variable
    int 21h                 ;interrupcion
    endm                    ;fin del macro
 
.data    ;segmento de datos con  variables
    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,"$"
    mensaje4  DB "Que letra quieres",13,10,"$"   
    caracter  DB ?     
    varx  DB ?      
    vary  DB ?
    vaa   db 0
    vtext db 100 dup('$')   ;Declaracion del vector
 
       
.code  ;segmento de codigo 
    
    startup: ;funcion de inicio 
    mov ax,@data  ;almacenamos lo que esta en el segento data   
    mov ds,ax     ;movemos ax a ds
    imprime mensaje  ;llamamos al macro imprime y le enviamos la variable mensaje   
    mov si,00h       ;limpiamos el registro si
    mov caracter,0   ;limpiamos la variable caracter         
    leer:            ;inicio de la funcion leer

        mov ax,0000  ;limpiamos ax             
        mov ah,01h   ;fincion de ingreso de caracter con impresion del mismo en pantalla            
        int 21h      ;interrupcion   
        mov caracter[si],al  ;ponemos el caracter tecleado en el arreglo caracter       
        inc si       ;incrementamos si     
        cmp al,0dh   ;comparamos al=salto de linea         
        ja leer      ;de no ser igual repite la funcion leer para ingresar otro caracter   
        jb leer      ;en caso de que al=salto de linea continua el programa
        ;mov cx,si     
        mov ah,02h   ;funcion imprimir caracter       
        mov dl,10    ;imprimimos un salto de linea  
        int 21h      ;interrupcion
        imprime caracter ;llamamos al macro imprime y le enviamos la variable caracter
        mov ah,02h       ;funcion imprime caracter   
        mov dl,10         ;imprimimos un salto de linea
        int 21h           ;interrupcion
        imprime mensaje2  ;llamamos al macro imprime y le enviamos la variable mensaje2
        mov ax,0000       ;limpiamos ax
        mov ah,01h        ;fincion de ingreso de caracter con impresion del mismo en pantalla 
        int 21h           ;interrupcion  
        sub al,30h        ;le restamos 30h al caracter ingresado para transformarlo en un numero
        mov bl,al         ;ponemos el numero en bl
        mov varx,al       ;ponemos el numero en varx  
        imprime mensaje3  ;llamamos al macro imprime y le enviamos la variable mensaje3  
        mov ah,01h        ;fincion de ingreso de caracter con impresion del mismo en pantalla 
        int 21h           ;interrupcion  
        sub al,30h        ;le restamos 30h al caracter ingresado para transformarlo en un numero
        mov bl,al         ;ponemos el numero en bl
        mov vary,al       ;ponemos el numero en vary     
        mov ax,0003h      ;funcion que limpia la pantalla   
        int 10h           ;interrupcion 
        imprime mensaje4
        mov ah,01h        ;fincion de ingreso de caracter con impresion del mismo en pantalla 
        int 21h           ;interrupcion  
        sub al,30h        ;le restamos 30h al caracter ingresado para transformarlo en un numero 
        gotoxy vary,varx  ;llamamos al macro gotoxy y le enviamos las variables vary y varx
        mov ah,00          ;limpiamos la parte alta de ax
        mov si,ax          ;ingresamos en si la posicion del caracter que deseamos imprimir
        
        ;kol:          
         pantalla caracter[si] ;llamamos al macro pantalla y le enviamos el caracter en la posicion deseada 
         ;inc si  
        ;loop kol           
        
        mov ah,01h   ;funcion de captura con impresion en pantalla       
        int 21h      ;interrupcion    
        mov ax,4c00h ;funcion de fin       
        int 21h      ;interrupcion   
         
end startup          ;fin

No hay comentarios:

Publicar un comentario