top of page

MACRO LENGUAJE ENSAMBLADOR (ASM) Y PROCEDIMIENTOS EN ENSAMBLADOR

Las macros son instrucciones complejas formadas de instrucciones más sencillas, sirven cuando se quieren hacer procesos repetitivos.

Los macros sirven para:

-Ahorrar código cuando se quiere hacer un proceso repetitivo.

-Menos errores al momento de realizar código repetitivo.

-Permite hacer uso de variables que son pasados como parámetros.

-Mayor seguridad en el código, se pueden invocar desde un archivo externo al programas ASM.

Las macros se definen al inicio de un programa, antes de .model: nombreMacro MACRO [parametros] ;Los parámetros son opcionales. instrucciones... ENDM ;Indica fin del macro. 1.- Como primer programa haremos que un macro 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 Ejecución del programa:

http://miensamblador.blogspot.mx/2013/07/mi-primer-macro.html

PROCEDIMIENTOS EN ENSAMBLADOR

El segmento de código contiene el código ejecutable de un programa. También tiene uno o mas procedimientos, definidos con la directiva PROC. Un segmento que tiene solo un procedimiento puede aparecer como sigue: NOMBRE OPERACION OPERANDO COMENTARIO nomsegmento SEGMENT PARA nomproc PROC FAR ;Un . ;procedimiento . ;dentro . ;del segmento nomproc ENDP ;de código nomsegmento ENDS El nombre del procedimiento debe estar presente, ser único y seguir las reglas para la formación de nombres del lenguaje. El operando far en este caso esta relacionado con la ejecución del programa. Cuando usted solicita la ejecución de un programa, el cargador de programas del DOS utiliza este nombre de procedimiento como el punto de entrada para la primera instrucción a ejecutar. La directiva ENDP indica el fin de un procedimiento y contiene el mismo nombre que el enunciado PROC para permitir que el ensamblador relacione a los dos. Ya que los procedimientos deben estar por completo dentro de un segmento, ENDP define el final de un procedimiento antes que ENDS defina el final de un segmento.

El programa consta de un menú para ver si se quiere crear, abrir, modificar o eliminar un archivo, este archivo se guarda en el disco duro.

Para el manejo de archivos es esencial conocer las instrucciones e interrupciones para dichas operaciones.

Para crear archivo: 3ch

Para abrir un archivo: 3dh

Para escribir sobre un archivo: 40h

Para cerrar un archivo: 3eh

Eliminar un archivo: 41h

Todas las instrucciones llevan la interrupción int 21h

Código completo: imprime macro cadena mov ax,@data mov ds,ax mov ah,09 mov dx,offset cadena int 21h endm .model small .stack .data msj db 0ah,0dh, '***** Menu *****', '$' msj2 db 0ah,0dh, '1.- Crear Archivo', '$' msj3 db 0ah,0dh, '2.- Abrir Archivo', '$' msj4 db 0ah,0dh, '3.- Modificar archivo', '$' msj5 db 0ah,0dh, '4.- Eliminar archivo', '$' msj6 db 0ah,0dh, '5.- Salir', '$' msj7 db 0ah,0dh, 'El Cerrado de un arhcivo se hace automatico', '$' msjelim db 0ah,0dh, 'Archivo eliminado con exito', '$' msjcrear db 0ah,0dh, 'Archivo creado con exito', '$' msjescr db 0ah,0dh, 'Archivo escrito con exito', '$' msjnom db 0ah,0dh, 'Nombre del archivo: ', '$' cadena db 'Cadena a Escribir en el archivo','$' nombre db 'archivo2.txt',0 ;nombre archivo y debe terminar en 0 vec db 50 dup('$') handle db 0 linea db 10,13,'$' .code inicio: menu: imprime msj imprime msj2 imprime msj3 imprime msj4 imprime msj5 imprime msj6 imprime msj7 mov ah,0dh int 21h ;comparamos la opcion que se tecleo mov ah,01h int 21h cmp al,31h je crear cmp al,32h je abrir cmp al,33h je pedir cmp al,34h je eliminar cmp al,35h je salir crear: mov ax,@data mov ds,ax ;crear mov ah,3ch mov cx,0 mov dx,offset nombre int 21h jc salir ;si no se pudo crear imprime msjcrear mov bx,ax mov ah,3eh ;cierra el archivo int 21h jmp menu abrir: ;abrir mov ah,3dh mov al,0h ;0h solo lectura, 1h solo escritura, 2 lectura y escritura mov dx,offset nombre int 21h mov ah,42h mov al,00h mov bx,ax mov cx,50 int 21h ;leer archivo mov ah,3fh ;mov bx,ax mov bx,ax mov cx,10 mov dx,offset vec ;mov dl,vec[si] int 21h mov ah,09h int 21h ;Cierre de archivo mov ah,3eh int 21h jmp menu pedir: mov ah,01h int 21h mov vec[si],al inc si cmp al,0dh ja pedir jb pedir editar: ;abrir mov ah,3dh mov al,1h mov dx,offset nombre int 21h jc salir ;Si hubo error ;Escritura de archivo mov bx,ax ; mover hadfile mov cx,si ;num de caracteres a grabar mov dx,offset vec mov ah,40h int 21h imprime msjescr cmp cx,ax jne salir ;error salir mov ah,3eh ;Cierre de archivo int 21h jmp menu eliminar: mov ah,41h mov dx, offset nombre int 21h jc salir ;Si hubo error imprime msjelim salir: mov ah,04ch int 21h end

http://miensamblador.blogspot.mx/2013/07/uso-de-un-procedimiento.html


Entradas destacadas
Vuelve pronto
Una vez que se publiquen entradas, las verás aquí.
Entradas recientes
Archivo
Buscar por tags
No hay tags aún.
Síguenos
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page