Вы находитесь на странице: 1из 34

7 de Abril de 2014

INSTITUTO TECNOLOGICO DE
CHILPANCINGO
Ingeniera en Sistemas
Computacionales
INVESTIGACIN:
U1: Introduccin al Lenguaje Ensamblador
U2: Programacin bsica


D O C E N T E:
Rogelio Fernando Hernndez Miranda

P R E S E N T A
scar Gutirrez Daz



1 INTRODUCCION AL LENGUAJE ENSAMBLADOR

1.1 Importancia de la programacin en Lenguaje
Ensamblador

Definicin: El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado
para escribir programas informticos, y constituye la representacin ms directa
del cdigo mquina especfico para cada arquitectura de microprocesador.

La importancia del lenguaje ensamblador es principalmente que se trabaja
directamente con el microprocesador; por lo cual se debe de conocer el
funcionamiento interno de este, tiene la ventaja de que en l se puede realizar
cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden
realizar. Otro punto sera que los programas en ensamblador ocupan menos
espacio en memoria.

Ventajas y desventajas del Lenguaje Ensamblador

Ventajas

- Como trabaja directamente con el microprocesador al ejecutar un programa,
pues como este lenguaje es el ms cercano a la mquina la computadora lo
procesa ms rpido.

- Eficiencia de tamao.- Un programa en ensamblador no ocupa mucho
espacio en memoria porque no tiene que cargan libreras y dems como son
los lenguajes de alto nivel.

- Flexibilidad.- En lenguaje ensamblador se pueden hacer tareas especficas
que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen
ciertas limitantes que no se lo permite.


1.2 El Procesador y sus Registros Internos.

El procesador es un elemento importante del hardware de la PC. Es la unidad del
sistema, que contiene una tarjeta de sistema, fuente de poder y ranuras de
expansin para tarjetas opcionales. Los elementos de la tarjeta de sistema son un
microprocesador, memoria de solo lectura (ROM) y memoria de acceso aleatorio
(RAM).




REGISTROS INTERNOS DEL PROCESADOR.

Los registros del procesador se emplean para controlar instrucciones en ejecucin,
manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los
registros son direccionables por medio de un nombre. Los bits por convencin, se
numeran de derecha a izquierda, como en:

... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Registros de segmento.

Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria
para direccionamiento conocida como el segmento actual.

Registro CS. El DOS almacena la direccin inicial del segmento de cdigo de un
programa en el registro CS. Esta direccin de segmento, ms un valor de
desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de
una instruccin que es buscada para su ejecucin.

Registro DS. La direccin inicial de un segmento de datos de programa es
almacenada en el registro DS. En trminos sencillos, esta direccin, ms un valor
de desplazamiento en una instruccin, genera una referencia a la localidad de un
byte especifico en el segmento de datos.

Registro SS. El registro SS permite la colocacin en memoria de una pila, para
almacenamiento temporal de direcciones y datos. El DOS almacena la direccin
de inicio del segmento de pila de un programa en el registro SS. Esta direccin de
segmento, ms un valor de desplazamiento en el registro del apuntador de pila
(SP), indica la palabra actual en la pila que est siendo direccionada.

Registros ES. Algunas operaciones con cadenas de caracteres (datos de
caracteres) utilizan el registro extra de segmento para manejar el direccionamiento
de memoria. En este contexto, el registro ES est asociado con el registro DI
(ndice). Un programa que requiere el uso del registro ES puede inicializarlo con
una direccin de segmento apropiada.

Registros FS y GS. Son registros extra de segmento en los procesadores 80386
y posteriores.

Registros de propsito general.

Son nicos en el sentido de que se puede direccionarlos como una palabra o
como una parte de un byte. El ltimo byte de la izquierda es la parte "alta", y el
ltimo byte de la derecha es la parte "baja". Por ejemplo, el registro CX consta de
una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte
por su nombre.
Registro AX. El registro AX, el acumulador principal, es utilizado para operaciones
que implican entrada/salida y la mayor parte de la aritmtica. Por ejemplo, las
instrucciones para multiplicar, dividir y traducir suponen el uso del AX. Tambin,
algunas operaciones generan cdigo ms eficiente si se refieren al AX en lugar de
a los otros registros.




Registro BX. El BX es conocido como el registro base ya que es el nico registro
de propsito general que puede ser ndice para direccionamiento indexado.
Tambin es comn emplear el BX para clculos.




Registro DX. El DX es conocido como el registro de datos. Algunas operaciones
de entrada/salida requieren uso, y las operaciones de multiplicacin y divisin con
cifras grandes suponen al DX y al AX trabajando juntos.



Registro de Apuntador de Instrucciones.

El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento
de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el
registro CS en el sentido de que el IP indica la instruccin actual dentro del
segmento de cdigo que se est ejecutando actualmente. Los procesadores
80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP.


Registros Apuntadores.

Los registros SP (apuntador de la pila) Y BP (apuntador de base) estn asociados
con el registro SS y permiten al sistema accesar datos en el segmento de la pila.

Registro SP. El apuntador de la pila de 16 bits est asociado con el registro SS y
proporciona un valor de desplazamiento que se refiere a la palabra actual que est
siendo procesada en la pila. El sistema maneja de forma automtica estos
registros.

Registro BP. El BP de 16 bits facilita la referencia de parmetros, los cuales son
datos y direcciones transmitidos va pila.

Registros ndice.

Los registros SI y DI estn disponibles para direccionamiento indexado y para
sumas y restas.

Registro SI. El registro ndice fuente de 16 bits es requerido por algunas
operaciones con cadenas (de caracteres). En este contexto, el SI est asociado
con el registro DS.

Registro DI. El registro ndice destino tambin es requerido por algunas
operaciones con cadenas de caracteres. En este contexto, el DI est asociado con
el registro ES.

Registro de Banderas.

Sirven para indicar el estado actual de la mquina y el resultado del
procesamiento. Muchas instrucciones que piden comparaciones y aritmtica
cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar
pruebas para determinar la accin subsecuente:

o OF (Overflow, desbordamiento). Indica desbordamiento de un bit de
orden alto (mas a la izquierda) despus de una operacin aritmtica.
o DF (direccin). Designa la direccin hacia la izquierda o hacia la
derecha para mover o comparar cadenas de caracteres.
o IF (interrupcin). Indica que una interrupcin externa, como la entrada
desde el teclado, sea procesada o ignorada.
o TF (trampa). Permite la operacin del procesador en modo de un paso.
Los programas depuradores, como el DEBUG, activan esta bandera de
manera que usted pueda avanzar en la ejecucin de una sola
instruccin a un tiempo, para examinar el efecto de esa instruccin
sobre los registros de memoria.
o SF (signo). Contiene el signo resultante de una operacin aritmtica (0
= positivo y 1 = negativo).
o ZF (cero). Indica el resultado de una operacin aritmtica o de
comparacin (0 = resultado diferente de cero y 1 = resultado igual a
cero).
o AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato
de 8 bits para aritmtica especializada.
o PF (paridad). Indica paridad par o impar de una operacin en datos de 8
bits de bajo orden (mas a la derecha).
o CF (acarreo). Contiene el acarreo de orden ms alto (ms a la
izquierda) despus de una operacin aritmtica; tambin lleva el
contenido del ltimo bit en una operacin de corrimiento o de rotacin.

