Vous êtes sur la page 1sur 54

Instituto tecnolgico superior de Zongolica

ANTOLOGA DE
LENGUAJES DE
INTERFAZ

Santiago Pavn Gutirrez

SEMESTRE AGO 2014 ENE 2015

PROPSITO DEL CURSO

La presente asignatura aporta al perfil del Ingeniero en Sistemas Computacionales


los conocimientos para el diseo e implementacin de interfaces hombre-mquina
y mquina-mquina para la automatizacin de sistemas. El desarrollo,
implementacin y administracin de software de sistemas o de aplicacin que
cumpla con los estndares de calidad con el fin de apoyar la productividad y
competitividad de las organizaciones. Para que desempee sus actividades
profesionales considerando los aspectos legales, ticos, sociales y de desarrollo
sustentable y a la vez le permita poseer las habilidades metodolgicas de
investigacin que fortalezcan el desarrollo cultural, cientfico y tecnolgico en el
mbito de sistemas computacionales y disciplinas afines.
Intensin didctica
Se pretende dar un panorama general de lo que es el lenguaje ensamblador y
donde se puede utilizar. Dar a conocer las principales instrucciones y funciones
del lenguaje ensamblador, la forma de estructurar un programa, los parmetros
que se tienen que tomar en cuenta realizando ejemplos sencillos.

Se desarrollarn programas en lenguaje ensamblador que hagan uso de macros o


procedimientos, posteriormente, analizar el funcionamiento interno de los
programas desarrollados haciendo el uso del software que permita obtener datos
estadsticos sobre el funcionamiento de los mismos.
Logrando obtener los conocimientos necesarios para la programacin de los
puertos de la computadora, as como, poder analizar la interfaz de video del buffer
en modo texto.

CONTENIDO

Lenguajes de Interfaz
Pagina
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8

2
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16

Primera Parte
INTRODUCCION AL LENGUAJE ENSAMBLADOR
Importancia de la programacin en lenguaje ensamblador...
El procesador y sus registros internos.
La memoria principal (RAM).
El concepto de interrupciones.
Llamadas a servicios del sistema.
Modos de direccionamiento.
Proceso de ensamblado y ligado.
Desplegado de mensajes en el monitor.

Segunda Parte
PROGRAMACION BASICA
Ensamblador (y ligador) a utilizar.
Ciclos numricos.
Captura bsica de cadenas.
Comparacin y prueba.
Saltos.
Ciclos condicionales.
Incremento y decremento.
Captura de cadenas con formato.
Instrucciones aritmticas.
Manipulacin de la pila.
Obtencin de cadena con representacin decimal.
Instrucciones lgicas.
Desplazamiento y rotacin.
Obtencin de una cadena con la representacin hexadecimal.
Captura y almacenamiento de datos numricos.
Operaciones bsicas sobre archivos de disco.

Tercera Parte

3 Modularizacin
3.1 Procedimientos.
3.2 Macros.

Cuarta Parte

4
4.1
4.2
4.3
4.4
4.5
4.6

Programacin de dispositivos
El buffer de video en modo texto.
Acceso a discos en lenguaje ensamblador.
Programacin del puerto serial.
Programacin del puerto paralelo.
Programacin hbrida.
Programacin de puerto usb.

RED CONCEPTUAL DEL CURSO

Introduccin al Lenguaje Ensamblador

Programacin Bsica

Lenguajes de Interfaz

Modularizacin

Programacin de dispositivos

OBJETIVOS DEL CURSO


Al trmino del curso el participante:
1. Conocer cmo trabajan los microprocesadores con lenguaje ensamblador y
que aplicacin pueden tener.

2. Utilizar las principales instrucciones del lenguaje ensamblador, para realizar


determinadas aplicaciones de interfaz.

3. Comprender la importancia de la utilidad de las macros y procedimientos


dentro del desarrollo de una aplicacin de software.

4. Programar interfaces de software y hardware para la manipulacin de


puertos y dispositivos de computadora.

UNIDAD 1
INTRODUCCIN A LOS LENGUAJES DE BAJO NIVEL
Un lenguaje de programacin de caractersticas bajo nivel es aquel en el que sus
instrucciones ejercen un control directo sobre el hardware y estn condicionados
por la estructura fsica de la computadora que lo soporta. El uso de la palabra bajo
en su denominacin no implica que el lenguaje sea inferior a un lenguaje de alto
nivel, si no que se refiere a la reducida abstraccin entre el lenguaje y el hardware.
Por ejemplo, se utiliza este tipo de lenguajes para programar tareas crticas de los
Sistemas Operativos, de aplicaciones en tiempo real o controladores de
dispositivos.

RED CONCEPTUAL DE LA UNIDAD

1.1 Importancia de la programacin en


lenguaje ensamblador

1.2 El procesador y sus registros internos

1.3 La memoria principal (RAM)

1.4 El concepto de interrupciones


Introduccin al Lenguaje
Ensamblador
1.5 Llamadas a servicios del sistema

1.6 Modos de direccionamiento

1.7 Proceso de ensamblado y ligado

1.8 Desplegado de mensajes en el monitor

Objetivo General de la Unidad:


Investigar la estructura y organizacin de un procesador.
Analizar los registros ms importantes que contiene un CPU, as como las
funciones de los mismos.
Descubrir modos de direccionamiento a memoria.
Estructurar un programa fuente y que est despliegue mensajes en el
monitor con instrucciones bsicas en lenguaje ensamblador.

DESARROLLO DEL TEMA


1.1 Importancia de la programacin en lenguaje ensamblador
La importancia del lenguaje ensamblador radica 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 el se puede realizar
cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden
realizar.

Los programas en ensamblador ocupan menos espacio en memoria. Permiten


adentrarnos al estudio del hardware de una PC. Este lenguaje proporciona las
herramientas para tomar control sobre todo lo que la computadora realiza
fsicamente. Es importante como se puede ver, el Lenguaje Ensamblador es
directamente traducible al Lenguaje Mquina, y viceversa; simplemente, es una
abstraccin que facilita su uso para los seres humanos.

Por otro lado, la computadora no entiende directamente al Lenguaje Ensamblador;


es necesario traducirle a Lenguaje Mquina. Pero, al ser tan directa la traduccin,
pronto aparecieron los programas Ensambladores, que son traductores que
convierten el cdigo fuente (en Lenguaje Ensamblador) a cdigo objeto (es decir,
a Lenguaje Mquina). Surge como una necesidad de facilitar al programador la
tarea de trabajar con lenguaje mquina sin perder el control directo con el
hardware.
Ventajas:
Proporciona un control absoluto sobre la PC. Los programas en ensamblador son
rpidos y compactos.

Velocidad.- 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 an ms rpido.

Eficiencia de tamao.- Un programa en ensamblador no ocupa mucho


espacio en memoria porque no tiene que cargar libreras y dems como son
los lenguajes de alto nivel.

Flexibilidad.- Es flexible porque todo lo que puede hacerse con una


mquina, puede hacerse en el lenguaje ensamblador de esta mquina; los
lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al
mximo los recursos dela mquina.

Desventajas:

Tiempo de programacin.- Como es un lenguaje de bajo nivel requiere


ms instrucciones para realizar el mismo proceso, en comparacin con un
lenguaje de alto nivel. Por otro lado, requiere de ms cuidado por parte del
programador, pues es propenso a que los errores de lgica se reflejen ms
fuertemente en la ejecucin.

Programas fuente grandes.- Por las mismas razones que aumenta el


tiempo, crecen los programas fuentes; simplemente requerimos ms
instrucciones primitivas para describir procesos equivalentes. Esto es una
desventaja porque dificulta el mantenimiento de los programas, y
nuevamente reduce la productividad de los programadores.

Peligro de afectar recursos inesperadamente.- Que todo error que


podamos cometer, o todo riesgo que podamos tener, podemos afectar los
recursos de la mquina, programar en este lenguaje lo ms comn que
pueda pasar es que la mquina se bloquee o se reinicie. Porque con este
lenguaje es perfectamente posible (y sencillo) realizar secuencias de
instrucciones invlidas, que normalmente no aparecen al usar un lenguaje
de alto nivel.

