Anda di halaman 1dari 31

SEMANA 3

Introduccin al Lenguaje
Ensamblador del 8086/8088
I107 - Arquitectura de Computadoras
Introduccin al Lenguaje
Ensamblador del 8086/8088

3.1 Sintaxis de una instruccin.

3.2 Escritura de programas tipo EXE y
COM.
Sintaxis de una instruccin
Una instruccin en lenguaje
ensamblador consta de los siguientes
cuatro campos:

[etiqueta:] menmnico [operandos] [;comentarios]

Los corchetes indican que el campo es
opcional.

Sintaxis de una instruccin
El campo etiqueta permite referirse a
una lnea de cdigo por su nombre.
Este campo no puede exceder de los
31 caracteres.
Las etiquetas de directivas no
necesitan terminar con dos puntos. Las
instrucciones s.
Sintaxis de una instruccin
Los campos mnemnico (instruccin)
y operandos del lenguaje
ensamblador se refieren a trabajo real
que ejecutar el programa.
Ejemplos de instrucciones:
ADD AL, BL
MOV AX, 6764
ADD y MOV son mnemnicos de
cdigos de operacin (opcode) y AL,
BL y AX, 6764 son los operandos.
Sintaxis de una instruccin
En lugar de los mnemnicos y operandos
estos campos podran contener pseudo
instrucciones de ensamblador, o directivas.
Ests son usadas por el ensamblador para
organizar el programa.
Las directivas no generan cdigo de
mquina y son usadas slo por el
ensamblador.
Ejemplos de directivas:
SEGMENT, DB, ENDS, ASSUME, END,
ENDP, etc..
Sintaxis de una instruccin
El campo de comentario empieza con un
punto y coma.
Los comentarios pueden incluirse al final de
una lnea o pueden constituir toda una
lnea del programa.
El ensamblador ignora los comentarios,
pero ellos son indispensables para los
programadores.
Aunque los comentarios son opcionales, es
recomendable usarlos para describir el
programa, para hacerlos ms fcil de leer y
entender por cualquier persona.
Segmentos de un programa
Aunque es posible escribir un
programa en lenguaje ensamblador
que use un solo segmento,
normalmente un programa est
conformado por al menos tres
segmentos:
el segmento de pila,
el segmento de datos, y
el segmento de cdigo.
Segmentos de un programa
Se usan las directivas SEGMENT y ENDS
para indicar al ensamblador el inicio y fin
de un segmento.

Formato de un segmento:

Etiqueta SEGMENT [opciones]
;colocar en este lugar las
;sentencias que pertenecen
;a este segmento
Etiqueta ENDS
Segmentos de un programa
La etiqueta, o nombre, debe seguir la
convencin de nombres y debe ser nica.
El campo de opciones brinda informacin
importante para el ensamblador sobre la
organizacin del segmento, pero es
opcional.
La etiqueta de ENDS debe ser la misma de
SEGMENT.
Las sentencias del lenguaje ensamblador
son agrupadas dentro de segmentos para
que sean reconocidas por el ensamblador y
consecuentemente por el CPU.
Segmentos de un programa
El segmento de pila define el espacio
de almacenamiento para la pila.
El segmento de datos define los datos
que el programa usar.
El segmento de cdigo contiene las
instrucciones del lenguaje
ensamblador.
Segmentos de un programa
;Formato de un programa en Lenguaje Ensamblador
;---------------------
PILA SEGMENT STACK
DB 64 DUP (?)
PILA ENDS
;----------------------
DATOS SEGMENT
DATO1 DB 52H
DATO2 DB 29H
SUMA DB ?
DATOS ENDS
;----------------------
CODIGO SEGMENT
INICIO PROC FAR ;ste es el punto de entrada del programa
ASSUME CS: CODIGO, DS: DATOS, SS: PILA
MOV AX, DATOS ;carga la direccin del segmento de datos
MOV DS, AX ;asigna el valor a DS
MOV AL, DATO1 ;carga el primer operando
MOV BL, DATO2 ;carga el segundo operando
ADD AL, BL ;suma los operandos
MOV SUMA, AL ;almacena resultado
MOV AH, 4CH ;prepara retorno
INT 21H ;a DOS
INICIO ENDP
CODIGO ENDS
;----------------------
END INICIO ;ste el punto de salida del programa
Segmentos de un programa
;Formato de un programa en Lenguaje Ensamblador
;---------------------
PILA SEGMENT STACK
DB 64 DUP (?)
PILA ENDS
;----------------------
DATOS SEGMENT
DATO1 DB 52H
DATO2 DB 29H
SUMA DB ?
DATOS ENDS
;----------------------
Reserva 64
bytes de
memoria
para la pila
La directiva DB es
usada por el
ensamblador para
asignar memoria
en bloques del
tamao de un byte
Segmentos de un programa
;----------------------
CODIGO SEGMENT
INICIO PROC FAR ;punto de entrada del programa
ASSUME CS: CODIGO, DS: DATOS, SS: PILA
MOV AX, DATOS ;carga la direccin del seg. de datos
MOV DS, AX ;asigna el valor a DS
MOV AL, DATO1 ;carga el primer operando
MOV BL, DATO2 ;carga el segundo operando
ADD AL, BL ;suma los operandos
MOV SUMA, AL ;almacena resultado
MOV AH, 4CH ;prepara retorno
INT 21H ;a DOS
INICIO ENDP
CODIGO ENDS
;----------------------
END INICIO ;punto de salida del programa
Se define el
inicio del
procedimiento
INICIO.
Se asocia los
registros de
segmento con
las etiquetas de
los segmentos
respectivos.
Se inicializa
DS. El SO
se encarga
de CS y SS.
Se suman
los valores
de DATO1
y DATO2 y
el resultado
se
almacena
en SUMA
Segmentos de un programa
Un procedimiento es un conjunto de
instrucciones diseadas para llevar a cabo
una funcin especfica.
Un segmento de cdigo puede constar de
slo un procedimiento, pero usualmente es
organizado en varios procedimientos
pequeos para hacer que el programa sea
ms estructurado.
Cada procedimiento debe tener un nombre
definido por la directiva PROC, seguido por
instrucciones en lenguaje ensamblador y
debe ser finalizado por la directiva ENDP
(que debe tener la misma etiqueta usada
para nombrar al procedimiento).
Segmentos de un programa
La directiva PROC puede tener las
opciones FAR o NEAR.
El sistema operativo que controla el
computador debe ser dirigido al inicio
del programa para ejecutarlo.
DOS requiere que el punto de entrada
al programa sea un procedimiento
FAR.
NEAR es la opcin por defecto.
Segmentos de un programa
La directiva ASSUME asocia los registros de
segmentos con las etiquetas de los segmentos
respectivos: Se asumir que los registros de
segmentos son iguales a las etiquetas de los
segmentos usadas en el programa.
Si un segmento extra es usado, tambin deber
incluirse en la sentencia ASSUME.
La directiva ASSUME es necesaria porque un
programa en lenguaje ensamblador podra tener
varios segmentos de cdigo, uno o ms
segmentos de datos y ms de un segmento de
pila, pero slo uno de cada uno podr ser
direccionado por el CPU a un tiempo (el CPU slo
tiene un CS, un DS, un SS y un ES).
Segmentos de un programa
La directiva ASSUME tambin ayuda
al ensamblador a calcular los
desplazamientos (offsets)
direccionados desde el inicio del
segmento.
Por ejemplo en MOV AL,[BX] el BX
es el offset del segmento de datos. Es
necesario pues que el ensamblador
identifique cual ser el segmento de
datos a usar cuando existe ms de
uno.
Segmentos de un programa
Recordar que ASSUME es una directiva
para el ensamblador y que para ejecutar
un programa se deben proporcionar los
valores de CS, DS y SS que le
corresponden a dicho programa.
El sistema operativo debe pasar el control
al programa para que ste pueda
ejecutarse, por lo que asigna los valores de
CS y SS respectivos. El valor del registro
DS (y ES) debe ser inicializado por el
programa.
Segmentos de un programa
El propsito de:
MOV AH, 4CH
INT 21H
es retornar el control al sistema
operativo.

