lunes, 16 de abril de 2018

Programa que mueve un caracter a la posicion que indique el usuario (macros)

org 100h
.model small

TITLE Programa que solicita una cadena y una posicion para mostrarla

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,"$"
    caracter  DB ?     
    varx  DB ?      
    vary  DB ?
    vaa   db 0
    vtext db 100 dup('$')   ;Declaracion del vector
 
       
.code  ;Segmento de codigo 
    
    inicio:          ;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          ;Funcion 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 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          ;Funcion 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 de sistema
     
        mov ah,01h   ;Funcion de captura con impresion en pantalla       
        int 21h      ;Interrupcion    
        mov ax,4c00h ;Funcion de fin       
        int 21h      ;Interrupcion   
         
end inicio         ;Fin de la function inicio

       
 

No hay comentarios:

Publicar un comentario