Las banderas estn en el registro de banderas en las siguientes posiciones:



1.3 La memoria principal (RAM)

RAM es el acrnimo ingls de Random Access Memory (memoria de acceso
aleatorio). Se trata de una memoria de semiconductor en la que se puede tanto
leer como escribir informacin. Es una memoria voltil, es decir, pierde su
contenido al desconectar la energa elctrica. Se utiliza normalmente como
memoria temporal para almacenar resultados intermedios y datos similares no
permanentes.
En estas memorias se accede a cada celda (generalmente se direcciona a nivel de
bytes) mediante un cableado interno, es decir, cada byte tiene un camino prefijado
para entrar y salir, a diferencia de otros tipos de almacenamiento, en las que hay
una cabeza lectograbadora que tiene que ubicarse en la posicin deseada antes
de leer el dato deseado.
Se dicen "de acceso aleatorio" porque los diferentes accesos son independientes
entre s. Por ejemplo, si un disco rgido debe hacer dos accesos consecutivos a
sectores alejados fsicamente entre s, se pierde un tiempo en mover la cabeza
hasta la pista deseada (o esperar que el sector pase por debajo, si ambos estn
en la misma pista), tiempo que no se pierde en la RAM.
Las RAM se dividen en estticas y dinmicas. Una memoria RAM esttica
mantiene su contenido inalterado mientras est alimentada. La informacin
contenida en una memoria RAM dinmica se degrada con el tiempo, llegando sta
a desaparecer, a pesar de estar alimentada. Para evitarlo hay que restaurar la
informacin contenida en sus celdas a intervalos regulares, operacin denominada
refresco.
Las memorias se agrupan en mdulos, que se conectan a la placa base del
computador. Segn los tipos de conectores que lleven los mdulos, se clasifican
en Mdulos SIMM (Single In-line Memory Module), con 30 o 72 contactos,
mdulos DIMM (Dual In-line Memory Module), con 168 contactos y mdulos RIMM
(RAMBUS In-line Memory Module) con 184 contactos.