Plantilla de un programa
;Formato de un programa en Lenguaje Ensamblador
;---------------------
PILA SEGMENT STACK
DB 64 DUP (?)
PILA ENDS
;----------------------
DATOS SEGMENT
;
;Definir datos aqu
;
DATOS ENDS
;----------------------
CODIGO SEGMENT
INICIO PROC FAR ;ste es el punto de entrada del programa
ASSUME CS: CODIGO, DS: DATOS, SS: PILA
MOV AX, DATOS ;carga la direccin del segmento de datos
MOV DS, AX ;asigna el valor a DS
;
;Ubicar cdigo aqu
;
MOV AH, 4CH ;prepara retorno
INT 21H ;a DOS
INICIO ENDP
CODIGO ENDS
;----------------------
END INICIO ;ste el punto de salida del programa
Ensamblar, Enlazar y Ejecutar
un programa
Paso Entrada Aplicacin Salida
Editar el
programa
Teclado Editor de
texto
MiProg.asm
Ensamblar
el programa
MiProg.asm TASM.EXE MiProg.obj
Enlazar
(link) el
programa

MiProg.obj

TLINK.EXE

MiProg.exe
Ejemplo de un programa con
subrutinas
CODIGO SEGMENT
;----------------------
INICIO PROC FAR ;ste es el punto de entrada del programa
ASSUME CS: CODIGO, DS: DATOS, SS: PILA
MOV AX, DATOS ;carga la direccin del segmento de datos
MOV DS, AX ;asigna el valor a DS
CALL SUBR1
CALL SUBR2
CALL SUBR3
MOV AH, 4CH ;prepara retorno
INT 21H ;a DOS
INICIO ENDP
;----------------------
SUBR1 PROC

SUBR1 ENDP
;----------------------
SUBR2 PROC

SUBR2 ENDP
;----------------------
SUBR3 PROC

SUBR3 ENDP
;----------------------
CODIGO ENDS
END INICIO ;ste el punto de salida del programa
Modelo de memoria
SMALL MODEL
Este es uno de los ms ampliamente
usados modelos de memoria para los
programas en lenguaje ensamblador.
Este modelo usa un mximo de 64K
bytes de memoria para cdigo y otros
64K bytes para datos.
Modelo de memoria
MEDIUM MODEL
En este modelo los datos tambin
deben mantenerse dentro de 64K
bytes pero el cdigo podra superar
los 64K bytes de memoria.

COMPACT MODEL
Es el opuesto al COMPACT MODEL.
Los datos pueden exceder los 64K
bytes de memoria, el cdigo no.
Modelo de memoria
LARGE MODEL
Combina los dos modelos anteriores
(ambos segmentos pueden superar
los 64K bytes de memoria).
Aunque los datos pueden superar los
64K bytes, ningn conjunto de datos
(tal como un arreglo) debe superar
los 64K bytes.
Modelo de memoria
HUGE MODEL
Ambos segmentos pueden superar los
64K bytes de memoria.
Un conjunto de datos (tal como un
arreglo) puede superar los 64K bytes.
Modelo de memoria
TINY MODEL
Es usado con archivos del tipo COM.
El total de la memoria usada para
cdigo y datos deben mantenerse
dentro de 64K bytes.

Archivos EXE vs Archivos COM
Por qu un archivo COM?
Hay ocasiones donde, debido a
limitaciones de memoria, se requiere
tener un cdigo compacto.
El hecho que un archivo EXE pueda
tener cualquier tamao es una de las
razones para que estos archivos sean
usados ampliamente.
Archivos EXE vs Archivos COM
Archivo EXE Archivo COM
Tamao ilimitado Mximo tamao 64K bytes.
El segmento de pila est
definido
No hay definicin del
segmento de pila
El segmento de datos est
definido
EL segmento de datos est
definido en el segmento de
cdigo
El cdigo y los datos
pueden ser definidos en
cualquier direccin
El cdigo y el segmento
deben empezar en la
direccin 0100H
Archivo ms grande
(requiere ms memoria)
Archivos ms pequeo
(requiere menos memoria)
Fin
Ing. Luis Raymi Romn

Anda mungkin juga menyukai