Falta de portabilidad.- Porque para cada mquina existe un lenguaje


ensamblador; por ello, evidentemente no es una seleccin apropiada de
lenguaje cuando deseamos codificar en una mquina y luego llevar los
programas a otros sistemas operativos o modelos de computadoras.

1.2 El procesador y sus registros internos


Todo procesador, grande o pequeo, desde el de una calculadora hasta el de una
sper computadora, ya sea de propsito general o especfico, posee un lenguaje
nico que es capaz de reconocer y ejecutar. Por razones que resultan obvias, este
lenguaje ha sido denominado Lenguaje de Mquina y ms que ser propio de un
computador pertenece a su microprocesador.
El lenguaje de mquina est compuesto por una serie de instrucciones, que son
las nicas que pueden ser reconocidas y ejecutadas por el microprocesador. Este
lenguaje es un conjunto de nmeros que representan las operaciones que realiza
el microprocesador a travs de su circuitera interna. Estas instrucciones, por
decirlo as, estn grabadas o "alambradas" en el hardware y no pueden ser
cambiadas.
El nivel ms bajo al que podemos aspirar a llegar en el control de un
microprocesador es precisamente el del lenguaje de mquina.
Ahora bien, siendo el lenguaje de mquina un conjunto de nmeros, cmo es
capaz el microprocesador de saber cundo un nmero representa una instruccin
y cundo un dato? El secreto de esto reside en la direccin de inicio de un
programa y en el estado del microprocesador. La direccin de inicio nos indica en
qu localidad de memoria comienza un programa, y en consecuencia que datos
deberemos considerar como instrucciones. El estado del microprocesador nos
permite saber cundo ste espera una instruccin y cundo ste espera un dato.

El cerebro del ordenador es el procesador. Su funcin es ejecutar los


programas almacenados en la memoria principal tomando las instrucciones,
examinndolas y ejecutndolas una tras otra. Para ello, el procesador
realiza todas las operaciones aritmticas, lgicas y de control que son
necesarias.

Los registros del procesador se emplean para controlar instrucciones en


ejecucin, manejar direccionamiento de memoria y proporcionar capacidad
aritmtica.

Arquitectura:

Unidad de control

Unidad Aritmtica lgica

Registros Internos

Buses internos

Interrupciones

Esquema:

Secuencia de Acciones:
1. Se inicia en una posicin de memoria definida.
2. Se lee el dato de esa posicin y se manda al control.
3. La unidad de control decodifica la instruccin y la ejecuta en seales
adecuadas.
4. Se incrementa el contador del programa (registro que indica a que posicin
se debe dirigir).
5. Se repite proceso desde el punto 2, hasta recibir una seal del exterior.

ALU: Circuito digital que realiza operaciones aritmticas y lgicas


Unidad de Control: Cerebro del microprocesador, genera seales de control
interno y externo.
Recibe cdigos los cuales decodifica y ejecuta.
Los cdigos pueden ser:
1. Operaciones aritmtico lgicas
2. Cargar o leer datos
3. Saltos o interrupciones
Registros Internos:
Posiciones de memoria con utilidad general o especifica.

Tipos:
Registros de datos: operaciones aritmticas lgicas y manipulacin
de datos
Registros de Direcciones : para acceder a posiciones de memoria

Contador de programa: leer o escribir datos de programa

Puntero de pila: Recuperar y guardar datos de uso interno

ndices: para acceder a posiciones de memoria en forma


relativa

Registro de estado: para informacin especifica

Los registros del procesador tienen como misin fundamental: almacenar


las posiciones de memoria que van a sufrir repetidas manipulaciones, ya
que los accesos a memoria son mucho ms lentos que los accesos a los
registros.

El 8086 dispone de 14 registros de 16 bits que se emplean para controlar la


ejecucin de instrucciones, direccionar la memoria y proporcionar
capacidad aritmtica y lgica. Cada registro puede almacenar datos o
direcciones de memoria. Los registros son direccionables por medio de un
nombre.

Registros de propsito general o de datos, registros de segmento, registro


apuntador de instrucciones (IP), registros apuntadores (SP y BP), registros
ndice (SI y DI) y registro de banderas, FLAGS o registro de estado (FL).

Registros de propsito general:

Registro AX: Este registro es el acumulador principal, implicado en gran


parte de las operaciones de aritmticas y de E/S.

Registro BX: Recibe el nombre de registro base ya que es el nico registro


de propsito general que se usa como un ndice en el direccionamiento
indexado. Se suele utilizar para clculos aritmticos.

Registro CX: El CX es conocido como registro contador ya que puede


contener un valor para controlar el nmero de veces que se repite una
cierta operacin.

Registro DX: Se conoce como registro de datos. Algunas operaciones de


E/S requieren su uso, y las operaciones de multiplicacin y divisin con
cifras grandes suponen que el DX y el AX trabajando juntos.

Los registros de propsito general se pueden direccionar como una palabra o


como un byte. El byte de la izquierda es la parte Alta y el byte de la derecha es la
parte Baja.

Siguiendo esta nomenclatura, es posible referirse a cada uno de los dos bytes,
byte de orden alto o ms significativo y byte de orden bajo o menos significativo,
de cada uno de estos registros. Por ejemplo: AH es el byte ms significativo del
registro AX, mientras que AL es el byte menos significativo.
Un segmento es un rea especial en un programa que inicia en un lmite de un
prrafo, esto es, una localidad regularmente divisible entre 16 o 10 hex.
Un segmento en modo real puede ser de hasta 64k. Se puede tener cualquier
nmero de segmentos, para direccionar un segmento en particular basta cambiar
la direccin en el registro del segmento apropiado. Los tres principales segmentos
son: segmentos de cdigo, de datos y de la pila.
Los registros de segmento son registros de 16 bits que constituyen la
implementacin fsica de la arquitectura segmentada del 8086.

Registros de segmento

Registro CS. Registro Segmento de Cdigo. Establece el rea de memoria


dnde est el programa durante su ejecucin.

Registro DS. Registro Segmento de Datos. Especifica la zona donde los


programas leen y escriben sus datos.

Registro SS. Registro Segmento de Pila. Permite la colocacin en memoria


de una pila, para almacenamiento temporal de direcciones y datos.

Registro ES. Registro Segmento Extra. Se suele utilizar en algunas


operaciones con cadenas de caracteres para direccionar la memoria.

Registro Apuntador de Instrucciones (IP)

Se trata de un registro de 16 bits que contiene el desplazamiento de la


direccin de la siguiente instruccin que se ejecutar. Est asociado con el
registro CS en el sentido de que IP indica el desplazamiento de la siguiente
instruccin a ejecutar dentro del segmento de cdigo determinado por CS:

Direccin del segmento de cdigo en CS: 25A40H

Desplazamiento dentro del segmento de cdigo en IP:


25A40H + 0412H = 25E52H

Direccin de la siguiente instruccin a ejecutar: 25E52H

Registros Apuntadores (SP y BP)


Los registros apuntadores estn asociados al registro de segmento SS y permiten
acceder a los datos almacenados en la pila:

Registro SP Proporciona un valor de desplazamiento que se refiere a la


palabra actual que est siendo procesada en la pila.

Registro BP Facilita la referencia a los parmetros de las rutinas, los


cuales son datos y direcciones transmitidos va la pila.

Registros ndice (SI y DI)

Los registros ndices se utilizan fundamentalmente en operaciones con cadenas y


para direccionamiento indexado:

Registro SI Registro ndice fuente requerido en algunas operaciones con


cadenas de caracteres. Este registro est asociado con el registro DS.

Registro DI Registro ndice destino requerido tambin en determinadas


operaciones con cadenas de caracteres. Est asociado al registro DS o ES.

Registro de Banderas, FLAGS, o registro de estado (FL)

Es un registro de 16 bits, pero slo se utilizan nueve de ellos. Sirven para


indicar el estado actual de la mquina y el resultado del procesamiento. La
mayor parte de las instrucciones de comparacin y aritmticas modifican
este registro. Algunas instrucciones pueden realizar pruebas sobre este
registro para determinar la accin siguiente.

Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condicin que reflejan los


