2. Los archivos COM tienen como máximo
65536 bytes de extensión, que "curiosamente"
coinciden con 0FFFFh, que es el máximo valor
que puede tener un registro de 16 bits, y es
almacenado en memoria inmediatamente
después del PSP.
Por lo tanto, cualquier dirección dentro
del COM tendrá en común el registro de
segmento, y con el de desplazamiento se podrá
averiguar el lugar donde se encuentra
cualquier cosa en el archivo.
3. El registro SP contiene una dirección de 2
bytes abajo de la memoria máxima disponible para
el programa, lo que significa que hay 64 KB de
espacio disponible para el programa, SP = 0FFFEh.
Esto se debe a que DOS siempre coloca un
CERO en la pila antes de transferir el control al
programa .COM.
4. Lineamientos para programas .COM
1. Un programa .COM solamente puede ocupar un espacio
máximo de memoria de 64 KB. (Un segmento.)
2. La definición del segmento es muy simple, ya que solo
puede usarse un segmento.
3. Todos los registros de segmento son inicializados en el
mismo segmento.
4. Deberá usarse la directiva ORG para iniciar en el byte 256
(100h), de tal manera de dejar espacio para el PSP, el
cual es cargado en memoria de manera automática en el
momento de cargar el programa.
5. Si el programa contiene DATOS, éstos no deberán ser
ejecutados, se podrá usar la instrucción JMP de tal forma
de brincarlos. También se pueden colocar dichos datos al final
del programa después de la instrucción de retorno al
DOS.
7. Sintaxis de la declaración de un segmento
Sintaxis de SEGMENT
nombre-seg SEGMENT
---
sentencias
---
nombre_seg ENDS
El programa debe terminar con: END etiqueta
En este caso la etiqueta se llama inicio, también se
pone seguida de (:) en la primer línea de código del
programa.
8. Sintaxis del las instrucciones en Lenguaje Ensamblador.
[etiqueta] mnemónico [operandos] [; comentarios]
Donde:
assume: Habilita la verificación de error para valores de
registros. Establece la relación entre un registro de segmento y
un segmento.
Sintaxis:
assume SEG_REG:NOM_SEG,...
org Directiva que pone el IP en el valor de expresión.
Sintaxis:
org expresión
9. jmp Instrucción de salto incondicional.
Sintaxis:
jmp etiqueta
---
etiqueta:
mov Instrucción de transferencia de información de un
operando fuente a un operando destino.
Sintaxis:
mov oper_des, oper_fuente
int Instrucción que llama a ejecución a una interrupción de
un byte
Sintaxis:
int # interrupción
10. El Llamado a una Interrupción.
En un programa se llaman a algunas interrupciones,
para ello se requiere conocer la sintaxis de llamado a estas
subrutinas. Por ejemplo:
INT 21h Función 4Ch: Regresa al DOS con código de retorno
Entrada: AH = 4Ch
AL = Valor regresado.
Use INT 21h función 4Ch para terminar un programa.
Puede regresar un valor al programa padre en el registro AL..
Normalmente se regresa un CERO (00h) cuando el programa
termina sin problemas.
11. Ejemplo de un programa .COM. usando Estructura Estándar.
12.
13.
14. OBSERVACIONES.
- El programa escribe la palabra Angelica,Lupita,Veronica.
- El programa consta de un solo segmento, el de código.
- El operador OFFSET nos permite escribir la dirección de la variable
Dato al registro DX.
Para envía la palabra Angelica,Lupita,Veronica., utilizamos una rutina
definida por el DOS en la interrupción 21h, es la
función 09h, la cual se define y llama de la siguiente manera:
INT 21h Función 09h: Imprime una cadena de caracteres sobre la
pantalla.
Entrada: AH = 09h
DS:DX = Dirección de inicio de la cadena.
La función 09h es muy fácil de usar, para utilizarla coloque la cadena en
memoria y termínela con un signo de
pesos ($), esto significa que no se puede incluir este signo como parte
de la cadena, la dirección del inicio de la cadena es
colocada en los registros DS:DX
15. Estructura Simplificada.
Los ensambladores de Microsoft y Borland en su
versiones actuales ofrecen ciertas facilidades que nos
simplifican la creación de archivos fuente en lenguaje
ENSAMBLADOR, a este método le llamaremos Estructura
Simplificada, la cual además de facilitarnos la tarea, hace
que la estructura del programa sea compatible con los
lenguajes de alto nivel estándares.
Tal vez al presentar el método parezca en principio
un poco mas elaborado, que el anterior, pero una vez
dominándolo es más simple, sobre todo cuando se trabaja
con programas .EXE.
16.
17. En el esqueleto es necesario primero definir el
modelo de memoria a utilizar, de la misma forma que se
hace en los lenguajes de alto nivel; en este caso usamos
el modelo Small. Su definición se hace mediante la
directiva .MODEL (note que el punto es parte del nombre
del identificador).
El segmento de código (en este caso es el único),
se define mediante la directiva .CODE, se establece el
punto de entrada al código mediante la etiqueta inicio:,
la cual va también después del END final. El retorno al
DOS se hace mediante la misma función del DOS: 4Ch
18. Veamos el siguiente ejemplo el programa
ENSA01A.ASM; en este programa usamos 2 nuevas
directivas:
TITLE Establece el nombre del programa al inicio de
cada hoja en el archivo .LST.
COMMENT Nos permite escribir comentarios en
varios renglones, utilizando solo dos delimitadores
cualquiera, uno al inicio del comentario y el mismo al
final.