martes, 10 de abril de 2018

Macros - Ensamblador


Programa que coloca el cursor en algun lugar en pantalla con macros e imprime un caracter.

gotoxy macro fila,col ;declaracion de macro con los parametros fila,col
mov ah,02h
mov dh,fila ;utiliza el parametro fila que es recibido al llamar el macro
mov dl,col  ;utiliza el parametro col que es recibido al llamar el macro
mov bh,0h
int 10h
endm     ;fin de macro
pantalla macro que ;declaracion de macro con el parametro llamado que
mov ah,02h
mov dl,que
int 21h
endm     ;fin de macro
.model small
.data
.code
startup:
mov ax,@data
mov ds,ax
mov ax,0003h
int 10h
gotoxy 10,10 ;llama macro gotoxy y envia los parametros 10,10 para fila y col
pantalla 41h ;llama macro pantalla el cual imprime un caracter en pantalla 41h es A
mov ah,01h
int 21h
mov ax,4c00h
int 21h
end startup


Programa que coloca un caracter en la posicion dada de acuerdo a parametros ingresados por teclado


TITLE Cadena que solicita una cadena y una posicion para mostrarla

gotoxy macro fila,col ;declaracion de macro gotoxy parametros:fila,col
mov ah,02h   ;complemento interrupcion 10h modo video colocacion cursor
mov dh,fila  ;coordenada x para colocacion de cursor dh
mov dl,col   ;coordenada y para colocacion de cursor dl
mov bh,0h 
int 10h      ;interrupcion de video
endm   ;fin de macro

pantalla macro que  ;declaracion de macro pantalla parametro que
mov ah,02h       ;complemento interrupcion 21h
mov dl,que   ;que es el caracter capturado
int 21h      ;interrupcion DOS
endm  ;fin de macro

imprime macro eztryng  ;declaracion de macro con parametro eztryng
mov dx,offset eztryng  ;coloca mensajes en dx
mov ah,9               ;complemento para la interrupcion 21h para impresion de txto
int 21h                ;interrupcion DOS
endm                   ;fin de macro

.data    ;variables
mensaje DB "INGRESE UN CARACTER: ","$"
mensaje2 DB "INGRESE X del 0 al 9: ","$"
mensaje3 DB "INGRESE Y del 0 al 9: ","$"
caracter DB 40
varx DB ?
vary DB ?
vtext db 100 dup('$')

.code

startup:
mov ax,@data  ;asignacion de datos ax
mov ds,ax     ;asignacion de datos al segmento de datos

imprime mensaje ;llama macro imprime con el parametro 'mensaje'
mov si,00h      ;limpia el apuntador SI


 leer:          ;declaracion de metodo leer 
 mov ax,0000    ;limpia ax
 mov ah,01h     ;complemento para interrupcion 21h captura
 int 21h        ;interrupcion DOS
 mov caracter[si],al ;guarda el dato capturado en variable caracter
 inc si         ;incrementa apuntador si
 cmp al,0dh     ;compara si la ultima tecla presionada fue Intro
 ja coordenadas ;si cumple brinca a coordenadas
 jb leer        ;sino cumple vuelve a ejecutar leer

coordenadas:    ;declaracion de metodo coordenadas
mov dx,offset caracter ;coloca en dx el caracter ingresado
mov ah,0ah             ;complemento de interrupcion 21h lee cadena de texto por teclado
int 21h                ;interrupcion DOS
imprime caracter       ;llama macro imprime con parametro caracter
mov ax,0003h           ;complemento interrupcion 10h modo texto
int 10h
imprime mensaje2       ;llama macro imprime con parametro mensaje2
mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
int 21h                ;interrupcion DOS
sub al,30h             ;resta 30h para convertir al valor numerico
mov bl,al              ;mueve al a bl
mov varx,al            ;guarda al en varx (coordenada x)
mov ax,0003h           ;complemento interrupcion 10h modo texto
int 10h
imprime mensaje3       ;//////////////se repite/////////
mov ah,01h
int 21h
sub al,30h
mov bl,al
mov vary,al            ;////////////////////////
mov ax,0003h           ;complemento interrupcion 10h modo texto
int 10h                ;interupccion de video

gotoxy vary,varx       ;llama macro gotxy con los parametros vary y varx como columna y fila
pantalla caracter[0]   ;llama macro pantalla con el caracter capturado como parametro

mov ah,01h             ;complemento de interrupcion 21h Eco de un caracter
int 21h                ;interrupcion DOS
mov ax,4c00h           ;complemento interrupcion 21h fin de probrama
int 21h                ;interrupcion DOS
end startup            ;fin de funcion principal

No hay comentarios:

Publicar un comentario