resultados de las operaciones del programa; los bits 8 al 10 son indicadores
de control que, modificados por el programador, sirven para controlar
ciertos modos de procesamiento, y el resto no se utilizan.

OF. Bit de Overflow o desbordamiento. Indica desbordamiento de un bit de


orden alto (ms a la izquierda), despus de una operacin aritmtica.

DF. Bit de Direccin. Designa la direccin, creciente (0) o decreciente (1),


en operaciones con cadenas de caracteres.

IF. Bit de Interrupcin. Indica que una interrupcin externa, como la entrada
desde el teclado, sea procesada o ignorada.

TF. Bit de Trap o Desvo. Procesa o ignora la interrupcin interna de trace


(procesamiento paso a paso).

SF. Bit de Signo. Indica el valor del bit ms significativo del registro despus
de una operacin aritmtica o de desplazamiento.

ZF. Bit Cero. Se pone a 1 si una operacin produce 0 como resultado.

AF. Bit de Carry Auxiliar. Se pone a 1 si una operacin aritmtica produce


un acarreo del bit 3 al 4. Se usa para aritmtica especializada (ajuste BCD).

PF. Bit de Paridad. Se activa si el resultado de una operacin tiene paridad


par.

CF. Bit de Acarreo. Contiene el acarreo de una operacin aritmtica o de


desplazamiento de bits.

1.3 La memoria principal (RAM)


La memoria principal o primaria, "Memoria Central ", es aquella memoria de un
ordenador, la memoria es apta para 1200 gb, prcticamente la mejor, es un
dispositivo donde se almacenan temporalmente tanto los datos como los
programas que la CPU est procesando o va a procesar en un determinado
momento. Por su funcin, es una amiga inseparable del microprocesador, con el
cual se comunica a travs de los buses de datos. Por ejemplo, cuando la CPU
tiene que ejecutar un programa, primero lo coloca en la memoria y despus lo
empieza a ejecutar. lo mismo ocurre cuando necesita procesar una serie de datos;
antes de poder procesarlos los tiene que llevar a la memoria principal.
Esta clase de memoria es voltil, es decir que, cuando se corta la energa
elctrica, se borra toda la informacin que estuviera almacenada en ella.

Por su funcin, la cantidad de memoria RAM de que disponga una computadora


es un factor muy importante; hay programas y juegos que requieren una gran
cantidad de memoria para poder usarlos. Otros andarn ms rpido si el sistema
cuenta con ms memoria RAM.
La memoria Cach: dentro de la memoria RAM existe una clase de memoria
denominada Memoria Cach que tiene la caracterstica de ser ms rpida que las
otras, permitiendo que el intercambio de informacin entre el procesador y la
memoria principal sea a mayor velocidad.
Tipos de memoria RAM
Existen y han existido muchos tipos de memorias RAM,
Para nombrar una memoria, hay que distinguir entre: soporte y caractersticas.
SIMMs y DIMMs
Se trata de la forma en que se juntan los chips de memoria, del tipo que sean,
para conectarse a la placa base del ordenador. Son unas plaquitas alargadas con
conectores en un extremo; al conjunto se le llama mdulo.
El nmero de conectores depende del bus de datos del microprocesador, que ms
que un autobs es la carretera por la que van los datos; el nmero de carriles de
dicha carretera representara el nmero de bits de informacin que puede manejar
cada vez.
SIMMs: Single In-line Memory Module, con 30 72 contactos. Los de 30 contactos
pueden manejar 8 bits cada vez, por lo que en un 386 486, que tiene un bus de
datos de 32 bits, necesitamos usarlos de 4 en 4 mdulos iguales. Miden unos 8,5
cm (30 c.) 10,5 cm (72 c.) y sus zcalos suelen ser de color blanco.
Los SIMMs de 72 contactos, ms modernos, manejan 32 bits, por lo que se usan
de 1 en 1 en los 486; en los Pentium se hara de 2 en 2 mdulos (iguales), porque
el bus de datos de los Pentium es el doble de grande (64 bits).
DIMMs: ms alargados (unos 13 cm), con 168 contactos y en zcalos
generalmente negros; llevan dos muescas para facilitar su correcta colocacin.

Pueden manejar 64 bits de una vez, por lo que pueden usarse de 1 en 1 en los
Pentium, K6 y superiores. Existen para voltaje estndar (5 voltios) o reducido (3.3
V).
Las SDRAM normales tienen 168 contactos, los primeros mdulos se
comercializaban a 66MHz de velocidad, luego surgieron los de 100 y 133MHz, que
son prcticamente los nicos que se emplean en SDRAM, actualmente slo se
encuentran fcilmente los SDRAM de 133MHz.
SDRAM: Sincronic-RAM. Funciona de manera sincronizada con la velocidad de la
placa (de 50 a 66 MHz), para lo que debe ser rapidsima, de unos 25 a 10 ns. Slo
se presenta en forma de DIMMs de 168 contactos; es usada en los Pentium II de
menos de 350 MHz y en los Celeron.

1.4 El concepto de las interrupciones


Una interrupcin es una instruccin que detiene la ejecucin de un programa para
permitir el uso de la UCP a un proceso prioritario. Una vez concluido este ltimo
proceso se devuelve el control a la aplicacin anterior. Por ejemplo, cuando
estamos trabajando con un procesador de palabras y en ese momento llega un
aviso de uno de los puertos de comunicaciones, se detiene temporalmente la
aplicacin que estbamos utilizando para permitir el uso del procesador al manejo
de la informacin que est legando en ese momento. Una vez terminada la
transferencia de informacin se reanudan las funciones normales del procesador
de palabras. Las interrupciones ocurren muy seguido, sencillamente la interrupcin
que actualiza la hora del da ocurre aproximadamente 18 veces por segundo. Para
lograr administrar todas estas interrupciones, la computadora cuenta con un

espacio de memoria, llamado memoria baja, donde se almacenan las direcciones


de cierta localidad de memoria donde se encuentran un juego de instrucciones
que la UCP ejecutar para despus regresar a la aplicacin en proceso. La
sentencia para usar una interrupcin en ensamblador es INT nmero. En el
programa anterior hicimos uso de la interrupcin nmero 21h para llamar a DOS.

A continuacin describiremos los 3 tipos de interrupciones:

INTERRUPCIONES INTERNAS DE HARDWARE:


Las interrupciones internas son generadas por ciertos eventos que surgen durante
la ejecucin de un programa. Este tipo de interrupciones son manejadas en su
totalidad por el hardware y no es posible modificarlas. Un ejemplo claro de este
tipo de interrupciones es la que actualiza el contador del reloj interno de la
computadora, el hardware hace el llamado a esta interrupcin varias veces
durante un segundo para mantener la hora actualizada. Aunque no podemos
manejar directamente esta interrupcin (no podemos controlar por software las
actualizaciones del reloj), es posible utilizar sus efectos en la computadora para
nuestro beneficio, por ejemplo para crear un "reloj virtual" actualizado
continuamente gracias al contador del reloj interno. nicamente debemos escribir
un programa que lea el valor actual del contador y lo traduzca a un formato
entendible para el usuario.
INTERRUPCIONES EXTERNAS DE HARDWARE:
Las interrupciones externas las generan los dispositivos perifricos, como pueden
ser: teclado, impresoras, tarjetas de comunicaciones, etc. Tambin son generadas
por los coprocesadores. No es posible desactivar a las interrupciones externas.
Estas interrupciones no son enviadas directamente a la UCP, sino que se mandan
a un circuito integrado cuya funcin es exclusivamente manejar este tipo de
interrupciones. El circuito, llamado PIC 8259A, si es controlado por la UCP
utilizando para tal control una serie de vas de comunicacin llamadas puertos.
INTERRUPCIONES DE SOFTWARE:

Las interrupciones de software pueden ser activadas directamente por el