1.4 Concepto De Interrupcin.
Un procesador no puede procesar simultneamente varios trozos de informacin
(procesa un trozo de informacin a la vez), un programa que est siendo
ejecutado puede, gracias al pedido de interrupcin, ser momentneamente
suspendido mientras se produce una interrupcin. El programa interrumpido puede
continuar ejecutndose luego. Existen 256 direcciones de interrupcin diferentes.
Una interrupcin se convierte en una interrupcin de hardware cuando es
solicitada por uno de los componentes de hardware del equipo. En efecto, existen
varios perifricos en un equipo. Estos perifricos necesitan generalmente utilizar
los recursos del sistema aunque slo sea para comunicarse con el sistema mismo.
Cuando un perifrico desea acceder a un recurso, enva un pedido de interrupcin
al procesador para llamar su atencin. Los perifricos cuentan con un nmero de
interrupcin que se denomina IRQ (Peticiones de Interrupcin. Es como si cada
perifrico tirara de un "hilo" que est atado a una campana para sealarle al
equipo que desea que le preste atencin.
Este "hilo" es, de hecho, una lnea fsica que conecta cada ranura de expansin
as como cada interfaz E/S a la placa madre. Para una ranura ISA de 8 bits, por
ejemplo, hay 8 lneas IRQ que unen ranuras ISA de 8 bits a la placa madre (IRQ0
a IRQ7). Estos IRQ estn controlados por un "controlador de interrupcin" que se
encarga de cederle la palabra al IRQ que posee la mayor prioridad.
Al aparecer las ranuras de 16 bits, se agregaron IRQ 8 a 15. En consecuencia, fue
necesario agregar un segundo controlador de interrupcin. Los dos grupos de
interrupciones estn unidos por IRQ 2 el cual se conecta (o "produce una
cascada") a IRQ 9. En cierto modo, esta cascada "inserta" IRQ 8 a 15 entre IRQ1
y 3:

Dado que la prioridad va del IRQ inferior al superior y que se insertan IRQ 8 a 15 entre
IRQ 1 y 3, el orden de prioridad es el siguiente:

0 > 1 > 8 > 9 > 10 > 11 > 12 > 13 > 14 > 15 > 3 > 4 > 5 > 6 > 7

1.5 Llamadas A Servicios Del Sistema.
Las llamadas al sistema comnmente usan una instruccin especial de la CPU
que causa que el procesador transfiera el control a un cdigo privilegiado.
Previamente especificado por el mismo cdigo. Esto permite al cdigo privilegiado
especificar donde va a ser conectado as como el estado del procesador.
Cuando una llamada al sistema es invocada, la ejecucin del programa que invoca
es interrumpida y sus datos son guardados, normalmente en su PCB (Bloque de
Control de Proceso del ingls Process Control Block), para poder continuar
ejecutndose luego. El procesador entonces comienza a ejecutar las instrucciones
de cdigo de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta
finaliza, se retorna al proceso original, y contina su ejecucin. El retorno al
proceso demandante no obligatoriamente es inmediato, depende del tiempo de
ejecucin de la llamada al sistema y del algoritmo de planificacin de CPU.
Las llamadas son peticiones a ejecucin de rutinas y proporcionan la interfaz entre
el sistema operativo y un programa en ejecucin. Estas llamadas son
instrucciones de lenguaje ensamblador y se presentan en los manuales que
emplean los programadores de este lenguaje. Las llamadas al sistema para
ejecucin y el control de programas, usualmente incluyen un conjunto completo de
los servicios accesibles por la va del lenguaje de rdenes, tales como: RUN,
EXECUTE, ABORT y planificacin relacionada con el tiempo, adems los usuarios
con las llamadas del sistema pueden suspender, establecer o cambiar atributos
del tiempo de ejecucin de uno o ms programas.
Las llamadas del sistema para el gestor de recursos, proporcionan servicios para
la asignacin, reserva y reclamacin de los recursos del sistema. Por ejemplo,
existen llamadas del sistema para extender o reducir la cantidad de memoria
poseda por el programa que se llama. Las llamadas del sistema pueden asignar o
reservar otros tipos de objetos del sistema y despus destruir o devolver su
custodia al sistema operativo.
Las llamadas al sistema se pueden agrupar en cinco categoras:
1. Control de proceso (Crear, cargar, ejecutar un proceso, obtener y
establecer atributos, esperar un suceso, liberar memoria, abortar y terminar
proceso).
2. Manipulacin de archivos (Crear, abrir, leer, obtener y establecer
atributos, cerrar y eliminar archivos).
3. Manipulacin de perifricos (Solicitar, escribir, leer, obtener y establecer
atributos, liberar perifrico).
4. Manipulacin de la informacin (Obtener fecha y hora, establecer fecha y
hora, obtener y establecer datos del sistema, obtener y establecer
atributos).
5. Comunicaciones (Crear conexin, enviar mensajes, recibir mensajes,
transferir informacin del estado y eliminar conexin.

1.6 Modos De Direccionamiento.

Los llamados modos de direccionamiento son las diferentes maneras de
especificar en informtica un operando dentro de una instruccin en lenguaje
ensamblador.

Un modo de direccionamiento especifica la forma de calcular la direccin de
memoria efectiva de un operando mediante el uso de la informacin contenida en
registros y / o constantes, contenida dentro de una instruccin de la mquina o en
otra parte.
Las operaciones se hacen entre registros o registros y memoria, pero nunca entre
memoria y memoria (salvo algunas operaciones con cadenas de caracteres). Los
modos de direccionamiento determinan el lugar en que reside un operando, un
resultado o la siguiente instruccin a ejecutar segn el caso.
Tenga en cuenta que no existe una forma generalmente aceptada de nombrar a
los distintos modos de direccionamiento. En particular, los distintos autores y
fabricantes de equipos pueden dar nombres diferentes para el modo de hacer
frente al mismo, o los mismos nombres, a los diferentes modos de
direccionamiento
Direccionamiento Inmediato.
En este modo el operando es especificado en la instruccin misma. En otras
palabras, una instruccin de modo inmediato tiene un campo de operando en vez
de un campo de direccin. El campo del operando contiene el operando actual que
se debe utilizar en conjunto con la operacin especificada en la instruccin. Las
instrucciones de modo inmediato son tiles para inicializar los registros en un valor
constante.
Cuando el campo de direccin especifica un registro del procesador, la instruccin
se dice que est en el modo de registro.

Direccionamiento Directo.
Es directo cuando la instruccin contiene el lugar donde se encuentra el operando.
Segn el lugar donde se encuentra el operando puede ser:
Direccionamiento directo a registro.
Direccionamiento directo a memoria
Direccin completa (p. ej. Z80 sobre 64 Kb con 16 bits)
Direccin sobre una pgina del mapa de memoria; tambin se conoce como
direccionamiento de pgina base.


Direccionamiento Relativo.
La instruccin indica el desplazamiento del operando con respecto a un puntero:
La direccin efectiva es calculada por la unidad de control sumando, o restando, el
desplazamiento al puntero de referencia que suele estar en un registro.
Dependiendo del puntero se tienen diferentes modos de direccionamiento.
Direccin efectiva = Reg. Referencia + desplazamiento.
Modo de direccionamiento / Registro de referencia / Clculo direccin efectiva:
Relativo a contador de programa Contador de programa (CP) DE = CP +
desplazamiento.
Relativo a registro base Un registro base (R B) DE = RB + desplazamiento.
Relativo a registro ndice Un registro ndice (R I) DE = RI + desplazamiento.
Relativo a pila Registro de pila (SP) DE = SP + desplazamiento.

Ventajas
Las instrucciones son ms compactas.
El cdigo puede cambiar de lugar en el mapa de memoria con cambiar el
valor del puntero.
Gran facilidad de manejo de estructuras de datos.
Inconvenientes
Se requiere una operacin adicional para el clculo de la direccin del
operando.

Direccionamiento Indirecto.
La posicin indicada por la instruccin no es el operando sino la direccin de
memoria en la que se encuentra, por lo que se necesita un acceso adicional a
memoria.
La direccin de memoria se puede dar mediante:
Direccionamiento directo a memoria.
Direccionamiento relativo
Es posible que se realicen mltiples niveles de indireccin.
Su utilidad ms comn es la de acceso a diversas informaciones mediante
tablas de punteros.


Direccionamiento Implcito.
En este modo de direccionamiento no es necesario poner ninguna direccin de
forma explcita, ya que en el propio cdigo de operacin se conoce la direccin del
(de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere
operar. Requiere que el programador conozca con que operandos se est
trabajando.


Direccionamiento de Registro.
Sirve para especificar operandos que estn en registros.


Direccionamiento Indirecto por Registro.
En este modo el campo de la direccin de la instruccin da la direccin en donde
la direccin efectiva se almacena en la memoria. de nuevo para leer una direccin
efectiva. Unos pocos modos de direccionamiento requieren que el campo de
direccin de la instruccin sea sumado al control de un registro especificado en el
procesador. La direccin efectiva en este modo se obtiene del siguiente clculo:
Dir. Efectiva = Dir. de la parte de la instruccin + Contenido del registro del
procesador.


1.7 Proceso de ensamblado y ligado
Para poder crear un programa se requieren varias herramientas: Primero un editor
para crear el programa fuente. Segundo un compilador que no es ms que un
programa que "traduce" el programa fuente a un programa objeto. Y tercero un
enlazador o linker, que genere el programa ejecutable a partir del programa objeto.
El editor puede ser cualquier editor de textos que se tenga a la mano, como
compilador utilizaremos el MASM (macro ensamblador de Microsoft) ya que es el
ms comn, y como enlazador utilizaremos el programa link.
La extensin usada para que MASM reconozca los programas fuente en
ensamblador es .ASM; una vez traducido el programa fuente, el MASM crea un
archivo con la extensin .OBJ, este archivo contiene un "formato intermedio" del
programa, llamado as porque an no es ejecutable pero tampoco es ya un
programa en lenguaje fuente. El enlazador genera, a partir de un archivo .OBJ o la
combinacin de varios de estos archivos, un programa ejecutable, cuya extensin
es usualmente .EXE aunque tambin puede ser .COM, dependiendo de la forma
en que se ensambl.


1.8 Desplegado de mensajes en el monitor
Para poder desplegar mensajes en lenguaje ensamblador primero debemos
conocer la estructura del programa en ensamblador.
Comentarios En Lenguaje Ensamblador.
El uso de comentarios a lo largo de un programa puede mejorar su claridad, en
especial en lenguaje ensamblador, donde el propsito de un conjunto de
instrucciones con frecuencia no es claro. Un comentario empieza con punto y
coma (;) y, en donde quiera que lo codifique, el ensamblador supone que todos los
caracteres a la derecha de esa lnea son comentarios. Un comentario puede
contener cualquier carcter imprimible, incluyendo el espacio en blanco.
Un comentario puede aparecer solo en una lnea o a continuacin de una
instruccin en la misma lnea, como lo muestran los dos ejemplos siguientes:
Toda esta lnea es un comentario.
ADD AX, BX; Comentario en la misma lnea que la instruccin.
Ya que un comentario aparece solo en un listado de un programa fuente en
ensamblador y no genera cdigo de mquina, puede incluir cualquier cantidad de
comentarios sin afectar el tamao o la ejecucin del programa ensamblado. Otra
manera de proporcionar comentarios es por medio de la directiva COMMENT.
Palabras Reservadas
Ciertas palabras en lenguaje ensamblador estn reservadas para sus propsitos
propios, y son usadas solo bajo condiciones especiales. Por categoras, las
palabras reservadas incluyen:
Instrucciones, como MOV y ADD, que son operaciones que la computadora
puede ejecutar.
Directivas como END o SEGMENT, que se emplean para proporcionar
comandos al ensamblador.
Operadores, como FAR y SIZE, que se utilizan en expresiones.
Smbolos predefinidos, como @Data y @Model, que regresan informacin a
su programa.

Identificadores.
Un identificador es un nombre que se aplica a elementos en el programa. Los dos
tipos de identificadores son: nombre, que se refiere a la direccin de un elemento
de dato y etiqueta, que se refiere a la direccin de una instruccin. Un identificador
puede usar los siguientes caracteres:
1. Letras del alfabeto: Desde la A hasta la Z(maysculas o minsculas).
2. Dgitos: Desde el 0 al 9 (no puede ser el primer carcter).
3. Caracteres especiales: Signo de interrogacin ( ? ) Subrayado ( _ ), Signo
de pesos ( $ ), Arroba ( @ ), Punto ( . ) (no puede ser el primer carcter)
El primer carcter de un identificador debe ser una letra o un carcter especial,
excepto punto. Ya que el ensamblador utiliza algunos smbolos especiales en
palabras que inician con el smbolo @, debe evitar usarlo en sus definiciones.
En consecuencia, en una instruccin tal como:
ADD AX, BX: El ensamblador sabe de forma automtica que AX y BX se
refieren a los registros. Sin embargo, en una instruccin como:
MOV REGSAVE, AX: El ensamblador puede reconocer el nombre
REGSAVE solo si se define en algn lugar del programa.
Identificador, operacin y operando pueden empezar en cualquier columna. Sin
embargo, si de manera consistente se inicia en la misma columna para estas tres
entradas se hace un programa ms legible.
IDENTIFICADOR: Como ya se explic, el termino nombre se aplica al
nombre de un elemento o directiva definida, mientras que el termino
etiqueta se aplica al nombre de una instruccin.
OPERACIN: La operacin, que debe ser codificada, es con mayor
frecuencia usada para la definicin de reas de datos y codificacin de
instrucciones. Para un elemento de datos, una operacin como DB o DW
define un campo, rea de trabajo o constante.
OPERANDO: El operando (si existe) proporciona informacin para la
operacin que acta sobre l. Para un elemento de datos, el operando
identifica su valor inicial. Por ejemplo, en la definicin siguiente de un
elemento de datos llamado COUNTER, la operacin DB significa "definir
byte", y el operando inicializa su contenido con un valor cero:

Para una instruccin, un operando indica en donde realizar la accin. Un operando
de una instruccin puede tener una, dos o tal vez ninguna entrada. Aqu estn tres
ejemplos:


Directivas Para Listar: Page Y Title.
La directiva PAGE y TITLE ayudan a controlar el formato de un listado de un
programa en ensamblador. Este es su nico fin, y no tienen efecto sobre la
ejecucin subsecuente del programa.
PAGE. Al inicio de un programa, la directiva PAGE designa el nmero mximo de
lneas para listar en una pgina y el nmero mximo de caracteres en una lnea.
Su formato general es:
PAGE [longitud][, ancho]
El ejemplo siguiente proporciona 60 lneas por pgina y 132 caracteres por lnea:
PAGE 60, 132
El nmero de lneas por pgina puede variar desde 10 hasta 255, mientras que el
nmero de caracteres por lnea desde 60 hasta 132. La omisin de PAGE causa
que el ensamblador tome PAGE 50, 80.
TITLE. Se puede emplear la directiva TITLE para hacer que un ttulo para un
programa se imprima en la lnea 2 de cada pgina en el listado del programa.
Puede codificar TITLE de una vez, al inicio del programa. Su formato general es:
TITLE Texto.
Para el operando texto, una tcnica recomendada es utilizar el nombre del
programa como se registra en el disco. Por ejemplo:
TITLE Prog1 Mi primer programa en ensamblador

Directiva Segment.
Un programa ensamblado en formato .EXE consiste en uno o ms segmentos. Un
segmento de pila define el almacn de la pila, un segmento de datos define los
elementos de datos y un segmento de cdigo proporciona un cdigo ejecutable.
Las directivas para definir un segmento, SEGMENT y ENDS tienen el formato
siguiente:
El enunciado SEGMENT define el inicio de un segmento. El nombre del segmento
debe estar presente, ser nico y cumplir las convenciones para nombres del
lenguaje. EL enunciado ENDS indica el final del segmento y contiene el mismo
nombre del enunciado SEGMENT. El tamao mximo de un segmento es de 64K.
El operando de un enunciado SEGMENT puede tener tres tipos de opciones:
alineacin, combinar y clase, codificadas en este formato:
nombre SEGMENT alineacin combinar ' clase
TIPO ALINEACION. La entrada alineacin indica el lmite en el que inicia el
segmento. Para el requerimiento tpico, PARA, alinea el segmento con el lmite de
un prrafo, de manera que la direccin inicial es divisible entre 16, o 10H. En
ausencia de un operando hace que el ensamblador por omisin tome PARA.
TIPO COMBINAR. La entrada combinar indica si se combina el segmento con
otros segmentos cuando son enlazados despus de ensamblar. Los tipos de
combinar son STACK, COMMON, PUBLIC y la expresin AT. Por ejemplo, el
segmento de la pila por lo comn es definido como:
nombre SEGMENT PARA STACK
Puede utilizar PUBLIC y COMMON en donde tenga el propsito de combinar de
forma separada programas ensamblados cuando los enlaza. En otros casos,
donde un programa no es combinado con otros, puede omitir la opcin o codificar
NONE.
TIPO CLASE. La entrada clase, encerrada entre apstrofos, es utilizada para
agrupar segmentos cuando se enlazan. Se utiliza la clase 'code' para el segmento
de cdigos, 'data' por segmento de datos y 'stack' para el segmento de la pila. El
ejemplo siguiente define un segmento de pila con tipos alineacin, combinar y
clase:
nombre SEGMENT PARA STACK 'Stack'


Directiva Assume.
Un programa utiliza el registro SS para direccionar la pila, al registro DS para
direccionar el segmento de datos y el registro CS para direccionar el segmento de
cdigo. Para este fin, usted tiene que indicar al ensamblador el propsito de cada
segmento en el programa.
La directiva para este propsito es ASSEME, codificada en el segmento de cdigo
como sigue:
Operacin Operando.
ASSUME SS:nompila, DS:nomsegdatos, CS: nomsegcodigo,. . .
Los operandos pueden aparecer en cualquier orden. Al igual que otras directivas,
ASSUME es solo un mensaje que ayuda al ensamblador a convertir cdigo
simblico a cdigo maquina; an puede tener que codificar instrucciones que
fsicamente cargan direcciones en registros de segmentos en el momento de la
ejecucin.
PAGE 60,132
TITLE P04ASM1 ESTRUCTURA DE UN PROGRAMA .EXE
;-------------------------------------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
...
STACKSG ENDS
-------------------------------------------------------------------------------
DATASG SEGMENT PARA 'Data'
...
DATASG ENDS
;-------------------------------------------------------------------------------
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME SS:STACKSG, DS:DATASG,CS:CODESG
MOV AX, DATASG ;Obtiene la direccin del segmento de datos
MOV DS, AX ;Almacena direccin en DS
...
MOV AX, 4C00H ;Peticion
INT 21H ;Salida al DOS
BEGIN ENDP
CODESG ENDS
END BEGIN
Directivas Simplificadas De Segmentos
Los ensambladores de Microsoft y de Borland proporcionan algunas formas
abreviadas para definir segmentos. Para usar estas abreviaturas, inicialice el
modelo de memoria antes de definir algn segmento. El formato general
(incluyendo el punto inicial) es:
.MODEL modelo de memoria
El modelo de memoria puede ser TINY, SMALL, MEDIUM, COMPACT o
LARGE. Los requisitos para cada modelo son:
Puede utilizar cualquiera de estos modelos para un programa autnomo (esto es,
un programa que no est enlazado con algn otro). El modelo TINY est destinado
para uso exclusivo de programas .COM, los cuales tienen sus datos, cdigo y pila
en un segmento.
El modelo SMALL exige que el cdigo quepa en un segmento de 64K y los datos
en otro segmento de 64K. La directiva .MODELL genera automticamente el
enunciado ASSUME necesario.
Los formatos generales (incluyendo el punto inicial) para las directivas que define
los segmentos de la pila, de datos y de cdigo son:
.STACK [tamao]
.DATA
.CODE [nombre]
Cada una de estas directivas hace que el ensamblador genere el enunciado
SEGMENT necesario y su correspondiente ENDS. Los nombres por omisin de
los segmentos (que usted no tiene que definir) son STACK, DATA y TEXT (para el
segmento de cdigo).




2. PROGRAMACIN BSICA

2.1 Ensamblador (y ligador) a utilizar.

El lenguaje ensamblador, o assembler (assembly language en ingls), es un
lenguaje de programacin de bajo nivel para los computadores,
microprocesadores, micro controladores y otros circuitos integrados programables.
Implementa una representacin simblica de los cdigos de mquina binarios y
otras constantes necesarias para programar una arquitectura dada de CPU y
constituye la representacin ms directa del cdigo mquina especfico para cada
arquitectura legible por un programador.

Caractersticas
El cdigo escrito en lenguaje ensamblador posee una cierta dificultad de ser
entendido ya que su estructura se acerca al lenguaje mquina, es decir, es
un lenguaje de bajo nivel.
El lenguaje ensamblador es difcilmente portable, es decir, un cdigo escrito
para un microprocesador, puede necesitar ser modificado, para poder ser
usado en otra mquina distinta. Al cambiar a una mquina con arquitectura
diferente, generalmente es necesario reescribirlo completamente.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas
realizadas por un microprocesador por lo que se pueden crear segmentos
de cdigo difciles y/o muy ineficientes de programar en un lenguaje de alto
nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de
instrucciones del CPU que generalmente no estn disponibles en los
lenguajes de alto nivel.

2.2 Ciclos numricos
El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la
programacin de ciclos _nitos, la instruccin LOOP. Esta instruccin trabaja en
forma conjunta con el registro contador CX. El formato general de esta instruccin
es:
Mov CX,Numero_Veces
Etiqueta:
Instrucciones a realizar
Loop Etiqueta

La instruccin Loop ejecuta las instrucciones que se encuentran entre la Etiqueta:
y Loop Etiqueta el numero de veces que indique el campo No_Veces.
Por ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro AX,
esto lo repite 100 veces.
Mov CX,100 ;100 veces
repetir: Nombre de la etiqueta
Inc AX ;AX = AX + 1
Loop repetir Regresa a la etiqueta y compara el ciclo
La instruccin Loop decrementa el registro CX en cada iteracin y se detiene
cuando CX es igual a cero.

2.3 Captura bsica de cadenas
En el lenguaje ensamblador el tipo de dato cadena (string) no est definido, pero
para _nes de programacin, una cadena es definida como un conjunto de
localidades de memoria consecutivas que se reservan bajo el nombre de una
variable.
Instrucciones para el manejo de strings
Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco
instrucciones para el manejo de cadenas:
MOVS: Mueve un byte o palabra desde una localidad de memoria a otra.
LODS : Carga desde la memoria un byte en AL o una palabra en AX.
STOS : Almacena el contenido del registro AL o AX en la memoria.
CMPS : Compara localidades de memoria de un byte o palabra.
SCAS : Compara el contenido de AL o AX con el contenido de alguna
localidad de memoria.
Las instrucciones para cadenas trabajan en conjunto con la instruccin CLD, la
cual permite establecer que el sentido en el que las cadenas sern procesadas
ser de izquierda a derecha.
Otra instruccin importante es el pre_jo de repeticin REP, el cual permite que una
instruccin para manejo de cadenas pueda ser repetida un nmero determinado
de veces.
Los registros ndice juegan un papel importante en el procesamiento de cadenas
de datos, el par de registros CS:SI indican la direccin de la cadena original que
ser procesada, y el par ES:DI contienen la direccin donde las cadenas pueden
ser almacenadas.

2.4 Comparacin y prueba

Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST.
CMP (Comparar) compara si dos valores son iguales o diferentes. Su
funcionamiento es similar al de la instruccin SUB (restar), slo que no modifica el
operando de destino, solamente modi_ca las banderas de signo (SF), de cero (ZF)
y de acarreo (CF).
Por ejemplo:
CMP AX,33 Esta instruccin compara si el valor almacenado en el registro AX es
igual que el valor 33 en decimal.
Por otro lado, la instruccin TEST realiza la operacin AND de los operandos
especificados sin que el resultado se almacene en algn registro, modificando
nicamente ciertas banderas. Su aplicacin ms comn es la de probar si algn bit
es cero.
Por ejemplo:
Test AL,1 Esta instruccin prueba si el bit menos significativo de AL es 1 y
Test AL,128 prueba si el bit ms significativo de AL es 1.
Por lo general estas instrucciones van seguidas de alguna de las instrucciones de
salto.

2.5 Saltos
En los lenguajes de alto nivel como Pascal y C, los programadores pueden
controlar el flujo de los programas por medio de instrucciones condicionales
compuestas; por ejemplo, en Pascal el siguiente conjunto de instrucciones permite
tomar una decisin sobre el flujo del programa:
IFA = 5then
write(?Error...?);
else
A:=A+1;
En contraste, el lenguaje ensamblador no proporciona tales mecanismos. Este tipo
de decisiones se realizan por medio de una serie de instrucciones que van
teniendo un significado consecutivo; es decir, el efecto de la instruccin siguiente
depende del resultado anterior.
El lenguaje ensamblador proporciona un conjunto de instrucciones conocidas
como instrucciones de salto. Estas instrucciones son utilizadas en conjunto con
instrucciones de comparacin y prueba para determinar el flujo del programa.

2.6 Ciclos condicionales
Existen dos tipos de instrucciones de salto: las instrucciones de salto condicional y
las de salto incondicional.
Las instrucciones de salto condicional, revisan si ha ocurrido alguna situacin para
poder transferir el control del programa a otra seccin, por ejemplo:

CMP AX,0 JEotro
:::::::::::
:::::::::::
otro :
::::::::::
::::::::::
End

En este ejemplo, la instruccin JE (Salta si es igual) revisa si la prueba implcita en
la instruccin anterior result positiva, es decir, si la comparacin de AX con 0 fue
cierta. En caso de que AX sea igual a 0, JE trans_ere el control del programa a las
instrucciones que se encuentran despus de la etiqueta "otro". En caso contrario
ejecuta las instrucciones siguientes a JE.
La siguiente es una lista de las instrucciones de salto condicional y su descripcin:
JA o JNBE: Salta si est arriba o salta si no est por debajo o si no es igual (jump
if above or jump if not below or equal). El salto se efecta si la bandera de CF=0 o
si la bandera ZF=0.
JAE o JNB: Salta si est arriba o es igual o salta si no est por debajo (jump if
above or equal or jump if not below). El salto se efecta si CF=0.
JB o JNAE: Salta si est por debajo o salta si no est por arriba o es igual (jump if
below or jump if not above or equal). El salto se efecta si CF=1.
JBE o JNA: Salta si est por debajo o es igual o salta si no est por arriba (jump if
below or equal or jump if not above). El salto se efecta si CF=1 o ZF=1.
JE o JZ: Salta si es igual o salta si es cero (jump if equal or jump if zero). El salto
se efecta si ZF=1.
JNE o JNZ: Salta si no es igual o salta si no es cero (jump if not equal or jump if
not zero). El salto se efecta si ZF=0.
JG o JNLE: Salta si es mayor o salta si no es menor o igual (jump if greater or
jump if not less or equal). El salto se efecta si ZF=0 u OF=SF.
JGE o JNL: Salta si es mayor o igual o salta si no es menor (jump if greater or
equal or jump if not less). El salto se efecta si SF=OF.

2.7 Incremento y decremento
Las instrucciones INC y DEC permiten incrementar los contenidos de los registros.
Ejemplos:
INC AX ;AX=AX+1
INC VAR1 ;VAR1=VAR1+1
DEC AX ;AX=AX-1
DEC VAR1 ;VAR1=VAR1-1 y de las variables almacenadas en memoria.

2.8 Captura de cadenas con formato
Permiten el movimiento, comparacin o bsqueda rpida en bloques de datos:
MOVC transferir carcter de una cadena.
MOVW transferir palabra de una cadena.
CMPC comparar carcter de una cadena.
CMPW comparar palabra de una cadena.
SCAC buscar carcter de una cadena.
SCAW buscar palabra de una cadena.
LODC cargar carcter de una cadena.
LODW cargar palabra de una cadena.
STOC guardar carcter de una cadena.
STOW guardar palabra de una cadena.
REP repetir.
CLD poner a 0 el indicador de direccin.
STD poner a 1 el indicador de direccin.




2.9 Instrucciones aritmticas

Existen 8 instrucciones aritmticas bsicas: ADD (Suma), SUB (Resta), MUL
(Multiplicacin sin signo), DIV (Divisin sin signo), IMUL (Multiplicacin con signo),
IDIV (Divisin con signo), INC (Incremento unitario) y DEC (Decremento unitario).

Las instrucciones ADD y SUB permiten realizar sumas y restas sencillas y tienen
el siguiente formato:

ADD Destino, Fuente
SUB Destino, Fuente

Ejemplos:

ADD AX,BX ;AX=AX+BX
ADD AX,10 ;AX=AX+10
SUB AX,BX ;AX=AX-BX
SUB AX,10 ;AX=AX-10

En las operaciones de suma y resta el resultado siempre es almacenado en el
operando de destino, el cual puede ser un registro o una variable.


2.10 Manipulacin de la pila

La pila es un grupo de localidades de memoria que se reservan con la finalidad de
proporcionar un espacio para el almacenamiento temporal de informacin.

La pila de los programas es del tipo LIFO (Last In First Out, Ultimo en entrar,
Primero en salir).

Para controlar la pila el microprocesador cuenta con dos instrucciones bsicas:
- Push (Meter) y Pop (sacar).
- El formato de estas instrucciones es el siguiente:
- Push operando
- Pop operando

Cuando se ejecuta la instruccin Push, el contenido del operando se almacena en
la ltima posicin de la pila.

Por ejemplo:

Si AX se carga previamente con el valor 5, una instruccin Push AX almacenara
el valor 5 en la ltima posicin de la pila.

Por otro lado la instruccin Pop saca el ltimo dato almacenado en la pila y lo
coloca en el operando.

Siguiendo el ejemplo anterior, la instruccin Pop BX obtendra el nmero 5 y lo
almacenara en el registro BX.


2.11 Obtencin de cadena con representacin decimal

En las computadoras el formato natural para la aritmtica es el binario.

La representacin del nmero decimal 1; 527 en los tres formatos decimales:

- ASCII 31 35 32 37 (cuatro bytes).
- BCD desempaquetado 01 05 02 07 (cuatro bytes)
- BCD empaquetado 15 27 (dos bytes)

El procesador realiza aritmtica en valores ASCII y BCD un dgito a la vez.

Ya que los datos son ingresados desde un teclado significan que estn en formato
ASCII, la representacin en memoria de un nmero decimal ingresado tal como
1234 es 31323334H. Pero realizar aritmtica sobre tal nmero implica un
tratamiento especial. Las instrucciones AAA y AAS realizan aritmtica de manera
directa sobre nmeros ASCCI.


2.12 Instrucciones lgicas

Se cuenta con un grupo de instrucciones lgicas que operan a nivel de bit, estas
instrucciones son: AND, OR, XOR y NOT.

Las instrucciones que se enlistan antes requieren dos operandos, a excepcin de
la operacin NOT que slo requiere uno.

La operacin OR establece el resultado a 1 si cualquiera de los dos operandos es
1, de lo contrario el resultado ser 0.

La instruccin XOR coloca en 0 el resultado si los operandos son iguales, de lo
contrario establece 1.

Finalmente, la instruccin NOT cambia de estado todos los bits del operando, los
unos por ceros y los ceros por unos.

La principal aplicacin de estas instrucciones es el enmascaramiento de
informacin. La operacin AND nos permite poner a cero cualquier bit de un dato;
la operacin OR nos permite poner a uno cualquier bit de un dato y la operacin
XOR permite borrar el contenido de algn registro o localidad de memoria, as
como para negar algn bit.


2.13 Desplazamiento y rotacin

El microprocesador cuenta con un conjunto de instrucciones que permiten la
manipulacin de las posiciones individuales de los bits dentro de un registro o
localidad de memoria, estas instrucciones se encuentran divididas en dos grupos:
instrucciones de rotacin e instrucciones de desplazamiento (tambin conocidas
como instrucciones para corrimientos).

Las instrucciones para rotacin son cuatro y nos permiten mover de forma cclica
los bits que forman parte de un registro o localidad de memoria, estas
instrucciones son ROL, ROR, RCL, RCR.

ROL y ROR funcionan de forma muy semejante; al ejecutar una instruccin ROL,
el bit ms significativo del dato es desplazado hacia la bandera de acarreo y
tambin hacia la posicin del bit memos significativo, por lo cual todos los bits
restantes son rotados o movidos hacia la izquierda. La instruccin ROR funciona
igual, slo que sta trabaja hacia la derecha.

Las instrucciones RCL y RCR permiten la rotacin de los bits de una localidad de
memoria o registro, considerando tambin el contenido de la bandera de acarreo.
En el caso de RCL, el bit ms significativo pasa hacia la bandera de acarreo, el bit
que se encontraba en la bandera de acarreo pasa al bit menos significativo y
finalmente los bits restantes son rotados hacia la izquierda. La instruccin RCR
funciona igual, pero aplica su rotacin hacia la derecha.


2.14 Obtencin de una cadena con la representacin
hexadecimal.

Procesos de Control.

NOP (Operacin nula).

Sintaxis: NOP

Indicadores:


Realiza una operacin nula, es decir, el microprocesador decodifica la instruccin
y pasa a la siguiente. Realmente se trata de la instruccin XCHG AX,AX.
ESC (Salida a un coprocesador).

Sintaxis: ESC cdigo_operacin, origen

Indicadores:


Se utiliza en combinacin con procesadores externos, tales como los
procesadores de coma flotante o de E/S, y abre al dispositivo externo el acceso a
las direcciones y operandos requeridos. Al mnemnico ESC le siguen los cdigos
de operacin apropiados para el coprocesador as como la instruccin y la
direccin del operando necesario.

Ejemplo: ESC 21,AX

HLT (Parada hasta interrupcin o reset).

Sintaxis: HLT

Indicadores:



El procesador se detiene hasta que se restaura el sistema o se recibe una
interrupcin. Como en los PC se producen normalmente 18,2 interrupciones de
tipo 8 por segundo (del temporizador) algunos programadores utilizan HLT para
hacer pausas y bucles de retardo. Sin embargo, el mtodo no es preciso y puede
fallar con ciertos controladores de memoria.

LOCK (Bloquea los buses).

Sintaxis: LOCK

Indicadores:


Es una instruccin que se utiliza en aplicaciones de recursos compartidos para
asegurar que no accede simultneamente a la memoria ms de un procesador.
Cuando una instruccin va precedida por LOCK, el procesador bloquea
inmediatamente el bus, introduciendo una seal por la patilla LOCK.
WAIT (Espera).

Sintaxis: WAIT

Indicadores:



Provoca la espera del procesador hasta que se detecta una seal en la patilla
TEST. Ocurre, por ejemplo, cuando el coprocesador ha terminado una operacin e
indica su finalizacin. Suele preceder a ESC para sincronizar las acciones del
procesador y coprocesador.


XLAT (traduccin).

Sintaxis: XLAT tabla

Indicadores:



La instruccin XLAT tabla carga en el registro AL el contenido de la posicin
[BX][AL], en donde el registro BX ha de apuntar al comienzo de una tabla. Dicho
de otra manera, AL hace de ndice de la tabla y de almacn destino del contenido
de la tabla.


LEA (carga direccin efectiva).

Sintaxis: LEA destino, origen

Indicadores:


Transfiere el desplazamiento del operando fuente al operando destino. Otras
instrucciones pueden a continuacin utilizar el registro como desplazamiento para
acceder a los datos que constituyen el objetivo. El operando destino no puede ser
un registro de segmento. En general, esta instruccin es equivalente a MOV
destino, OFFSET fuentey de hecho los buenos ensambladores (TASM) la
codifican como MOV para economizar un byte de memoria. Sin embargo, LEA es
en algunos casos ms potente que MOV al permitir indicar registros de ndice y
desplazamiento para calcular el offset.


LDS (carga un puntero utilizando DS).

Sintaxis: LDS destino, origen

Indicadores:



Traslada un puntero de 32 bits (direccin completa de memoria compuesta por
segmento y desplazamiento), al destino indicado y a DS. A partir de la direccin
indicada por el operando origen, el procesador toma 4 bytes de la memoria: con
los dos primeros forma una palabra que deposita en destino y, con los otros dos,
otra en DS.


LES (carga un puntero utilizando ES).

Sintaxis: LES destino, origen.

Esta instruccin es anloga a LDS, pero utilizando ES en lugar de D

2.15 Captura y almacenamiento de datos numricos

Bloques en ensamblador

MODELOS DE MEMORIA.

Los modelos de memoria constituyen las diversas maneras de acceder a la
memoria por parte de los compiladores de C. En el caso del Turbo C se pueden
distinguir los siguientes:

- TINY: Se emplea en los programas donde es preciso apurar el consumo de
memoria hasta el ltimo byte. Los 4 registros de segmento (CS, DS, ES, SS)
estn asignados a la misma direccin, por lo que existe un total de 64 Kb
donde se mezclan cdigo, datos y pila. Los programas de este tipo pueden
convertirse a formato COM.
- SMALL: Se utiliza en aplicaciones pequeas. Los segmentos de cdigo y datos
son diferentes y no se solapan. Por ello, hay 64 kb para cdigo y otros 64 Kb a
repartir entre datos y pila.

Segmentos Punteros

Modelo - Cdigo - Datos Pila Cdigo Datos

Tiny 64 Kb near near

Small 64 Kb 64 Kb near near

Medium 1 Mb 64 Kb far near

Compact 64 Kb 1 Mb near far

Large 1 Mb 1 Mb far far

Huge 1 Mb 1 Mb

(Bloques > 64 Kb) far far

- MEDIUM: Este modelo es ideal para programas largos que no manejan
demasiados datos. Se utilizan punteros largos para el cdigo (que puede
extenderse hasta 1 Mb) y cortos para los datos: la pila y los datos juntos no
pueden exceder de 64 Kb.
- COMPACT: Al contrario que el anterior, este modelo es el apropiado para los
programas pequeos que emplean muchos datos. Por ello, el programa no
puede exceder de 64 Kb aunque los datos que controla pueden alcanzar el Mb,
ya que los punteros de datos son de tipo far por defecto.
- LARGE: Empleado en las aplicaciones grandes y tambin por los
programadores de sistemas que no tienen paciencia para andar forzando
continuamente el tipo de los punteros (para rebasar el lmite de 64 Kb). Tanto
los datos como el cdigo pueden alcanzar el Mb, aunque no se admite que los
datos estticos ocupen ms de 64 Kb. Este modo es el que menos problemas
da para manejar la memoria, no siendo quiz tan lento y pesado como indica el
fabricante.
- HUGE: Similar al anterior, pero con algunas ventajas: por un lado, todos los
punteros son normalizados automticamente y se admiten datos estticos de
ms de 64 Kb. Por otro, y gracias a esto ltimo, es factible manipular bloques
de datos de ms de 64 Kb cada uno, ya que los segmentos de los punteros se
actualizan correctamente. Sin embargo, este modelo es el ms costoso en
tiempo de ejecucin de los programas.









Usando la pila

Una seccin de la memoria del programa es reservado para el uso de una pila. La
Intel 80386 y procesadores superiores contienen un registro llamado puntero a la
pila, esp, el cual almacena la direccin del tope de la pila, la figura 1 de abajo
muestra 3 valores enteros, 49, 30 y 72, almacenados en la pila(cada entero
ocupando 4 bytes) con el registro esp apuntando a la direccin del tope de la pila.



A diferencia de una pila creciendo hacia arriba, en las mquinas Intel crecen hacia
abajo. En la Figura 2 muestra las capas de la pila despus de la ejecucin pushl
$15.

El puntero de la pila es decrementado de cuatro en cuatro y el nmero 15 es
almacenando como lugares de 4 bytes, 1988, 1989, 1990 y 1991




La instruccin popl %eax copia el valor del tope de la pila(4 bytes) a eax e
incrementa esp en 4. Qu sucede si no quieres copiar el valor del tope de la pila a
un registro?. Puedes ejecutar la instruccin addl $4, %esp el cual simplemente
incrementa el puntero de la pila.

#Listing 3
.globl main
main:
movl $10, %eax
call foo
ret
foo:
addl $5, %eax
ret

En Listing 3, la instruccin call foo pone la direccin de la instruccin despus de
call en la llamada al programa sobre la pila y va hacia foo. La subrutina termina
con ret, el cual transfiere el control a la instruccin cuya direccin se toma desde el
tope de la pila. Obviamente el tope de la pila debe contener una direccin vlida


2.16 Operaciones bsicas sobre archivos de disco

ENTRADA Y SALIDA

Funciones que realiza

Vamos a sealar las funciones que debe realizar un computador para ejecutar
trabajos de entrada/salida:

- Direccionamiento o seleccin del dispositivo que debe llevar a cabo la
operacin de E/S.
- Transferencia de los datos entre el procesador y el dispositivo (en uno u otro
sentido).
- Sincronizacin y coordinacin de las operaciones.

Esta ltima funcin es necesaria debido a la deferencia de velocidades entre los
dispositivos y la CPU y a la independencia que debe existir entre los perifricos y
la CPU (por ejemplo, suelen tener relojes diferentes).

Se define una transferencia elemental de informacin como la transmisin de una
sola unidad de informacin (normalmente un byte) entre el procesador y el
perifrico o viceversa.

Para efectuar una transferencia elemental de informacin son precisas las
siguientes funciones:

- Establecimiento de una comunicacin fsica entre el procesador y el
perifrico para la transmisin de la unidad de informacin.
- Control de los perifricos, en que se incluyen operaciones como prueba y
modificacin del estado del perifrico. Para realizar estas funciones la CPU
gestionar las lneas de control necesarias.

Definiremos una operacin de E/S como el conjunto de acciones necesarias para
la transferencia de un conjunto de datos (es decir, una transferencia completa de
datos).




Para la realizacin de una operacin de E/S se deben efectuar las siguientes
funciones:

- Recuento de las unidades de informacin transferidas (normalmente bytes)
para reconocer el fin de operacin.
- Sincronizacin de velocidad entre la CPU y el perifrico.
- Deteccin de errores (e incluso correccin) mediante la utilizacin de los
cdigos necesarios (bits de paridad, cdigos de redundancia cclica, etc.).
- Almacenamiento temporal de la informacin. Es ms eficiente utilizar un
buffer temporal especfico para las operaciones de E/S que utilizan el rea de
datos del programa.
- Conversin de cdigos, conversin serie/paralelo, etc.

Dispositivos externos

Una de las funciones bsicas del ordenador es comunicarse con los dispositivos
exteriores, es decir, el ordenador debe ser capaz de enviar y recibir datos desde
estos dispositivos. Sin esta funcin, el ordenador no sera operativo porque sus
clculos no seran visibles desde el exterior.

Existe una gran variedad de dispositivos que pueden comunicarse con un
ordenador, desde los dispositivos clsicos (terminales, impresoras, discos, cintas,
etc.) hasta convertidores A/D y D/A para aplicaciones de medida y control de
procesos, De todos los posibles perifricos, algunos son de lectura, otros de
escritura y otros de lectura y escritura (es importante resaltar que este hecho
siempre se mira desde el punto de vista del proceso). Por otra parte, existen
perifricos de almacenamiento tambin llamados memorias auxiliares o masivas.

La mayora de los perifricos estn compuestos por una parte mecnica y otra
parte electrnica. Estas partes suelen separarse claramente para dar una mayor
modularidad. A la componente electrnica del perifrico se le suele denominar
controlador del dispositivo o, tambin, adaptador del dispositivo. Si el dispositivo
no tiene parte mecnica (como, por ejemplo, la pantalla de un terminal), el
controlador estar formado por la parte digital del circuito. Frecuentemente los
controladores de los dispositivos estn alojados en una placa de circuito impreso
diferenciada del resto del perifrico. En este caso es bastante habitual que un
mismo controlador pueda dar servicio a dispositivos de caractersticas similares.

El principal problema planteado por los perifricos es su gran variedad que
tambin afecta a las velocidades de transmisin. Por tanto, el mayor inconveniente
que encontramos en los perifricos es la diferencia entre sus velocidades de
transmisin y la diferencia entre stas y la velocidad de operacin del ordenador.

Вам также может понравиться