Estructura de un pregrama en ensamblador
Llegó el momento de dar un gran paso y entrar ya en ensamblador. Debug nos ha servido para conocer, poco a poco, el funcionamiento de algunas instrucciones del lenguaje ensamblador, y nos ha permitido realizar algunos programas sencillos, de tipo COM. Pero ya es hora de entrar de lleno en ensamblador, y para ello utilizaremos el MacroAssembler deMicrosoft, el cual nos permitirá, con una estructura más sencilla y sólida, a generar programas de tipo EXE y COM. Un programa EXE (EXEcution) difiere de un programa COM (COMmand) en que puede ser más grande de 64 k (los COM, al usar el mismo segmento para CS, DS, ES y SS no pueden superar este límite).
Al trabajar con MacroAssembler, la cosa cambia por completo, ya que nuestro código fuente estaráalmacenado en un fichero ASCII, el cual habremos creado bajo un editor de textos. Esta característica nos permitirá gestionar el código fuente de una manera mucho más flexible.
Pero antes de comenzar a realizar nuestros primeros pinitos, es necesario conocer la estructura básica de un programa escrito en lenguaje ensamblador, con el fin de ceñirnos a ese guión. Básicamente, nuestros programaspodrían estar englobados en cuatro bloques fundamentales:
DECLARACIONES Y DEFINICIONES
Definición de constantes, importación de código o información al compilador.
SEGMENTO DE DATOS
Reserva de espacio para las variables que usa el programa.
SEGMENTO DE PILA
Todos los programas han de llevar pila, con el fin de depositar la información necesaria para las llamadas a funciones, o bienalmacenar datos temporalmente. En este bloque se define un tamaño para la pila.
SEGMENTO DE CODIGO
Definición de todos los procedimientos e instrucciones del programa.
UN SENCILLO EJEMPLO
Para comprender mejor la definición de la estructura de un programa, he aquí un programa muy sencillo que imprime en pantalla una famosa oda:
; PROGRAMA: EJEMPLO1.ASM
; FUNCION : ESCRITURA DE UNA POESIA ENPANTALLA
;----------------------------------------------------------------------
; DECLARACION DE CONSTANTES
CR EQU 13 ; Constante CR (Retorno de carro)
LF EQU 10 ; Constante LF (Salto de línea)
;----------------------------------------------------------------------
; DECLARACION DEL SEGMENTO DE DATOS
DATOS SEGMENT ; Iniciodel segmento de datos
LINEA1 DB 'Con diez cañones por banda,',CR,LF,'$'
LINEA2 DB 'viento en popa y toda vela,',CR,LF,'$'
LINEA3 DB 'no corta el mar, si no vuela,',CR,LF,'$'
LINEA4 DB 'un velero bergantín.',CR,LF,'$'
DATOS ENDS ; Fin del segmento de datos
;---------------------------------------------------------------------
; DECLARACION DEL SEGMENTO DEPILA
PILA SEGMENT STACK ; Inicio del segmento de pila
DB 64 DUP('PILA') ; Inicialización de la pila
PILA ENDS ; Fin del segmento de pila
;---------------------------------------------------------------------
; DECLARACION DEL SEGMENTO DE CODIGO
CODIGO SEGMENT ; Inicio del segmento de código
EJEMPLO PROCFAR ; Inicio procedimiento EJEMPLO
; Asignar segmentos
ASSUME CS:CODIGO,DS:DATOS,SS:PILA
MOV AX,DATOS ; AX=Dirección del segmento de datos
MOV DS,AX ; DS=AX. Indicar el segmento de datos
LEA DX,LINEA1 ; DS:DX = dirección de LINEA1
CALL ESCRIBE ; Llamar al procedimiento ESCRIBE
LEADX,LINEA2 ; DS:DX = dirección de LINEA2
CALL ESCRIBE ; Llamar al procedimiento ESCRIBE
LEA DX,LINEA3 ; DS:DX = dirección de LINEA3
CALL ESCRIBE ; Llamar al procedimiento ESCRIBE
LEA DX,LINEA4 ; DS:DX = dirección de LINEA4
CALL ESCRIBE ; Llamar al procedimiento ESCRIBE
MOV...
Regístrate para leer el documento completo.