ensamblador invocando al nmero de interrupcin deseada con la instruccin INT.
El uso de las interrupciones nos ayuda en la creacin de programas, utilizndolas
nuestros programas son ms cortos, es ms fcil entenderlos y usualmente tienen
un mejor desempeo debido en gran parte a su menor tamao. Este tipo de
interrupciones podemos separarlas en dos categoras: las interrupciones del
sistema operativo DOS y las interrupciones del BIOS. La diferencia entre ambas
es que las interrupciones del sistema operativo son ms fciles de usar pero
tambin son ms lentas ya que estas interrupciones hacen uso del BIOS para
lograr su cometido, en cambio las interrupciones del BIOS son mucho ms rpidas
pero tienen la desventaja que, como son parte del hardware son muy especficas y
pueden variar dependiendo incluso de la marca del fabricante del circuito. La
eleccin del tipo de interrupcin a utilizar depender nicamente de las
caractersticas que le quiera dar a su programa: velocidad (utilizando las del BIOS)
o portabilidad (utilizando las del DOS).
Interrupcin 21H Propsito: Llamar a diversas funciones del DOS.
Sintaxis:
Int 21H
Nota: Cuando trabajamos en TASM es necesario especificar que el valor que
estamos utilizando es hexadecimal. Esta interrupcin tiene varias funciones, para
acceder a cada una de ellas es necesario que el registro AH se encuentre el
nmero de funcin que se requiera al momento de llamar a la interrupcin.

1.5 Llamadas a servicios del sistema


Una llamada al sistema es un mtodo o funcin que puede invocar un proceso
para solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos
recursos del sistema requiere la ejecucin de cdigo en modo privilegiado, el
sistema operativo ofrece un conjunto de mtodos o funciones que el programa
puede emplear para acceder a dichos recursos. En otras palabras, el sistema

operativo acta como intermediario, ofreciendo una interfaz de programacin (API)


que el programa puede usar en cualquier momento para solicitar recursos
gestionados por el sistema operativo.
Algunos ejemplos de llamadas al sistema son las siguientes:
Time: que permite obtener la fecha y hora del sistema.
Write: que se emplea para escribir un dato en un cierto dispositivo de salida,
tales como una pantalla o un disco magntico.
Read: que es usada para leer de un dispositivo de entrada, tales como un
teclado o un disco magntico.
Open: que es usada para obtener un descriptor de un fichero del sistema,
ese fichero suele pasarse a write.
.
1.6 Mtodos de direccionamiento
Buses Internos: Caminos de comunicacin que conectan dos o ms dispositivos
para acceder a diferentes partes del circuito
1. Bus de direccin: para seleccionar posicin de memoria para leer o escribir
datos
2. Bus de datos: transmitir datos
El microprocesador se divide por el nmero de bits que conforman el dato 4, 8,
16, 32, 46 bits
3. Bus de control: para sincronizar actividades y transacciones con los perifricos
del sistema.
Es la forma que tienen los Microprocesadores para indicar las diferentes fuentes
de
datos,
permitiendo
una
mayor
flexibilidad
al
programador.
Cualquier instruccin posee 4 campos que indican a la unidad de control cual se la
operacin, la ubicacin del primer y segundo operador y el modo en que se deber
buscar a 1 de los operandos.

El 8086 tiene 7 modos de direccionamiento conocidos como:


Direccionamiento inmediato: en este modo el operador se encuentra
directamente en la instruccin. Ejemplo: MOV AH, 234 o MOV DH, 0.
Modo registro: en este modo el operando se encuentra en un registro interno del
microprocesador. Ejemplo: MOV AH, AL.
Debe tenerse en cuenta que las operaciones entre registros se realizan con
registros de igual tamao.
Modo directo: en este modo la ubicacin del operando es una direccin de
memoria cuya posicin se indica directamente en la instruccin. Ejemplo: MOV
AH, [102].
Modo indirecto: en este modo el operando se encuentra en una direccin de
memoria cuya posicin est almacenada en un registro puntero (SI, SI, BX, BP)
identificada como Puntero ndice (I) o Puntero base (B). Ejemplo MOV AH, [BX].
Modo indirecto con base: en este modo el operando se encuentra en una
posicin de memoria cuya direccin es el contenido de un registro de base (BX,
BP) ms un desplazamiento adicional de 8 o 126 bits. Ejemplo: MOV AH, [BX +
172].
Modo indirecto con ndice: en este modo el operando se encuentra en una
posicin de memoria cuya direccin es el contenido de un registro ndice (SI, DI)
ms un desplazamiento adicional de 8 a 16 bits. Ejemplo: MOV AH, [SI + 172].
Modo indirecto con base e ndice: en este modo el operando se encuentra en
una posicin de memoria cuata direccin es la contenida en un registro base (BX,
BP) ms el contenido de un registro ndice (SI, DI) ms un desplazamiento de 8 a
16 bits. Ejemplo: MOV AH, [BP + SI + 18].

1.7 Proceso de ensamblado y ligado


Aun cuando el lenguaje ensamblador fue diseado para hacer ms fcil la
programacin de bajo nivel, esta resulta todava complicada y muy laboriosa. Por
tal motivo se desarrollaron los lenguajes de alto nivel, para facilitar la

programacin de los computadores, minimizando la cantidad de instrucciones a


especificar. Sin embargo, esto no quiere decir que el microprocesador ejecute
dichos lenguajes. Cada una de las instrucciones de un lenguaje de alto nivel o de
un nivel intermedio, equivalen a varias de lenguaje mquina o lenguaje
ensamblador.
La traduccin de las instrucciones de nivel superior a las de bajo nivel la realizan
determinados programas. Por una parte tenemos los intrpretes, como DBase,
BASIC, APL, y Lisp. En estos, cada vez que se encuentra una instruccin, se
llama una determinada rutina de lenguaje de mquina que se encarga de realizar
las operaciones asociadas, pero en ningn momento se genera un cdigo objeto y
mucho menos un cdigo ejecutable. Por otra parte, tenemos los compiladores,
como los desarrollados para Fortran, Clipper, COBOL, Pascal o C, que en vez de
llamar y ejecutar una rutina en lenguaje de mquina, stos juntan esas rutinas
para formar el cdigo objeto que, despus de enlazar las rutinas de run-time y
llamadas a otros programas y servicios del sistema operativo, se transformar en
el programa ejecutable.
Finalmente, tenemos los ensambladores como los descritos en este trabajo
que son como una versin reducida y elemental de un compilador (pero que de
ninguna manera deben considerarse como tales), ya que lo nico que tienen que
hacer es cambiar toda referencia simblica por

la direccin correspondiente,

calcular los saltos, resolver referencias y llamadas a otros programas, y realizar el


proceso de enlace. Los ensambladores son programas destinados a realizar el
ensamblado de un determinado cdigo.
Para crear un programa ejecutable a partir de un cdigo objeto se requiere que se
resuelvan las llamadas a otros programas y a los servicios del sistema operativo, y
agregar las rutinas o informacin de run-time para que el programa pueda ser
cargado a memoria y ejecutado. Este proceso es lo que se conoce como Link o
proceso de liga, y se realiza a travs de un ligador o Linker que toma de entrada
el cdigo objeto y produce de salida el cdigo ejecutable.

Las rutinas de RUN-TIME son necesarias, puesto que el sistema operativo


requiere tener control sobre el programa en cualquier momento, adems de que la
asignacin de recursos y su acceso deben hacerse solamente a travs del
sistema operativo. Para los computadores personales, esto no es tan complejo
como para otros computadores y sistemas operativos, pero es requerido.
Existen varios ensambladores disponibles para ambiente MS-DOS: el IBM Macro
Assembler, el Turbo Assembler de Borland, el Turbo Editassm de Speedware, por
citar algunos. Una breve descripcin de cada uno se proporciona a continuacin.
Macro

Ensamblador

IBM:

Est

integrado

por

un

ensamblador

un

macroensamblador. En gran medida su funcionamiento y forma de invocarlo es


sumamente similar al de Microsoft. Su forma de uso consiste en generar un
archivo fuente en cdigo ASCII, se procede a generar un programa objeto que es
ligado y se genera un programa .EXE. Opcionalmente puede recubrirse a la
utilera EXE2BIN de MS-DOS para transformarlo a .COM. Es capaz de generar un
listado con informacin del proceso de ensamble y referencias cruzadas.
Macro Ensamblador de Microsoft: Dependiendo de la versin, este ensamblador
es capaz de soportar

el juego de instrucciones de distintos tipos de

microprocesadores Intel de la serie 80xx/80x86. En su versin 4.0 este soporta


desde el 8086 al 80286 y los coprocesadores 8087 y 80287. Requiere 128KB de
memoria y sistema operativo MS-DOS v2.0 o superior. Trabaja con un archivo de
cdigo fuente creado a partir de un editor y grabado en formato ASCII. Este
archivo es usado para el proceso de ensamble y generacin de cdigo objeto.
Posteriormente, y con un ligador, es creado el cdigo ejecutable en formato .EXE.
Turbo Editassm: Este es desarrollado por Speddware, Inc., y consiste de un
ambiente integrado que incluye un editor y utileras para el proceso de ensamble y
depuracin. Es capaz de realizar el ensamble lnea a lnea, conforme se
introducen los mnemnicos, y permite revisar listas de referencias cruzadas y
contenido de los registros. Este ensamblador trabaja con tablas en memoria, por lo
que la generacin del cdigo ejecutable no implica la invocacin explcita del

ligador por parte del programador. Adicionalmente permite la generacin de


listados de mensajes e informacin de cada etapa del proceso y la capacidad de
creacin de archivos de cdigo objeto.
Turbo Assembler (De Borland Intl): es muy superior al Turbo Editassm. Trabaja
de la misma forma, pero proporciona una interfaz mucho ms fcil de usar y un
mayor conjunto de utileras y servicios.
En lo que se refiere a las presentes notas, nos enfocaremos al Microsoft Macro
Assembler v4.0. Los programas ejemplo han sido desarrollados con ste y est
garantizado su funcionamiento. Estos mismos programas posiblemente funcionen
con otros ensambladores sin cambios o con cambios mnimos cuando utilizan
directivas o pseudoinstrucciones. Realmente la diferencia entre los ensambladores
radica en la forma de generar el cdigo y en las directivas con que cuente, aunque
estas diferencias son mnimas. El cdigo ensamblador no cambia puesto que los
microprocesadores con los que se va a trabajar son comunes. As, todos los
programas que se creen con un ensamblador en particular podrn ser
ensamblados en otro, cambiando las pseudo-operaciones no reconocidas por el
equivalente indicado en el manual de referencia del paquete empleado.

1.8 Desplegado de mensajes en el monitor


Todos los grficos y el texto que se muestran en el monitor se escriben en la RAM
de visualizacin de video, para despus enviarlos al monitor mediante el
controlador de video. El controlador de video es en s un microprocesador de
propsito especial, que libera a la CPU principal del trabajo de controlar el
hardware de video.
Un monitor de pantalla de cristal lquido (LCD) digital directo recibe un flujo de bits
digitales directamente desde el controlador de video, y no requiere del barrido de
trama.

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.
Para poder desplegar mensajes en lenguaje ensamblador primero debemos
conocer la estructura del programa en ensamblador.
PALABRAS RESERVADAS
PAGE: designa el nmero mximo de lneas para listar en una pgina y el nmero
mximo de caracteres en una lnea.
TITLE: para hacer que un ttulo para un programa se imprima en la lnea 2 de cada
pgina en el listado del programa
SEGMENT y ENDS
ASSUME

IDENTIFICADORES: es un nombre que se aplica a elementos en el programa.


OPERACIN
OPERANDO.

UNIDAD 2
PROGRAMACIN BASICA
Para comenzar con la programacin en lenguaje ensamblador, es necesario
contar con un conjunto de herramientas de programacin. Este conjunto de
herramientas consta de un editor de texto capaz de producir archivos en cdigo
ASCII, un ensamblador y un enlazador.

RED CONCEPTUAL DE LA UNIDAD


2.1 Ensamblador (y ligador) a utilizar
2.2 Ciclos numricos
2.3 Captura bsica de cadenas
2.4 Comparacin y prueba
2.5 Saltos
2.6 Ciclos condicionales
2.7 Incremento y decremento
2.8 Captura de cadenas con formato
Programacin Bsica

2.9 Instrucciones aritmticas


2.10 Manipulacin de la pila
2.11 Obtencin de cadena con representacin
decimal
2.12 Instrucciones lgicas
2.13 Desplazamiento y rotacin
2.14 Obtencin de una cadena con la
representacin hexadecimal
2.15 Captura y almacenamiento de datos
numricos
2.16 Operaciones bsicas sobre archivos de
disco

Objetivo General de la Unidad:


Realizar investigacin y listar las principales instrucciones de programacin
en lenguaje ensamblador.
Desarrollar programas por medio de prcticas en lenguaje ensamblador, los
cuales ejemplifiquen las diferentes instrucciones y funciones bsicas as
como la forma de estructurarlas.

2.1 Ensamblador y ligador a utilizar


Para crear un programa ejecutable a partir de un cdigo objeto se requiere que se
resuelvan las llamadas a otros programas y a los servicios del sistema operativo, y
agregar las rutinas o informacin de run-time para que el programa pueda ser
cargado a memoria y ejecutado. Este proceso es lo que se conoce como Link o
proceso de liga, y se realiza a travs de un ligador o Linker que toma de entrada
el cdigo objeto y produce de salida el cdigo ejecutable.
Las rutinas de RUN-TIME son necesarias, puesto que el sistema operativo
requiere tener control sobre el programa en cualquier momento, adems de que la
asignacin de recursos y su acceso deben hacerse solamente a travs del
sistema operativo. Para los computadores personales, esto no es tan complejo
como para otros computadores y sistemas operativos, pero es requerido.
Existen varios ensambladores disponibles para ambiente MS-DOS: el IBM Macro
Assembler, el Turbo Assembler de Borland, el Turbo Editassm de Speedware, por
citar algunos. Una breve descripcin de cada uno se proporciona a continuacin.
Macro

Ensamblador

IBM:

Est

integrado

por

un

ensamblador

un

macroensamblador. En gran medida su funcionamiento y forma de invocarlo es


sumamente similar al de Microsoft. Su forma de uso consiste en generar un
archivo fuente en cdigo ASCII, se procede a generar un programa objeto que es
ligado y se genera un programa .EXE. Opcionalmente puede recubrirse a la
utilera EXE2BIN de MS-DOS para transformarlo a .COM. Es capaz de generar un
listado con informacin del proceso de ensamble y referencias cruzadas.
Macro Ensamblador de Microsoft: Dependiendo de la versin, este ensamblador
es capaz de soportar

el juego de instrucciones de distintos tipos de

microprocesadores Intel de la serie 80xx/80x86. En su versin 4.0 este soporta


desde el 8086 al 80286 y los coprocesadores 8087 y 80287. Requiere 128KB de
memoria y sistema operativo MS-DOS v2.0 o superior. Trabaja con un archivo de
cdigo fuente creado a partir de un editor y grabado en formato ASCII. Este

archivo es usado para el proceso de ensamble y generacin de cdigo objeto.


Posteriormente, y con un ligador, es creado el cdigo ejecutable en formato .EXE.
Turbo Editassm: Este es desarrollado por Speddware, Inc., y consiste de un
ambiente integrado que incluye un editor y utileras para el proceso de ensamble y
depuracin. Es capaz de realizar el ensamble lnea a lnea, conforme se
introducen los mnemnicos, y permite revisar listas de referencias cruzadas y
contenido de los registros. Este ensamblador trabaja con tablas en memoria, por lo
que la generacin del cdigo ejecutable no implica la invocacin explcita del
ligador por parte del programador. Adicionalmente permite la generacin de
listados de mensajes e informacin de cada etapa del proceso y la capacidad de
creacin de archivos de cdigo objeto.
Turbo Assembler (De Borland Intl): es muy superior al Turbo Editassm. Trabaja
de la misma forma, pero proporciona una interfaz mucho ms fcil de usar y un
mayor conjunto de utileras y servicios.
En lo que se refiere a las presentes notas, nos enfocaremos al Microsoft Macro
Assembler v4.0. Los programas ejemplo han sido desarrollados con ste y est
garantizado su funcionamiento. Estos mismos programas posiblemente funcionen
con otros ensambladores sin cambios o con cambios mnimos cuando utilizan
directivas o pseudoinstrucciones. Realmente la diferencia entre los ensambladores
radica en la forma de generar el cdigo y en las directivas con que cuente, aunque
estas diferencias son mnimas. El cdigo ensamblador no cambia puesto que los
microprocesadores con los que se va a trabajar son comunes. As, todos los
programas que se creen con un ensamblador en particular podrn ser
ensamblados en otro, cambiando las pseudo-operaciones no reconocidas por el
equivalente indicado en el manual de referencia del paquete empleado
Programa
MASM.EXE
SYMDEB.EXE

Descripcin
Microsoft Macro Assembler
Microsoft Symbolic Debuger Utility

LINK.EXE

Microsoft 8086 object linker

MAPSYM.EXE

Microsoft Symbol File Generator

CREF.EXE

Microsoft Cross-Reference Utility

LIB.EXE

Microsoft Library Manager

MAKE.EXE

Microsoft Program Maintenance Utility

EXEPACK.EXE

Microsoft EXE File Compression Utility

EXEMOD.EXE

Microsoft EXE File Header Utility

COUNT.ASM

Sample source file for SYMDEB session

README.DOC

Updated information obtained after the manua was printed.

2.2 Ciclos Numricos


Comencemos por los sistemas de numeracin que ms utilizaremos al programar.
El bsico va a ser el sistema hexadecimal, aunque debemos de explicar antes el
binario, el sistema de numeracin que utiliza el ordenador. Los nmeros que
conocemos estn escritos en base 10. Esto significa que tenemos, desde el 0
hasta el 9, diez smbolos para representar cada cifra. Es decir, cada cifra ir de 0 a
9, y al superar el valor "9", cambiar a 0 y sumar uno a su cifra de la izquierda:
9+1: 10.
El sistema binario utiliza tan slo dos smbolos, el "0" y el "1". Imaginemos que
tenemos el nmero binario "0". Al sumarle una unidad, este nmero binario
cambiar a "1". Sin embargo, si volvemos a aadirle otra unidad, a este nmero en
formato binario ser el "10" (aumenta la cifra a la izquierda, que era 0, y la anterior
toma el valor mnimo).

Sumemos ahora otra unidad: el aspecto del nmero ser


decimal). Y podramos seguir:

"11" (tres en

Binario : 0 ; 1 ; 10 ; 11 ; 100 ; 101 ; 110; 111 ; 1000 ; 1001 ;


1010,...

Decimal: 0 1

10

Esto nos permite establecer un sistema bastante sencillo de conversin del


binario al decimal;

He aqu los valores siendo n el valor de la cifra:


Cifra menos significativa:
n*2^0 =

1 si n=1 o 0 si n=0

Segunda cifra:
n*2^1 =

2 si n=1 o 0 si n=0

Tercera cifra:
n*2^2 =

4 si n=1 o 0 si n=0

Cuarta cifra:
n*2^3 =

8 si n=1 o 0 si n=0

etc.,...

Y as continuaramos, aumentando el nmero al que se eleva 2.


Traduzcamos entonces el nmero binario '10110111'

2^7+ 0 +2^5+2^4+ 0 +2^2+2^1+2^0 = 128 + 0 + 32 + 16 + 4 + 2 + 1 = 183


1

De todos modos, esta transformacin la he puesto simplemente para que se


comprenda con ms claridad cmo funcionan los nmeros binarios. Es mucho
ms aconsejable el uso de una calculadora cientfica que permita realizar
conversiones entre decimales, hexadecimales y binarios. Se hace su uso ya casi
imprescindible al programar. La razn del uso de los nmeros binarios es sencilla.
Es lo que entiende el ordenador, ya que interpreta diferencias de voltaje como
activado (1) o desactivado (0), aunque no detallar esto. Cada byte de informacin
est compuesto por ocho dgitos binarios, y a cada cifra se le llama bit. El nmero
utilizado en el ejemplo, el 10110111, sera un byte, y cada una de sus ocho cifras,

un bit. Y a partir de ahora, cuando escriba un nmero binario, lo har con la


notacin usual, con una "b" al final del nmero (ej: 10010101b)
La conversin a hexadecimal es muy utilizada en ensamblador, se trata de un
sistema de numeracin en base diecisis. Por tanto, hay diecisis smbolos para
cada cifra, y en vez de inventarse para ello nuevos smbolos, se decidi adoptar
las primeras letras del abecedario. Por lo tanto, tendremos ahora:

Hex Dec
1 --> 1
2 --> 2
3 --> 3
4 --> 4
5 --> 5
6 --> 6
7 --> 7
8 --> 8
9 --> 9
A --> 10
B --> 11
C --> 12
D --> 13
E --> 14
F --> 15
10 --> 16
11 --> 17
Etc,...

Como vemos, este sistema nos planteas bastantes problemas para la conversin,
una calculadora cientfica ser casi imprescindible para realizar esta operacin.

Por que utilizar este sistema? Bien sencillo. Volvamos al byte, y traduzcamos su
valor ms alto, "11111111". Resulta ser 256. Ahora pasemos esta cifra al sistema
hexadecimal, y nos resultar "FF". Obtenemos un nmero ms comprensible que
el binario (difcil de recordar), y ante todo mucho ms compacto, en el que dos
cifras nos representaran cada byte. Podremos adems traducir fcilmente el
binario a hexadecimal con esta tabla; cada cuatro cifras binarias pueden traducirse
al hexadecimal:

Binari
o

Hexadecim
al

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

Por ejemplo, el nmero binario:


1111 0011 1010 1110

En hexadecimal sera:
1111 0011 1010 1110
F

Para referirnos a un nmero hexadecimal sin especificarlo, usaremos la notacin


que se suele usar al programar, con un 0 al principio (necesario cuando hay letras)
y una h al final, por ejemplo, el nmero anterior sera 0F3AEh

2.3 Captura bsica de cadenas


2.4 Comparacin y prueba

2.5 Saltos
Los saltos incondicionales en un programa escrito en lenguaje ensamblador estn
dados por la instruccin jmp, un salto es alterar el flujo de la ejecucin de un
programa enviando el control a la direccin indicada.
2.6 Ciclos condicionales
Un ciclo, conocido tambin como iteracin, es la repeticin de un proceso un cierto
nmero de veces hasta que alguna condicin se cumpla. En estos ciclos se
utilizan los brincos "condicionales" basados en el estado de las banderas. Por
ejemplo la instruccin jnz que salta solamente si el resultado de una operacin es
diferente de cero y la instruccin jz que salta si el resultado de la operacin es
cero.

2.7 Incremento y decremento

2.8 Captura de cadenas con formato


Las instrucciones de manejo de cadenas difieren de las dems instrucciones del
8086 en que pueden accesar memoria e incrementar y decrementar un registro
apuntador en una sola instruccin.
Como su nombre implica, las instrucciones de cadena son particularmente tiles
en la manipulacin de cadenas de caracteres. Son tambin adecuadas para el
manejo de arreglos, bfers de datos y todo tipo de cadenas de bytes y palabras.
Adems, generan menos cdigos y son ms rpidas que las combinaciones
equivalentes de instrucciones normales del 8086, tal como LOOP, INC y MOV.
Las instrucciones de cadena pueden agruparse en los siguientes grupos
funcionales: instrucciones usadas para el movimiento de datos (LODS, STOS y
MOVS) e instrucciones de cadena para inspeccin y comparacin de datos (SCAS
y CMPS).

2.9 Instrucciones aritmticas


Las instrucciones de las operaciones lgicas son: AND, NOT, OR y XOR, stas
trabajan sobre los bits de sus operandos. Para verificar el resultado de
operaciones recurrimos a la instruccin CMP. Las instrucciones utilizadas para las
operaciones algebraicas son: para sumar ADD, para restar SUB, para multiplicar
MUL y para dividir DIV.
Casi todas las instrucciones de comparacin estn basadas en la informacin
contenida en el registro de banderas. Normalmente las banderas de este registro
que pueden ser directamente manipuladas por el programador son la bandera de
direccin de datos DF, usada para definir las operaciones sobre cadenas. Otra
que tambin puede ser manipulada es la bandera IF por medio de las
instrucciones STI y CLI, para activar y desactivar respectivamente las
interrupciones.

A continuacin explicaremos brevemente las instrucciones aritmticas y lgicas


por separado:
OPERACIONES ARITMTICAS:
Las operaciones en aritmtica binaria a entera permiten a la CPU realizar clculos
con nmeros enteros positivos y negativos con una representacin en
complemento a 2.
NEG operando: cambia el signo del operando. Equivaldra al NOT del nmero y
le sumara 1.
ADD destino, fuente: destino = destino + fuente.
ADC destino, fuente: destino = destino + fuente + carry (acarreo).
SUB destino, fuente: destino = destino - fuente.
SBB destino, fuente: destino = destino - (fuente + acarreo).
MUL operando: multiplica sin considerar el signo. Multiplica el acumulador {AL}
o {AX}por el operando fuente. Si el operando fuente es de tipo byte, el resultado se
almacena en AX y si es de tipo palabra el resultado se almacena en AX la parte
inferior y en DX la palabra superior.
Si tipo fuente = byte:
AX = AL * fuente (multiplicacin sin signo)
Si tipo fuente = palabra:
DX, AX = AX * fuente (multiplicacin sin signo)
Si mitad superior (CF: acarreo) del resultado = 0
En CC CF = 1
IMUL operando: multiplica considerando el signo.
DIV operando: divide sin considerar el signo, un nmero contenido en el
acumulador entre el operando fuente. El cociente se almacena en el acumulador.
El resto se almacena en la extensin del acumulador. Si la extensin de AX ser
DX (que ocurrir cuando sea de tipo palabra), la operacin y la extensin de AL
ser AH.
IDIV operando: igual que el DIV pero considerando el signo.
CBW: pasa de byte a palabra el contenido del acumulador.
CWD: pasa de palabra a doble palabra el contenido del acumulador.

INC destino: incrementa el destino.


DEC destino: decrementa el destino.

2.10 Manipulacin de la pila


La pila conserva los datos de la BIOS cuando el ordenador est apagado. Dura
mucho (unos tres aos de media), pero al final se agota. Para cambiarla, apunte
todos los datos de la BIOS, desconecte todo y sustityala por una igual, o bien por
un paquete externo de bateras que se conectan a un jumper (un microinterruptor)
de la placa base; ambas cosas las debera encontrar en tiendas de electrnica.
Despus conecte todo, arranque el ordenador, entre en la BIOS y reintroduzca
todos los datos, ya que se habrn borrado. Se imagina si no tuviera una copia
escrita qu aventura? A m me pas hace aos, y no me qued ms remedio que
aprender sobre BIOS... bueno, no hay mal que por bien no venga.

2.11 Obtencin de cadena con representacin


2.12 Instrucciones lgicas
OPERACIONES LGICAS:

Hay cuatro operaciones bsicas que se pueden realizar con un nmero binario, y
coinciden con operaciones de la lgica matemtica, con lo que cualquiera que la
haya estudiado tendr cierta ventaja para entenderla. Para explicarlas, llamar al
valor 0 resultado "falso", y al valor 1 "verdadero". Las operaciones son AND, OR,
XOR y NOT

AND

Es un 'y' lgico. Se realiza entre dos cifras binarias confrontando cada cifra con su
correspondiente, y el resultado ser "1" si las dos son verdaderas (si las dos valen
"1), y "0" (falso) en el resto de los casos.

AND
1er.
numero

2do.
numero

Resultado

Vuelvo a la lgica para explicarlo ms claramente: Imaginemos la frase: "El


hombre es un mamfero y camina erguido". El hecho de que el hombre sea un
mamfero es cierto (1), y el de que camine erguido, otro (1). Por lo tanto, al unirlos
mediante una conjuncin (y o AND), resulta que ya que se dan las dos, la
oracin es verdadera.

Pongamos un ejemplo ms complejo, queremos realizar un AND lgico


entre dos bytes:
11011000 AND 01101001

Observemos lo que sucede:


11011000
01101001
En sistema decimal sera: AND
mas lioso)

216

AND

105 (aunque en sistema decimal 01001000 es

Cuando coinciden dos valores de "verdad", el resultado es "verdad", si uno es


falso, el resultado es "falso" (no es verdad que "El hombre es un mamfero y

respira debajo del agua), y si los dos son falsos, el resultado es falso (no es cierto
que "El hombre es un ave y respira debajo del agua)
OR
El "o" lgico. El resultado es "verdadero" cuando al menos uno de los factores es
verdadero. O sea, es "1" cuando al menos uno de los dos factores es "1". Sera
como la frase "Voy a buscar el peine o la caja de bombones", donde que uno sea
cierto no significa que el otro no lo sea; es cierta la frase, es verdadera mientras
uno de los trminos sean verdaderos.
Operemos con los nmeros "10100110" y "01101100":

10100110

OR

01101100

-------- 11101110

Como hemos visto, el valor 1 (verdadero) queda en las cifras de las que,
confrontadas, al menos una es verdadera. Slo resulta 0 (falso) si los dos nmeros
enfrentados son 0 (falsos).

XOR

"OR" exclusivo. Se trata de una orden parecida al OR, tan slo que la verdad de
una excluye la de la otra. El resultado, por tanto, es "1" (verdad) cuando uno y slo
uno de los dos nmeros es verdadero (y el otro falso, claro). Sera como la oracin
"O vivo o estoy muerto", para que sea cierta se tiene que dar una de las dos, pero
nunca las dos o ninguna.

10111001

XOR 01011101

--------

11100100

La orden XOR va a ser bastante til en encriptacin, pero eso ya es otra


historia,...

NOT

Esto se aplica sobre un slo nmero, y en trminos de lgica sera la negacin de


una oracin, o sea, si el nmero al que se aplica es 1 el resultado es 0, y
viceversa. En trminos de lgica matemtica aplicndolo a una oracin, sera por

ejemplo, " No es verdad que tenga ganas de estudiar y de no beber ", negando las
otras dos que en caso contrario seran verdad:

NOT 11100110

--------

00011001

Se usan para realizar operaciones a nivel de bits.


NOT operando: cambia los bits 1 por 0 y viceversa y devuelve el resultado en el
mismo operando.
AL = F2h AL 1111 0010
NOT AL; NOT AL 0000 1101 = Odh
OR destino, fuente: operacin o lgico inclusivo. El resultado se almacena en
destino.
AX = FEDCh= 1111 1110 1101 1100
BX = 1234 h = 0001 0010 0011 0100
OR AX, BX 1111 1110 1111 1100 = FEFC h
AND destino, fuente: la operacin Y lgica entre 2 operandos, el resultado se
deja en destino.
AX = FEDC h 1111 1110 1101 1100
BX = 1234 h 0001 0010 0011 0100
ADD AX, BX 0001 0010 0001 0100 = 1214 h
XOR destino, fuente: la operacin o lgico exclusiva; el resultado se deja en
destino.
AX = FEDC h 1111 1110 1101 1100
BX = 1234 h 0001 0010 0011 0100
XOR AX, BX 1110 1100 1110 1000 = ECE8 h

2.13 Desplazamiento y rotacin


2.14 Obtencin de una cadena con la representacin hexadecimal

2.15 Captura y almacenamiento de datos numricos

2.16 Operaciones bsicas sobre archivos de disco

UNIDAD 3
MODULARIZACIN
Bsicamente es crear varias rutinas (funciones o procedimientos) y as segmentar
el cdigo y hacerlo ms entendible para el programador ya sea para
actualizaciones o depuraciones.

Un mdulo es un segmento, rutina, subrutina, sub algoritmo o procedimiento, que


puede definirse dentro de un algoritmo con el fin de ejecutar una tarea especfica y
puede ser llamado o invocado desde el algoritmo principal cuando sea necesario

RED CONCEPTUAL DE LA UNIDAD

3.1 Procedimientos

Modularizacin

3.2 Macros

Objetivo General de la Unidad:


Realizar investigaciones sobre los conceptos macro y procedimiento,
analizando sus semejanzas y diferencias.
Analizar el funcionamiento de un programa que no utiliza macros o
procedimientos en su funcionamiento, todo esto utilizando un software que
permita obtener datos estadsticos del funcionamiento de los programas en
depuracin.
Desarrollar programas en un lenguaje de programacin que haga uso de
macros o procedimientos, posteriormente analizar el funcionamiento interno
de los programas desarrollados haciendo el uso del software que permita
obtener datos estadsticos sobre el funcionamiento de los mismos.

3.1 Procedimientos
Los procedimientos o rutinas, que son una serie de pasos que se usarn
repetidamente en el programa y en lugar de escribir todo el conjunto de pasos
nicamente se les llama por medio de la instruccin call.
Un procedimiento en ensamblador es aquel que inicie con la palabra Proc y
termine con la palabra ret.
Realmente lo que sucede con el uso de la instruccin call es que se guarda en la
pila el registro IP y se carga la direccin del procedimiento en el mismo registro,
conociendo que IP contiene la localizacin de la siguiente instruccin que
ejecutara la UCP, entonces podemos darnos cuenta que se desva el flujo del
programa hacia la direccin especificada en este registro. Al momento en que se
llega a la palabra ret se saca de la pila el valor de IP con lo que se devuelve el
control al punto del programa donde se invoc al procedimiento.
Es posible llamar a un procedimiento que se encuentre ubicado en otro segmento,
para esto el contenido de CS (que nos indica que segmento se est utilizando) es
empujado tambin en la pila.
La manera ms fcil de construir el programa en mdulos, es dividirlo en dos o
ms partes. Para esto, es necesario que datos, smbolos, y dems valores de un
mdulo sean reconocidos por el otro u otros mdulos. Para este tipo de
declaraciones globales existen dos directivas:

PUBLIC nombre,,,
que hace la variable, etiqueta o smbolo absoluto
disponible para todos los programas.

EXTRN nombre:tipo,,, que especifica una variable, etiqueta o smbolo


externos identificados por nombre y tipo (que puede ser BYTE, WORD, DWORD,
QWORD, TBYTE, NEAR, FAR, o ABS, ste ltimo para nmeros absolutos).

El siguiente ejemplo ilustra el uso de las directivas. El primer listado corresponde


al mdulo principal, mientras que el segundo al mdulo que contiene una rutina.
Ambos mdulos son archivos que se editan por separado, se ensamblan por
separado, pero se ligan juntos.

MODULO PRINCIPAL: MAIN.ASM

stack

NAME

main

PUBLIC

exit

EXTRN

print:near

SEGMENT word stack 'STACK'


DW

64 DUP(?)

stack

ENDS

data

SEGMENT word public 'DATA'

data

ENDS

code

SEGMENT byte public 'CODE'


ASSUME cs:code, ds:data

start:
mov ax,data

; carga localizacion del segmento

mov ds,ax

; en el registro DS

jmp print

; va a PRINT en el otro modulo

exit:
mov ah,4ch
int
code

21h

ENDS
END start

SUBMODULO: TASK.ASM

data

NAME

task

PUBLIC

print

EXTRN

exit:near

SEGMENT word public 'DATA'

entrada DB

"Entrando a un submodulo....",13,10,"$"

salida

DB

".......saliendo del submodulo.",01,07,13,10,"$"

data

ENDS

code

SEGMENT byte public 'CODE'


ASSUME

cs:code, ds:data

print:
mov

ah,06h

; Funcion para borrar pantalla

mov

al,0

; todas las lineas

mov

cx,0

; de 0,0

mov

dh,24d

mov

dl,79d

mov

bh,0

; atributo en lineas vacias

int

10h

; Servicio de e/s video

mov

dx, OFFSET entrada

mov

ah,09h

int

21h

mov

dx, OFFSET salida

int

21h

jmp
code

exit

; Regresa al otro modulo

ENDS
END

3.2 Macros
La declaracin de macros se hace a travs de las directivas MACRO y ENDM. Su
sintaxis es:

nombre MACRO [parmetros,,,]


declaraciones
ENDM

Los parmetros son los valores que se substituirn en la macro cada vez que se
haga referencia a sta.
Para la definicin de procedimientos se emplean las directivas PROC y ENDP. Su
sintaxis es:
nombre PROC [distancia]
sentencias
nombre ENDP

La distancia, que puede ser NEAR (default) o FAR permiten indicar el tipo de
acciones a realizar en brincos y llamados a subrutinas. nombre se puede usar
como direccin en llamados o brincos.

UNIDAD 4
PROGRAMACIN DE DISPOSITIVOS
Los dispositivos externos como terminales, impresoras y manejadores de disco, se
comunican con el microprocesador va los puertos de E/S. Un byte de 8 bits o una
palabra de 16 bits puede ser transferido a travs de un puerto de E/S. Dentro del
8086, los datos deben ser enviados siempre (o recibidos) del registro acumulador,
AX. En los casos en que se transfieren nicamente 8 bits, se usa la mitad baja del
acumulador, AL. La direccin de
E/S se especifica como el contenido del registro DX, o como un valor inmediato
contenido en la instruccin. En el caso posterior, solamente los primeros 256
puertos de E/S (direcciones de E/S 00h a FFh) pueden ser accesadas. Se
muestran a continuacin ejemplos de uso de las instrucciones IN y OUT.
RED CONCEPTUAL DE LA UNIDAD

4.1 El buffer de video en modo texto

4.2 Acceso a discos en lenguaje ensamblador

4.3 Programacin del puerto serial


Programacin de
Dispositivos

4.4 Programacin del puerto paralelo

4.5 Programacin hbrida

4.6 Programacin de puerto USB

Objetivo General de la Unidad:


Analizar el funcionamiento del buffer de video de una computadora,
mediante la lectura en modo texto del mismo.
Desarrollar programas en lenguaje ensamblador para acceder a los
dispositivos de almacenamiento de la computadora.
Disear una interfaz de hardware utilizando algn tipo de integrado
programable.
Disear una interfaz de software en algn lenguaje de programacin para
controlar la interfaz de hardware utilizando los puertos paralelos, seriales y
USB de la computadora.

4.1 El buffer de video en modo texto


Buffer:
Es la ubicacin de la memoria de un dispositivo digital o una computadora que
est reservada para el almacenamiento temporal de informacin. Mientras los
datos estn en el buffer, aguardan para ser procesados.
Un ejemplo de buffer tiene lugar cuando se intenta ejecutar aplicaciones de audio
video directamente desde Internet, sin descargarlas a la computadora. Est
prctica, conocida como streaming, requiere de la utilizacin de un buffer para
reducir el riesgo de que se corte la reproduccin ante problemas en el ancho de
banda.

4.2 Acceso a discos en lenguaje ensamblador


4.3 Programacin del puerto serial
4.4 Programacin del puerto paralelo
4.5 Programacin hibrida
4.6 Programacin de puerto USB

BIBLIOGRAFIA
Abel, P. (1966). Lenguaje Ensamblador y Programacin para PC IBM y compatibles. USA:
Pearson.
KIP R. Irvine, Lenguaje ensamblador para computadoras basadas en Intel,
Pearson Prentice Hall, 5 edicin, 2008.
Luna, C. (2004). Lenguaje Ensamblador. Recuperado el 12 de Septiembre de 2014, de
http://leng-ensam.wikispaces.com/file/view/Antologia+Lenguaje+Ensamblador.pdf
Rincn, L. (2012). Conceptos Bsicos sobre programacin en ensamblador. Recuperado
el 15 de Octubre de 2014, de http://dac.escet.urjc.es/docencia/ETC-ITIG_LADE/teoriacuat1/tema9_conceptos_basicos_ensamblador.pdf

Vous aimerez peut-être aussi