Sei sulla pagina 1di 91

Lenguaje de interfaz

Instituto Tecnolgico de Lzaro Crdenas


Profesor:
Ing. Pablo Reynaldo
Materia:
Lenguaje de interfaz
Elaborado por:
Carlos Hctor Cruz Lpez

Temario


1
ndice
Unidad 1 Introduccin al lenguaje ensamblador .............................................................. 3
1.1 Importancia de la programacin en lenguaje ensamblador .......................................... 3
1.2 El procesador y sus registros internos ........................................................................... 4
1.3 La memoria principal (RAM) ..................................................................................... 11
1.4 El concepto de interrupciones ..................................................................................... 12
1.5 Llamadas a servicios del sistema ................................................................................ 17
1.6 Modos de direccionamiento ........................................................................................ 18
1.7 Proceso de ensamblado y ligado ................................................................................. 23
1.8 Desplegado de mensajes en el monitor ....................................................................... 24
Unidad 2 Programacin bsica ......................................................................................... 26
2.1 Ensamblador (y ligador) a utilizar .............................................................................. 26
2.2 Ciclos numricos ......................................................................................................... 27
2.3 Captura de cadenas ..................................................................................................... 28
2.4 Comparacin y prueba ................................................................................................ 29
2.5 Saltos ........................................................................................................................... 30
2.6 Ciclos condicionales ................................................................................................... 31
2.7 Incremento y decremento ............................................................................................ 32
2.8 Captura de cadenas con formato ................................................................................. 33
2.9 Instrucciones aritmticas ............................................................................................. 33
2.10 Manipulacin de la pila ............................................................................................. 34
2.11 Obtencin de cadena con representacin decimal .................................................... 35
2.12 Instrucciones lgicas ................................................................................................. 36
2.13 Desplazamiento y rotacin ........................................................................................ 36
2.14 Obtencin de una cadena con la representacin hexadecimal .................................. 37


2
2.15 Captura y almacenamiento de datos numricos ........................................................ 39
2.16 Operaciones bsicas sobre archivos de disco ........................................................... 41
Unidad 3 Modularizacin .................................................................................................. 44
3.1 Procedimientos ............................................................................................................ 44
3.2 Macros ........................................................................................................................ 45
Unidad 4 Programacin de dispositivos ........................................................................... 46
4.1 El buffer de video en modo texto ................................................................................ 46
4.2 Acceso A Discos En Lenguaje Ensamblador ............................................................. 47
4.3 Programacin Del Puerto Serial ................................................................................. 49
4.4 Programacin Del Puerto Paralelo .............................................................................. 50
4.5 Programacin Hbrida ................................................................................................. 51
4.6 Programacin De Puerto USB (Universal Serial Bus) ............................................... 52
Programas ........................................................................................................................... 54





3
Unidad 1 Introduccin al lenguaje ensamblador
1.1 Importancia de la programacin en lenguaje ensamblador
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.
Para programar en ensamblador debes conocer algunos aspectos extra: debes comprender
no slo las instrucciones que vas a usar sino tambin la arquitectura de la mquina,
necesitas saber cmo se almacenan los datos, como el procesador manipula los datos, etc.
Cuando programas en lenguajes de bajo nivel debes hacer ms que solo describir la
solucin formal del programa, debes dividir el programa en pasos pequeos y bsicos.
Estos pasos le dirn al procesador que hacer, una instruccin a la vez.
La recompensa de aprender y practicar con el lenguaje ensamblador es desarrollar una idea
slida de cmo opera una computadora, adems de escribir programas rpidos y pequeos
para ejecutar tareas que no son prcticas (demasiado lentas) o no son posibles o demasiado
complejas en lenguajes de alto nivel.
A pesar del hecho de que codificar en un lenguaje de alto nivel es ms productivo, alguna
de las ventajas de codificar en lenguaje ensamblador son:
Proporciona ms control sobre el manejo particular de los requerimientos de
hardware.
Genera mdulos ejecutables ms pequeos y ms compactos.
Con mayor probabilidad tiene una ejecucin ms rpida
Uso y aplicaciones del lenguaje ensamblador


4
El uso del lenguaje ensamblador le permite al programador indicarle al computador
exactamente cmo llevar a cabo una tarea especfica usando la menor cantidad de
instrucciones. Aun cuando el cdigo generado por los compiladores con opcin de
optimizacin es eficiente, la optimizacin manual puede resultar en una mejora sustancial
en trminos de rendimiento y consumo de memoria. El lenguaje ensamblador es
usualmente utilizado en las siguientes circunstancias:
Mejorar la eficiencia de una rutina especfica que se ha transformado en un cuello
de botella.
Obtener acceso a funciones de bajo nivel del procesador para realizar tareas que no
son soportadas por los lenguajes de alto nivel.
Escribir manejadores de dispositivos para comunicarse directamente con hardware
especial tales como tarjetas de red.
Trabajar en ambientes con recursos limitados puede requerir el uso del lenguaje
ensamblador pues el cdigo ejecutable puede ser menor que el generado por el
compilador.
Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran
bsicamente en aplicaciones de tiempo real, control de procesos y de dispositivos
electrnicos.
1.2 El procesador y sus registros internos
Debe parecer un poco lento el que el procesador trabaje slo con la memoria primaria, cada
byte a ser usado debe ser transferido y regresado. Sin embargo hay una pequea cantidad de
memoria construida dentro del procesador. Esta memoria consiste de 14 palabras de
memoria read-write. Cada una de estas palabras es llamada un registro y cada registro tiene
su propio nombre y propsito.
Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar
direccionamiento de memoria y proporcionar capacidad aritmtica. Son reas del
almacenamiento dentro del procesador, usadas para almacenar datos con los cuales est
trabajando el procesador en un momento dado de la ejecucin de una instruccin. Los
registros son direccionables por medio de un nombre. Los bits por convencin, se numeran
de derecha a izquierda, como en:


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

Algunas caractersticas de los Registros internos
Cada Procesador contiene cierto nmero de estos.
Los registros son la memoria ms rpida de la PC.
La mayora de las operaciones se realizan en los registros.
El ancho de los registros (en bits), determina cuanta informacin puede manejar.
El tamao del procesador est ligado a los registros internos.
Los registros internos del procesador se pueden clasificar en 6 tipos diferentes:
Registros de segmento.
Registros de propsito general.
Registros de apuntadores.
Registros de banderas.
Registros de Puntero de instruccin.
Registros de Pila.
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.


6
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.
Registro 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
Los registros de propsito general AX, BX, CX y DX son los caballos de batalla del
sistema. 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 l 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.


7

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. Los procesadores 80386 y posteriores tienen un apuntador de pila de
32 bits, el registro ESP. El sistema maneja de forma automtica estos registros.
En el ejemplo siguiente, el registro SS contiene la direccin de segmento 27B3[0]H y el SP
el desplazamiento 312H. Para encontrar la palabra actual que est siendo procesada en la
pila, la computadora combina las direcciones en el SS y el SP:
Registro BP. El BP de 16 bits facilita la referencia de parmetros, los cuales son datos y
direcciones transmitidos va pila. Los procesadores 80386 y posteriores tienen un BP
ampliado de 32 bits llamado el registro EBP.
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. Los
procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el
ESI.


8
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. Los
procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el
EDI.
Registro de Banderas
De los 16 bits del registro de banderas, nueve son comunes a toda la familia de
procesadores 8086, y 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. En resumen, los bits de las banderas comunes son como sigue:
OF (Overflow, desbordamiento). Indica desbordamiento de un bit de orden alto (mas a la
izquierda) despus de una operacin aritmtica.
DF (direccin). Designa la direccin hacia la izquierda o hacia la derecha para mover o
comparar cadenas de caracteres.
IF (interrupcin). Indica que una interrupcin externa, como la entrada desde el teclado,
sea procesada o ignorada.
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.
SF (signo). Contiene el signo resultante de una operacin aritmtica (0 = positivo y 1 =
negativo).
ZF (cero). Indica el resultado de una operacin aritmtica o de comparacin (0 = resultado
diferente de cero y 1 = resultado igual a cero).
AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para
aritmtica especializada.


9
PF (paridad). Indica paridad par o impar de una operacin en datos de 8 bits de bajo orden
(mas a la derecha).
CF (acarreo). Contiene el acarreo de orden ms alto (ms a la izquierda) despus de una
operacin aritmtica; tambin lleva el contenido del ultimo bit en una operacin de
corrimiento o de rotacin. Las banderas estn en el registro de banderas en las siguientes
posiciones:
Las banderas ms importantes para la programacin en ensamblador son O, S, Z y C, para
operaciones de comparacin y aritmticas, y D para operaciones de cadenas de caracteres.
Los procesadores 80286 y posteriores tienen algunas banderas usadas para propsitos
internos, en especial las que afectan al modo protegido.
Registros de PILA
La pila es un rea de memoria importante y por ello tiene, en vez de uno, dos registros que
se usan como desplazamiento (offset) para apuntar a su contenido. Se usan como
complemento al registro y son:
SP- Stack Pointer: Se traduce como puntero de pila y es el que se reserva el
procesador para uso propio en instrucciones de manipulado de pila. Por lo general,
el programador no debe alterar su contenido.
BP- Base pointer: Se usa como registro auxiliar. El programador puede usarlo para
su provecho.
Indicadores (flags)
Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits ms
significativos estn indefinidos, mientras que hay tres bits con valores determinados: los
bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno (esto tambin ocurra en los
procesadores anteriores).
CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) hacia, o
"prstamo" (en caso de resta) desde el bit de orden ms significativo del resultado. Este
indicador es usado por instrucciones que suman o restan nmeros que ocupan varios bytes.


10
Las instrucciones de rotacin pueden aislar un bit de la memoria o de un registro
ponindolo en el CF.
PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un nmero par
de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones.
AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "prstamo" del
nibble (cuatro bits) menos significativo al nibble ms significativo. Este indicador se usa
con las instrucciones de ajuste decimal.
ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operacin es cero.
SF (Sign Flag, bit 7): Refleja el bit ms significativo del resultado. Como los nmeros
negativos se representan en la notacin de complemento a dos, este bit representa el signo:
0 si es positivo, 1 si es negativo.
TF (Trap Flag, bit 8): Si vale 1, el procesador est en modo paso a paso. En este modo, la
CPU automticamente genera una interrupcin interna despus de cada instruccin,
permitiendo inspeccionar los resultados del programa a medida que se ejecuta instruccin
por instruccin.
IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupcin externas
enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las
interrupciones no enmascarables y las internas siempre se reconocen independientemente
del valor de IF. DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirn
"auto-decremento", esto es, se procesarn las cadenas desde las direcciones ms altas de
memoria hacia las ms bajas. Si vale 0, habr "auto-incremento", lo que quiere decir que las
cadenas se procesarn de "izquierda a derecha".
OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operacin aritmtica con
signo, esto es, un dgito significativo se perdi debido a que tamao del resultado es mayor
que el tamao del destino.


11
1.3 La memoria principal (RAM)
Se denomina Memoria a los circuitos que permiten almacenar y recuperar la informacin.
En un sentido ms amplio, puede referirse tambin a sistemas externos de almacenamiento,
como las unidades de disco o de cinta. Memoria de acceso aleatorio o RAM (Random
Access Memory) es la memoria basada en semiconductores que puede ser leda y escrita
por el microprocesador u otros dispositivos de hardware.
La memoria RAM (Random Access Memory) o memoria de acceso aleatorio de
lectura/escritura voltil, se dispone como una _hoja de trabajo_ para almacenamiento
temporal y ejecucin de programas. En la memoria de acceso aleatorio (RAM), las celdas
de la memoria pueden accesarse para la transferencia de informacin en cualquier posicin
aleatoria deseada. Esto es, el proceso de ubicar una palabra en la memoria es igual y
requiere la misma cantidad de tiempo, sin importar la ubicacin fsica de las celdas en la
memoria.
Existen dos tipos de memorias RAM: Las RAM estticas o SRAM y las RAM dinmicas o
DRAM. En una RAM esttica (SRAM) el valor almacenado en una celda se mantiene
mediante un par de inversores y, mientras se suministre electricidad, el valor puede
mantenerse indefinidamente. En una RAM dinmica (DRAM), el valor almacenado en una
celda se mantiene como una carga en un condensador. Para acceder a la carga almacenada
se usa slo un transistor, tanto para leer el valor como para sobrescribirlo. Debido a que las
DRAMs slo usan un transistor por bit de almacenamiento, son mucho ms densas y el
precio por bit es menor. En comparacin, las SRAMs requieren entre cuatro y seis
transistores por bit. En las DRAMs la carga se almacena en un condensador, por lo tanto no
puede mantenerse indefinidamente y debe refrescarse peridicamente.
Caractersticas de la memoria principal (RAM)
Un sistema de memoria se puede clasificar en funcin de muy diversas caractersticas.
Entre ellas podemos destacar las siguientes: localizacin de la memoria, capacidad, mtodo
de acceso y velocidad de acceso. En el caso de la memoria RAM (tambin denominada
memoria principal o primaria) se puede realizar la siguiente clasificacin:
Localizacin: Interna (se encuentra en la placa base)


12
Capacidad: Hoy en da no es raro encontrar ordenadores PC equipados con 64, 128
256 Mb de memoria RAM.
Mtodo de acceso: La RAM es una memoria de acceso aleatorio. Esto significa que
una palabra o byte se puede encontrar de forma directa, sin tener en cuenta los bytes
almacenados antes o despus de dicha palabra (al contrario que las memorias en
cinta, que requieren de un acceso secuencial). Adems, la RAM permite el acceso
para lectura y escritura de informacin.
Velocidad de acceso: Actualmente se pueden encontrar sistemas de memoria RAM
capaces de realizar transferencias a frecuencias del orden de los Gbps (gigabits por
segundo).
Tambin es importante anotar que la RAM es una memoria voltil, es decir, requiere de
alimentacin elctrica para mantener la informacin. En otras palabras, la RAM pierde toda
la informacin al desconectar el ordenador. En la actualidad hemos de disponer de la mayor
cantidad posible de sta, ya que estamos supeditados al funcionamiento ms rpido o ms
lento de nuestras aplicaciones diarias. La memoria RAM hace unos aos era muy cara, pero
hoy en da su precio ha bajado considerablemente.
1.4 El concepto de interrupciones
Una interrupcin no es ms que un evento que genera la ruptura de la ejecucin de un
programa para pasar a ejecutar otro relacionado con el evento causante de la interrupcin.
La interrupcin, desde el punto de vista del mecanismo que la activa, puede ser de tipo:
Hardware
Software
Las interrupciones de hardware, estn asociadas generalmente a un dispositivo fsico (reloj
del sistema, perifrico) y consisten en la activacin de una lnea para dar a conocer a la
UCP la Aparicin del evento asociado.
Las interrupciones de software consisten en instrucciones cuyo efecto es la ejecucin de
una rutina de servicio de interrupcin (se suelen usar para llamadas al sistema operativo
porque aslan software de usuario y de sistema).


13
Tabla de servicio de interrupcin
Cuando la computadora se enciende, el BIOS y el DOS establecen una tabla de servicios
de interrupcin en las localidades de memoria 000H-3FFH. La tabla permite el uso de 256
(100H) interrupciones, cada una con un desplazamiento: segmento relativo de cuatro bytes
en la forma IP:CS.
El operando de una instruccin de interrupcin como INT 05H identifica el tipo de
solicitud. Como existen 256 entradas, cada una de cuatro bytes, la tabla ocupa los primeros
1, 024 bytes de memoria, desde 000H hasta 3FFH. Cada direccin en la tabla relaciona a
una ruina de BIOS o del DOS para un tipo especfico de interrupcin. Por lo tanto los bytes
0-3 contienen la direccin para la interrupcin 0, los bytes 4-7 para la interrupcin 1, y as
sucesivamente:

Eventos de una interrupcin
Una interrupcin guarda en la pila el contenido del registro de banderas, el CS, y el IP. Por
ejemplo, la direccin en la tabla de INT 05H (que imprime la que se encuentra en la
pantalla cuando el usuario presiona Ctrl + PrtSC) es 0014H (05H x 4 = 14H). La operacin
extrae la direccin de cuatro bytes de la posicin 0014H y almacena dos bytes en el IP y
dos en el CS.
La direccin CS: IP entonces apunta al inicio de la rutina en el rea del BIOS, que ahora se
ejecuta. La interrupcin regresa va una instruccin IRET (regreso de interrupcin), que
saca de la pila el IP, CS y las banderas y regresa el control a la instruccin que sigue al
INT.
Tipos de interrupciones
Las interrupciones se dividen en dos tipos las cuales son: Externas y Internas. Una
interrupcin externa es provocada por un dispositivo externo al procesador. Las dos lneas


14
que pueden sealar interrupciones externas son la lnea de interrupcin no enmascarable
(NMI) y la lnea de peticin de interrupcin (INTR).
La lnea NMI reporta la memoria y errores de paridad de E/S. El procesador siempre acta
sobre esta interrupcin, aun si emite un CLI para limpiar la bandera de interrupcin en un
intento por deshabilitar las interrupciones externas. La lnea INTR reporta las peticiones
desde los dispositivos externos, en realidad, las interrupciones 05H a la 0FH, para
cronometro, el teclado, los puertos seriales, el disco duro, las unidades de disco flexibles y
los puertos paralelos.
Una interrupcin interna ocurre como resultado de la ejecucin de una instruccin INT o
una operacin de divisin que cause desbordamiento, ejecucin en modo de un paso o una
peticin para una interrupcin externa, tal como E/S de disco. Los programas por lo comn
utilizan interrupciones internas, que no son enmascarables, para accesar los procedimientos
del BIOS y del DOS.
Interrupcin de BIOS
El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican el
estado de los dispositivos del sistema. El dos y los programas usuarios pueden solicitar
rutinas del BIOS para la comunicacin con los dispositivos conectados al sistema. El
mtodo para realizar la interfaz con el BIOS es el de las interrupciones de software. A
continuacin se listan algunas interrupciones del BIOS.
INT 00H: Divisin entre cero. Llamada por un intento de dividir entre cero. Muestra un
mensaje y por lo regular se cae el sistema.
INT 01H: Un solo paso. Usado por DEBUG y otros depuradores para permitir avanzar por
paso a travs de la ejecucin de un programa.
INT 02H: Interrupcin no enmascarare. Usada para condiciones graves de hardware, tal
como errores de paridad, que siempre estn habilitados. Por lo tanto un programa que emite
una instruccin CLI (limpiar interrupciones) no afecta estas condiciones.
INT 03H: Punto de ruptura. Usado por depuracin de programas para detener la ejecucin.


15
INT 04H: Desbordamiento. Puede ser causado por una operacin aritmtica, aunque por lo
regular no realiza accin alguna.
INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima. Emita la INT
05H para activar la interrupcin internamente, y presione las teclas Cltr + PrtSC para
activarla externamente. La operacin permite interrupciones y guarda la posicin del
cursor.
INT 08H: Sistema del cronometro. Una interrupcin de hardware que actualiza la hora del
sistema y (si es necesario) la fecha. Un chip temporizador programable genera una
interrupcin cada 54.9254 milisegundos, casi 18.2 veces por segundo.
INT 09H: Interrupcin del teclado. Provocada por presionar o soltar una tecla en el teclado.
INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y COM2,
respectivamente.
INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y LPT2,
respectivamente.
INT 0EH: Control de disco flexible. Seala actividad de disco flexible, como la
terminacin de una operacin de E/S.
INT 10H: Despliegue en vdeo. Acepta el nmero de funciones en el AH para el modo de
pantalla, colocacin del cursor, recorrido y despliegue.
INT 11H: Determinacin del equipo. Determina los dispositivos opcionales en el sistema y
regresa el valor en la localidad 40:10H del BIOS al AX. (A la hora de encender el equipo,
el sistema ejecuta esta operacin y almacena el AX en la localidad 40:10H).
INT 12H: Determinacin del tamao de la memoria. En el AX, regresa el tamao de la
memoria de la tarjeta del sistema, en trminos de kilobytes contiguos.
INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado del
disco, sectores ledos, sectores escritos, verificacin, formato y obtener diagnstico.
Interrupcin del DOS


16
Los dos mdulos del DOS, IO.SYS y MSDOS.SYS, facilitan el uso del BIOS. Ya que
proporcionan muchas de las pruebas adicionales necesarias, las operaciones del DOS por lo
general son ms fciles de usar que sus contrapartes del BIOS y por lo comn son
independientes de la maquina.
IO.SYS es una interfaz de nivel bajo con el BIOS que facilita la lectura de datos desde la
memoria hacia dispositivos externos.
MSDOS.SYS contiene un administrador de archivos y proporciona varios servicios. Por
ejemplo, cuando un programa usuario solicita la INT 21H, la operacin enva informacin
al MSDOS.SYS por medio del contenido de los registros. Para completar la peticin,
MSDOS.SYS puede traducir la informacin a una o ms llamadas a IO.SYS, el cual a su
vez llama al BIOS. Las siguientes son las relaciones implcitas:

Interrupciones del DOS
Las interrupciones desde la 20H hasta la 3FH estn reservadas para operaciones del DOS.
A continuacin se mencionan algunas de ellas.
INT 20H: Termina programa. Finaliza la ejecucin de un programa .COM, restaura las
direcciones para Cltr + Break y errores crticos, limpia los bfer de registros y regresa el
control al DOS. Esta funcin por lo regular seria colocada en el procedimiento principal y
al salir de el, CS contendra la direccin del PSP. La terminacin preferida es por medio de
la funcin 4CH de la INT 21H.
INT 21H: Peticin de funcin al DOS. La principal operacin del DOS necesita una
funcin en el AH.
INT 22H: Direccin de terminacin. Copia la direccin de esta interrupcin en el PSP del
programa (en el desplazamiento 0AH) cuando el DOS carga un programa para ejecucin. A


17
la terminacin del programa, el DOS transfiere el control a la direccin de la interrupcin.
Sus programas no deben de emitir esta interrupcin.
INT 23H: Direccin de Cltr + Break. Diseada para transferir el control a una rutina del
DOS (por medio del PSP desplazamiento 0EH) cuando usted presiona Ctlt + Break o Ctlr +
c. La rutina finaliza la ejecucin de un programa o de un archivo de procesamiento por
lotes. Sus programas no deben de emitir esta interrupcin.
INT 24H: Manejador de error crtico. Usada por el dos para transferir el control (por medio
del PSP desplazamiento 12H) cuando reconoce un error critico (a veces una operacin de
disco o de la impresora).Sus programas no deben de emitir esta interrupcin.
INT 25H: Lectura absoluta de disco. Lee el contenido de uno o ms sectores de disco.
INT 26H: Escritura absoluta de disco. Escribe informacin desde la memoria a uno o ms
sectores de disco.
INT 27H: Termina pero permanece residente (reside en memoria). Hace que un programa
.COM al salir permanezca residente en memoria.
INT 2FH: Interrupcin de multiplexion. Implica la comunicacin entre programas, como la
comunicacin del estado de un spooler de la impresora, la presencia de un controlador de
dispositivo o un comando del DOS tal como ASSIGN o APPEND.
INT 33H: Manejador del ratn. Proporciona servicios para el manejo del ratn.
1.5 Llamadas a servicios del sistema
La interfaz entre el sistema operativo y los programas de usuarios est definida por el
conjunto de llamadas al sistema ofrecidas por el sistema operativo. Las llamadas al sistema
con que cuenta la interfaz varan de un sistema operativo a otro. Puesto que el mecanismo
real para emitir una llamada al sistema depende mucho de la mquina y muchas veces debe
de expresarse en cdigo ensamblador, se proporciona una biblioteca de procedimientos que
permite hacer llamadas al sistema desde programas en C y tambin desde otros lenguajes.
En cierto sentido, efectuar una llamada al sistema es como efectuar una llamada a un


18
procedimiento especial, solo que las llamadas al sistema entran al kernel y las llamadas a
procedimientos no.
Se trata de que una aplicacin ejecute una rutina del sistema operativo, con objeto de que la
rutina le preste un servicio. Por ejemplo, cuando un programa desea abrir un fichero de
disco, llama a un servicio del sistema que le permite llevar a cabo sta tarea. Debe tenerse
en cuenta que una aplicacin no puede acceder directamente al disco, y debe hacerlo a
travs del sistema operativo.
Hay dos tipos de instrucciones relacionados con la llamada a servicios del sistema
operativo:
Syscall. Instruccin de llamada a un servicio del sistema operativo, a travs de su
API. Cuando una tarea ejecuta esta instruccin pasa el control al sistema operativo.

Sysret. Instruccin de retorno de un servicio. El sistema operativo ejecuta esta
instruccin justo antes de devolver el control a la tarea que solicit el servicio. Entre
la ejecucin de las instrucciones Syscall y Sysret, el sistema operativo accede al
espacio de memoria de la tarea. Por ejemplo, el sistema operativo escribe en una
estructura de datos de la tarea asociada a un fichero si la apertura del _chero se ha
completado con xito o no. Despus de ejecutar la instruccin Sysret, se ejecuta la
instruccin siguiente a la Syscall.

1.6 Modos de direccionamiento
El campo de operacin de una instruccin especifica la operacin que se va a ejecutar. Esta
operacin debe realizarse sobre algunos datos almacenados en registros de computadora o
en palabras de memoria. La manera en que eligen los operandos durante la ejecucin del
programa depende del modo de direccionamiento de la instruccin. El modo de
direccionamiento especifica una regla para interpretar o modificar el campo de direccin de
la instruccin antes de que se haga la referencia real al operando. Las computadoras utilizan
tcnicas de modo de direccionamiento para acomodar una o las dos siguientes
consideraciones:


19
Proporcionar al usuario versatilidad de programacin al ofrecer facilidades como
apuntadores a memoria, contadores para control de ciclo, indexacin de datos y
reubicacin de datos.
Reducir la cantidad de bits en el campo de direccionamiento de la instruccin.
La disponibilidad de los modos de direccionamiento proporciona al programador con
experiencia en lenguaje ensamblador la flexibilidad para escribir programas ms eficientes
en relacin con la cantidad de instrucciones y el tiempo de ejecucin.
Para comprender los diferentes modos de direccionamiento que se presentaran en esta
seccin, es imperativo entender el ciclo de operacin bsico de la computadora. La unidad
de control de una computadora est diseada para recorrer un ciclo de instrucciones que se
divide en tres fases principales:
Bsqueda de la instruccin de la memoria.
Decodificar la instruccin.
Ejecutar la instruccin.
Hay un registro en la computadora llamado contador de programa o PC, que lleva un
registro de las instrucciones del programa almacenado en la memoria. Pc contiene la
direccin de la siguiente instruccin que se va a ejecutar y se incrementa cada vez que se
recupera una instruccin de la memoria. La decodificacin realizada en el paso 2 determina
la operacin que se va a ejecutar, el modo de direccionamiento de la instruccin y la
posicin de los operandos.
Despus la computadora ejecuta la instruccin y regresa al paso 1 para hacer la bsqueda
de la siguiente instruccin en secuencia.
En algunas computadoras el modo de direccionamiento de la instruccin se especifica con
un cdigo binario distinto, como se hace con el cdigo de operacin. Otras computadoras
utilizan un cdigo binario nico que representa la operacin y el modo de la instruccin.
Pueden definirse instrucciones con diversos modos de direccionamiento y, en ocasiones, se
combinan dos o ms modos de direccionamiento en una instruccin.


20
Aunque la mayora de los modos de direccionamiento modifican el campo de direccin de
la instruccin, hay dos modos que no necesitan el campo de direccin. Son los modos
implcito e inmediato.
Modo implcito
En este modo se especifican los operandos en forma implcita en la definicin de la
instruccin. Por ejemplo, la instruccin "complementar acumulador" es una instruccin de
modo implcito porque el operando en el registro de acumulador est implcito en la
definicin de la instruccin. De hecho todas las instrucciones de referencia a registro que
utilizan un acumulador son instrucciones de modo implcito.
Las instrucciones de direccin cero en una computadora organizada con pila son
instrucciones de modo implcito porque est implcito que los operandos estn en la parte
superior de la pila.
Modo inmediato
En este modo se especifica el operando en la instruccin misma. En otras palabras, una
instruccin de modo inmediato tiene un campo operando, en lugar de una campo de
direccin. Un campo de operando contiene el operando real que se va a usar junto con la
operacin especificada en la instruccin. Las instrucciones de modo inmediato son tiles
para inicializar registros en un valor constante.
Se mencion antes que el campo de direccin de una instruccin puede especificar una
palabra de memoria o un registro de procesador. Cuando el campo de direccin especifica
un registro de procesador se dice que la instruccin est en modo de registro.
Modo de registro
En este modo, los operandos estn en registros que residen dentro de la CPU. Se selecciona
el registro particular de un campo de registro en la instruccin. Un campo k bits puede
especificar cualquiera de 2 a la k registros.
Modo indirecto por registro


21
En este modo la instruccin especifica un registro en la CPU cuyo contenido proporciona la
direccin del operando en la memoria. En otras palabras, el registro seleccionado contiene
la direccin del operando en lugar del operando mismo. Antes de utilizar una instruccin de
modo indirecto por registro, el programador debe asegurarse de que la direccin de
memoria del operando est colocada en el registro del procesador con una instruccin
previa. Entonces una referencia al registro es equivalente a especificar una direccin de
memoria. La ventaja de una instruccin de modo de registro indirecto es que el campo de
direccin de la instruccin utiliza menos bits para seleccionar un registro de los que
necesitara para especificar una direccin de memoria en forma directa.
Modo de direccionamiento directo
En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El
operando reside en memoria y su direccin la proporciona en forma directa el campo de
direccin de la instruccin. En una instruccin de tipo brinco el campo de direccin
especifica la direccin de transferencia de control del programa real.
Modo de direccionamiento indirecto
En este modo, el campo de direccin de la instruccin proporciona la direccin en que se
almacena la direccin efectiva en la memoria. El control recupera la instruccin de la
memoria y utiliza su parte de direccin para accesar la memoria una vez ms con el fin de
leer la direccin efectiva.
Unos cuantos modos de direccionamiento requieren que el campo de direccin de la
instruccin se sume al contenido de un registro especfico en la CPU. En estos modos la
direccin efectiva se obtiene del clculo siguiente:
Direccin efectiva = Parte de la instruccin + El contenido de registro CPU.
EL registro de CPU utilizado en el clculo puede ser el contador de programa, un registro
de ndice o un registro base. En cualquier caso tenemos un modo de direccionamiento
diferente que se utiliza para una aplicacin distinta.
Modo de direccionamiento indexado


22
En este modo el contenido de un registro ndice se suma a la parte de direccin de la
instruccin para obtener la direccin efectiva. El registro ndice es un registro CPU especial
que contiene un valor ndice. Un campo de direccin de la instruccin define la direccin
inicial del arreglo de datos en la memoria. Cada operando del arreglo se almacena en la
memoria en relacin con la direccin inicial.
La distancia entre la direccin inicial y la direccin del operando es el valor del ndice
almacenado en el registro de ndice. Cualquier operando en el arreglo puede accesarse con
la misma instruccin siempre y cuando el registro ndice contenga el valor de ndice
correcto. El registro ndice puede incrementarse para facilitar el acceso a operandos
consecutivos. Ntese que si una instruccin de tipo ndice no incluye un campo de
direccin en su formato, la instruccin se convierte al modo de operacin de indirecto por
registro.
Algunas computadoras dedican un registro de CPU para que funcione exclusivamente
como un registro ndice. De manera implcita este registro participa cuando se utiliza una
instruccin de modo ndice. En las computadoras con muchos registros de procesador,
cualquiera de los registros de la CPU puede contener el nmero de ndice. En tal caso, el
registro debe estar especificado en forma explcita en un campo de registro dentro del
formato de instruccin.
Modo de direccionamiento de registro base
En este modo, el contenido de un registro base se suma a la parte de direccin de la
instruccin para obtener la direccin efectiva. Esto es similar al modo de direccionamiento
indexado, excepto en que el registro se denomina ahora registro base, en lugar de registro
ndice. La diferencia entre los dos modos est en la manera en que se usan ms que en la
manera en que se calculan. Se considera que un registro base contiene una direccin base y
que el campo de direccin de la instruccin proporciona un desplazamiento en relacin con
esta direccin base. El modo de direccionamiento de registro base se utiliza en las
computadoras para facilitar la localizacin de los programas en memoria.


23
1.7 Proceso de ensamblado y ligado
Para crear un programa ejecutable utilizando lenguaje ensamblador es necesario realizar la
serie de pasos, conocida como ciclo de desarrollo de programas, que se muestra en la
figura.

Figura 1. 1 Proceso para el ciclo de desarrollo de programas
Un ensamblador es el programa que convierte un listado de cdigo fuente, escrito en un
fichero de texto, en cdigo objeto, es decir, lenguaje mquina (el que finalmente
interpretar el procesador) en el que slo le faltan las referencias a rutinas externas.
El cdigo fuente es un fichero que contiene la secuencia de instrucciones en lenguaje
ensamblador que forma el programa, as como ciertas directivas o comandos para el propio
ensamblador, que ha sido creado utilizando un editor de texto.
El cdigo objeto consta del cdigo en lenguaje mquina y de la informacin necesaria para
enlazarlo con otros mdulos objeto.
Proceso de ligado Al construir un programa algunos de sus mdulos pueden colocarse en el
mismo mdulo fuente y ensamblarse juntos, otros pueden estar en mdulos diferentes y ser
ensamblados separadamente. En cualquier caso, los mdulos objeto resultantes, algunos de


24
los cuales pueden estar agrupados en libreras, deben ser enlazados para formar el mdulo
de carga, antes de que se pueda ejecutar el programa. Adems de dar como salida el mdulo
de carga, el linker o enlazador imprime un mapa de memoria que indica donde sern
cargados los mdulos objeto en la memoria.
Despus de crearse el mdulo de carga, ste es cargado por el cargador en la memoria del
ordenador y comienza la ejecucin.

Figura 1. 2 Proceso de ligado
1.8 Desplegado de mensajes en el monitor
La pantalla es una malla de posiciones direccionables, en cualquiera de las cuales se puede
colocar el cursor. El sistemas proporcionara espacio en la memoria para un are de
despliegue de video, o bfer. El rea de despliegue monocromtico inicia en la localidad
BISOS B000[0]H y permite utilizar 4K bytes de memoria: 2KB disponibles para caracteres
y 2K para atributos de cada carcter, como video inverso, intermitencia, intensidad y
subrayado.

Figura 1. 3 Funciones predefinidas de la BIOS


25

Figura 1. 4 Funcin para mostrar el conjunto de caracteres ASCII








26
Unidad 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, microcontroladores
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.
Un ensamblador es el programa que convierte un listado de cdigo fuente, escrito en un
fichero de texto, en cdigo objeto, es decir, lenguaje mquina (el que finalmente
interpretar el procesador) en el que slo le faltan las referencias a rutinas externas. El
cdigo fuente es un fichero que contiene la secuencia de instrucciones en lenguaje
ensamblador que forma el programa, as como ciertas directivas o comandos para el propio
ensamblador, que ha sido creado utilizando un editor de texto. El cdigo objeto consta del
cdigo en lenguaje mquina y de la informacin necesaria para enlazarlo con otros mdulos
objeto. Con TASM el proceso de ensamblado se realiza escribiendo lo siguiente en la
ventana de comandos:
tasm /zi /l nombre donde nombre es el nombre del fichero .asm con el cdigo fuente. La
extensin no es necesaria ponerla y los parmetros /zi y /l slo son tiles si queremos hacer
un proceso de depuracin (debug) con el Turbo Debugger. Tras la ejecucin de esta lnea se
nos crear un fichero nombre.obj.
Linkado y montado
Al construir un programa algunos de sus mdulos pueden colocarse en el mismo mdulo
fuente y ensamblarse juntos, otros pueden estar en mdulos diferentes y ser ensamblados
separadamente. En cualquier caso, los mdulos objeto resultantes, algunos de los cuales
pueden estar agrupados en libreras, deben ser enlazados para formar el mdulo de carga,
antes de que se pueda ejecutar el programa. Adems de dar como salida el mdulo de carga,
el linker o enlazador imprime un mapa de memoria que indica donde sern cargados los
mdulos objeto en la memoria.


27
Despus de crearse el mdulo de carga, ste es cargado por el cargador en la memoria del
ordenador y comienza la ejecucin. Para linkar con TASM escribimos:
tlink /v nombre Tras esto se nos crear el fichero ejecutable (.exe o .com) que el sistema
operativo se encargar de cargar en memoria
Cuando lo ejecutemos. De nuevo, la extensin no es necesaria ponerla y el parmetro /v
slo es til para el Turbo Debugger.

Figura 2. 1 Proceso de Linkado
2.2 Ciclos numricos
El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la
programacin de ciclos finitos, 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 nmero 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.


28
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.
Un bucle es un grupo de instrucciones que se ejecutan cclicamente un nmero concreto de
veces. Para construir bucles disponemos de las siguientes instrucciones:
stas posibilitan el grupo de control ms elemental de nuestros programas. Un bucle es un
bloque de cdigo que se ejecuta varias veces. Hay 4 tipos de bucles bsicos: o Bucles sin
fin o Bucles por conteo, Bucles hasta o Bucles mientras. Las instrucciones de control de
bucles son las siguientes:
INC incrementar.
DEC decrementar.
LOOP realizar un bucle.
LOOPZ, LOOPE realizar un bucle si es cero.
LOOPNZ,LOOPNE realizar un bucle si no es cero
JCXZ salta si CX es cero
2.3 Captura de cadenas
En el lenguaje ensamblador el tipo de dato cadena (string) no est definido, pero para fines
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.


29
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 prefijo 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
modifica 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


30
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 lenguaje ensamblador existen diferentes tipos de saltos que nos ayudan a saltar a una
lnea especificada de cdigo. A continuacin se muestran los diferentes tipos de saltos:
JMP salta
JE, JZ salta si es igual a cero
JNE, JNZ salta si no igual a cero
JS salta si signo negativo
JNS salta si signo no negativo
JP, JPE salta si paridad par
JNP, JOP salta si paridad impar
JO salta si hay capacidad excedida
JNO salta si no hay capacidad excedida
JB, JNAE salta si por abajo (no encima o igual)
JNB, JAE salta si no est por abajo (encima o igual)
JBE, JNA salta si por abajo o igual (no encima)
JNBE, JA salta si no por abajo o igual (encima)
JL, JNGE salta si menor que (no mayor o igual)
JNL, JGE salta si no menor que (mayor o igual)
JLE, JNG salta si menor que o igual (no mayor)
JNLE, JG salta si no menor que o igual (mayor)
JMP (Salto)
Sintaxis: JMP direccin o JMP SHORT direccin
Transfiere el control incondicionalmente a la direccin indicada en el operando. La
bifurcacin puede ser tambin directa o indirecta como anteriormente vimos, pero adems
puede ser corta (tipo SHORT) con un desplazamiento comprendido entre-128 y 127; o
larga, con un desplazamiento de dos bytes con signo. Si se hace un JMP SHORT y no llega


31
el salto (porque est demasiado alejada esa etiqueta) el ensamblador dar error. Los buenos
ensambladores (como TASM) cuando dan dos pasadas colocan all donde es posible un
salto corto, para economizar memoria, sin que el programador tenga que ocuparse de poner
short. Si el salto de dos bytes, que permite desplazamientos de 64 Kb en la memoria sigue
siendo insuficiente, se puede indicar con far que es largo (salto a otro segmento).
Ejemplos:
JMP ETIQUETA
JMP FAR PTR ETIQUETA
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 transfiere 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:


32
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


33
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
Instrucciones Aritmticas. Estas instrucciones son las que realiza directamente el
8086/8088
a. Grupo de adicin:
ADD suma
ADC suma con acarreo
AAA ajuste ASCII para la suma
DAA ajuste decimal para la suma
b. Grupo de sustraccin:
SUB resta
SBB resta con acarreo negativo
AAS ajuste ASCII para la resta


34
DAS ajuste decimal para la resta
c. Grupo de multiplicacin:
MUL multiplicacin
IMUL multiplicacin entera
AAM ajuste ASCII para la multiplicacin
d. Grupo de divisin:
DIV divisin
IDIV divisin entera
AAD ajuste ASCII para la divisin
e. Conversiones:
CBW pasar octeto a palabra
CWD pasar palabra a doble palabra
NEG negacin
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, ltimo en entrar, Primero en salir).


35
Para controlar la pila el microprocesador cuenta con dos instrucciones bsicas:
Push (Meter)
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.


36
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
Son operaciones bit a bit que trabajan sobre octetos o palabras completas:
NOT negacin
AND producto lgico
OR suma lgica
XOR suma lgica exclusiva
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).


37
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:


38
ESC cdigo_operacin, origen
Indicadores:

Se utiliza en combinacin con procesadores externos, tales como los coprocesadores 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:


39

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.
2.15 Captura y almacenamiento de datos numricos
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.
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


40
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.



41
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.


42
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


43
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.







44
Unidad 3 Modularizacin
3.1 Procedimientos
Un procedimiento es un conjunto de instrucciones que tienen la finalidad de ejecutar una
tarea especfica dentro de un programa. Los procedimientos son muy similares a las
macros.
Un procedimiento es un conjunto de instrucciones a los que podemos dirigir el flujo de
nuestro programa, y una vez terminada la ejecucin de dichas instrucciones se devuelve el
control a la siguiente lnea a procesar del cdigo que mando llamar al procedimiento. Un
procedimiento se declara una sola vez en el cdigo fuente y cuando el programa se
ensambla y ejecuta, el procedimiento se coloca en memoria para que pueda ser utilizado
por el programa. Los procedimientos nos ayudan a crear programas legibles y fciles de
modificar. Sintaxis de un procedimiento Existen dos tipos de procedimientos, los
intrasegmentos, que se encuentran en el mismo segmento de instrucciones y los
intersegmentos que pueden ser almacenados en diferentes segmentos de memoria.
Las partes que componen a un procedimiento son:
Declaracin del procedimiento
Cdigo del procedimiento
Directiva de regreso
Terminacin del procedimiento
Las principales ventajas en el uso de procedimientos son: permiten una codificacin ms
limpia y compacta, es decir el cdigo fuente es ms pequeo; tambin permiten el ahorro de
memoria, esto es porque un mismo procedimiento puede ser llamado varias veces en el
mismo programa y slo requiere memoria una vez.
Los procedimientos tienen la desventaja de que reducen la velocidad de ejecucin de los
programas, esto se debe a la forma en que los procedimientos se ejecutan. A continuacin
se presentan los pasos necesarios para ejecutar un procedimiento:
1. Se encuentra la llamada Call.


45
2. El microprocesador almacena en la Pila el contenido del IP.
3. Se coloca en el IP el valor del desplazamiento correspondiente al Procedimiento.
4. El microprocesador ejecuta las instrucciones del procedimiento.
5. El procedimiento termina cuando se encuentra la instruccin Ret.
6. Se saca de la pila el valor original del IP y se contina el flujo del programa.
3.2 Macros
Una macro es un grupo de instrucciones repetitivas en un programa que se codifican solo
una vez y pueden utilizarse cuantas veces sea necesario. La principal diferencia entre una
macro y un procedimiento es que en la macro se hace posible el paso de parmetros y en el
procedimiento no (esto es aplicable solo para el TASM, hay otros lenguajes de
programacin que si lo permiten). Al momento de ejecutarse la macro cada parmetro es
sustituido por el nombre o valor especificado al momento de llamarla.
Podemos decir entonces que un procedimiento es una extensin de un determinado
programa, mientras que la macro es un mdulo con funciones especficas que puede ser
utilizado por diferentes programas. Otra diferencia entre una macro y un procedimiento es
la forma de llamar a cada uno, para llamar a un procedimiento se requiere el uso de una
directiva, en cambio la llamada a las macros se realiza como si se tratara de una instruccin
del ensamblador.












46
Unidad 4 Programacin de dispositivos
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 o video
directamente desde Internet, sin descargarlas a la computadora. Esta 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.
Ejemplo:
Abarcando los aspectos ms importantes del modo de video:
ENDP
prepararPantalla proc near
mov ah, 06h;funcion de limpiar pantalla
mov bh, 80h;Atributos de color de fondo
mov al, 00h;cantidad de Filas a Borrar Enrollar
mov cx, 00h;columna inicial en Ch, Columna Inicial en Cl
mov dx, 30a0h;columna Final en Dh,Columna Final en Dl
int 10h
ret
prepararPantalla endp
Para llamarlo debes hacerlo as:
call prepararPantalla


47
En los atributos de color de fondo puedes ver un 80h, el primer nmero es el color del
fondo ( el 8) y el segundo es el color del texto ( el 0).
4.2 Acceso A Discos En Lenguaje Ensamblador
Para leer o escribir en un disco, no se realiza byte a byte, sino ms bien en bloques de bytes,
debido a que el acceso a disco implica movimientos mecnicos adems de que el acceso se
da por sectores; en este proceso no intervienen el CPU, puesto que solo enva los comandos
a la interface que maneja la unidad de disco y sta es la que se encarga de leer o escribir
informacin de un rea especial de memoria, llamada DMA; este proceso es conocido
como acceso directo a memoria.
Ejemplo:
El sistema de almacenamiento en disco constituye el soporte externo de la informacin. Los
datos se registran sobre la superficie del disco en una serie de circunferencias concntricas
llamadas pistas (track).
Varias pistas, una por cada cara del disco (generalmente 2), componen un Clster. Cada
pista est dividida en porciones iguales llamadas sectores (unidad bsica de
almacenamiento en disco). El tamao de un sector se mide en bytes, y depende de las
caractersticas del disco. En esta seccin se presentan 3 rutinas que permiten lectura y
escritura absoluta de sectores, as como la determinacin del espacio libre disponible en un
disco.
Rutina _AbsoluteRead: Transfiere el contenido de uno ms sectores del disco al buffer
especificado, accesando directamente a los sectores lgicos. En caso de error, se enciende
el bit de acarreo y AX contiene el cdigo del error.
Invocacin:
push <unidad de disco>
push <nmero de sectores a leer>
push <prime


48
r sector a leer>
push SEG <buffer>
push OFFSET <buffer>
call _AbsoluteRead
PUBLIC _AbsoluteRead
_AbsoluteRead PROC NEAR
ARG Buffer:DWORD,Start:WORD,NumSect:WORD,Drive:BYTE= ArgLen
push bp
; salvar BP
mov bp,sp
; permitir acceso a los argumentos
push bx
; salvar registros
push cx
push dx
push ds
mov al,Drive
; lectura absoluta de disco
mov cx,NumSect
mov dx,Start
lds bx,Buffer


49
int 25h
pop bx
pop ds
; recuperar registros
pop dx
pop cx
pop bx
pop bp
ret ArgLen
_AbsoluteRead ENDP
4.3 Programacin Del Puerto Serial
Puerto serial, puerto COM, puerto de comunicaciones y puerto RS-232 ("Recomendad
Standard-232"), hacen referencia al mismo puerto. Se le llama serial, porque permite el
envo de datos, uno detrs de otro. El puerto serie nos permite la facilidad de conectar
nuestro ordenador personal a cualquier desarrollo realizado con microcontrolador.
Puerto Serial para la comunicacin en puerto serial debemos tomar en cuenta que existe un
dispositivo transmisor y un dispositivo receptor el cual se encuentra comunicado a travs de
una sola lnea de comunicacin, por lo tanto los nmeros binarios que se transmiten se
codifican a travs de un tren de pulsos. Dicha codificacin de los pulsos deber ser
interpretado por el dispositivo receptor, para ello se deben establecer parmetros de
hardware por los que se deber de transmitir la seal. De manera general en MATLAB se
deben realizar 2 procedimientos para configurar y manipular el puerto serial. El primer paso
es la configuracin y el segundo es abrir el puerto serial.


50

Caractersticas del puerto serial COM
En el mbito de la electrnica comercial se le denomina como conector DB9 ("D-
subminiature type B, 9 pin"), esto es D-subminiatura tipo B, con 9 pines.
Se utilizaba principalmente para la conexin del ratn (Mouse), algunos tipos
antiguos de escneres y actualmente para dispositivos como PDAs ("Personal
Digital Assistant") asistentes personales digitales.
Cada puerto, permite conectar solamente 1 dispositivo.
Para conectar y desconectar los dispositivos, as como para que la computadora los
reconozca de manera correcta, es necesario apagar y reiniciar la computadora.
4.4 Programacin Del Puerto Paralelo
Conocido tambin con el nombre de CENTRONICS INTERFACE transmite los datos en
paralelo mediante un bus de 8 lneas ms las lneas de control del protocolo y del estado de
la impresora, esto nos permite disponer de varias lneas digitales que podremos controlar
independientemente y de forma inmediata mediante las instrucciones de control de puertos
(por ejemplo: outportb(), inportb() en C++). Esto hace que podamos, de forma muy
sencilla, controlar directamente dispositivos electrnicos como pueden ser Leds,
microreles, pulsadores, etc...
El puerto paralelo tiene dos inconvenientes fundamentales; el primero es que cada vez
menos PC los llevan incorporado y el segundo es que cuando trabajamos con un sistema
operativo Windows XP, NT y 2000, necesitamos un driver que nos permita acceder a los
puertos.
Descripcin Fsica Del Conector.


51
El puerto paralelo del pc dispone de un conector subD de 25 pines hembra al que
normalmente conectamos un cable Centronics de impresora que en un extremo tiene el
conector SubD 25 pines macho y por el otro un conector Centronics de 36 pines. La
asignacin de pines, tanto en el conector D-25 como en el Centronics es la siguiente:

4.5 Programacin Hbrida
La programacin hbrida proporciona un mecanismo por medio del cual podemos
aprovechar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel, todo esto
con el fin escribir programas ms rpidos y eficientes.
En esta seccin se mostrar la forma para crear programas hbridos utilizando el lenguaje
ensamblador y Turbo Pascal. Turbo Pascal permite escribir procedimientos y funciones en
cdigo ensamblador e incluirlas como parte de los programas en lenguaje Pascal; para esto,
Turbo Pascal cuenta con dos palabras reservadas: Assembler y Asm.
Assembler permite indicarle a Turbo Pascal que la rutina o procedimiento que se est
escribiendo est totalmente escrita en cdigo ensamblador.
Procedimiento hbrido:


52
Procedure Limpia_Pantalla;
Assembler;
AsmMov AX,0600h
Mov BH,18h
Mov CX,0000h
Mov DX,184Fh
Int 10h
End;
El procedimiento del listado 23 utiliza la funcin 06h de la Int 10h del BIOS para limpiar la
pantalla, este procedimiento es anlogo al procedimiento ClrScr de la unidad CRT de Turbo
Pascal.
4.6 Programacin De Puerto USB (Universal Serial Bus)
Lnea serial universal de transporte de datos. Es un conector rectangular de 4 terminales
que permite la transmisin de datos entre una gran gama de dispositivos externos
(perifricos) con la computadora; por ello es considerado puerto; mientras que la definicin
de la Real Academia Espaola de la lengua es "toma de conexin universal de uso
frecuente en las computadoras".
Caractersticas del puerto USB
La versin USB 1.0 Aparece en el mercado, junto con el lanzamiento del
microprocesador Intel Pentium II en 1997.
Cada puerto, permite conectar hasta 127 dispositivos externos, pero solo se
recomiendan como mximo 8, porque se satura la lnea del puerto y se ralentiza el
sistema al tener que administrarse todos simultneamente.
Cuenta con tecnologa "Plug&Play" la cual permite conectar, desconectar y
reconocer dispositivos sin necesidad de reiniciar apagar la computadora.


53
Las versiones USB 1.X y USB 2.0 transmiten en un medio unidireccional los datos,
esto es solamente se enva o recibe datos en un sentido a la vez, mientras que la
versin USB 3 cuenta con un medio Duplex que permite enviar y recibir datos de
manera simultnea.
A pesar de que el puerto USB 3, est actualmente integrado ya en algunas placas de
nueva generacin, an no hay dispositivos comerciales/populares para esta
tecnologa.





















54
Programas
Programa que calcula el area de un triangulo.
;
include \masm32\include\masm32rt.inc
;
comment * -----------------------------------------------------
Alumno: Carlos Hector Cruz Lopez
Fecha: 25/03/2014
Descripcin: Programa que calcula el area de un triangulo.
----------------------------------------------------- *
.data?
value dd ?
base dd ?
altura dd ?
.data
item dd 0
multi dd 0
rdiv dd 0
resultadodiv dd 0
.code
start:
;
call main
inkey
exit



55
;
main proc
cls
mov EAX, sval(input("Introduzca la base del triangulo :"))
mov base, EAX
mov EAX, sval(input("introduzca la altura del triangulo :"))
mov altura, EAX

mov EAX, base
mov EBX, altura
mul EBX
mov multi, EAX
mov eax,multi
mov ebx,2
xor edx,edx
div ebx
mov rdiv,edx
mov resultadodiv,eax ; Promedio

print chr$(" ")
print chr$(" ")
print chr$(" El area del triangulo es ====> ")
print str$(resultadodiv)
print chr$(" ")
ret
main endp


56
;
end start
-----------------------------------------------------------------------------------------------------------------------
Programa 2: Programa que pide 5 nmeros y los suma, resta, multiplica y promedia.
;
include \masm32\include\masm32rt.inc
;

comment * -----------------------------------------------------
Alumno: Carlos Hector Cruz Lopez
Fecha: 25/03/2014
Descripcion: Programa que pide 5 numeros y los suma, resta, multiplica y promedia.
----------------------------------------------------- *
.data?
value dd ?

num1 dd ?
num2 dd ?
num3 dd ?
num4 dd ?
num5 dd ?


.data
item dd 0
rsuma1 dd 0


57
rsuma2 dd 0
rsuma3 dd 0
rsuma4 dd 0

resta1 dd 0
resta2 dd 0
resta3 dd 0
resta4 dd 0
multi1 dd 0
rdiv dd 0
resultadodiv dd 0

.code
start
;
call main
inkey
exit

;

main proc

cls
mov EAX, sval(input("Introduzca el primer numero :"))
mov num1, EAX


58
mov EAX, sval(input("introduzca el segundo numero :"))
mov num2, EAX
mov EAX, sval(input("introduzca el tercer numero :"))
mov num3, EAX
mov EAX, sval(input("introduzca el cuarto numero :"))
mov num4, EAX
mov EAX, sval(input("introduzca el quinto numero :"))
mov num5, EAX

mov eax, num1
mov ebx, num2
add eax, ebx
mov rsuma1, eax ; suma de primer y segunda calif

mov eax, rsuma1
mov ecx, num3
add eax, ecx
mov rsuma2, eax ; suma de primer , segunda y tercer calif

mov eax, rsuma2
mov ebx, num4
add eax, ebx
mov rsuma3,eax ; suma de primer, segunda, tercer y cuarta

mov eax, rsuma3
mov ebx, num5


59
add eax, ebx
mov rsuma4, eax ; suma de todos los numeros

print chr$(" La suma de los numeros es ====> ")
print str$(rsuma4)
print chr$(" ")

;------------------------------------- DIVISION ------------------------------
mov eax,rsuma4
mov ebx,5
xor edx,edx
div ebx
mov rdiv,edx
mov resultadodiv,eax ; Promedio

print chr$(" ")
print chr$(" El promedio es ====> ")
print str$(resultadodiv)

;--------------------------------------- RESTA ------------------------
mov eax, num1
mov ebx, num2
sub eax, ebx
mov resta1, eax ; resta de primer y segunda calif

mov eax, resta1


60
mov ecx, num3
sub eax, ecx
mov resta2, eax ; resta de primer , segunda y tercer calif

mov eax, resta2
mov ebx, num4
sub eax, ebx
mov resta3,eax ; resta de primer, segunda, tercer y cuarta

mov eax, resta3
mov ebx, num5
sub eax, ebx
mov resta4, eax ; resta de todos los numeros

print chr$(" ")
print chr$(" La resta de los numeros es ====> ")
print str$(resta4)
print chr$(" ")
;--------------------------------------------------------------------------
mov EAX, num1
mov EBX, num2
mul BL

mov EBX, num3
mul BX



61
shl EDX, 16
mov DX, AX

mov ECX, num4
mul CX

mov EDX, num5
mul DX
mov multi1, EAX

print chr$(" ")
print chr$(7,"La multiplicacion es ====> ")
print str$(multi1)
print chr$(" "
ret
main endp
;
end start
Programa 3: Suma, resta, multiplica y divide dos numeros introducidos ademas de
mostrar un menu de que tipo de operacin se quiere realizar con los numeros introducidos.
;

include \masm32\include\masm32rt.inc
;

comment * -----------------------------------------------------
Alumno: Carlos Hector Cruz Lopez


62
Fecha: 25/03/2014
Descripcin: Suma, resta, multiplica y divide dos numeros introducidos ademas de
mostrar un menu de que tipo de operacin se quiere realizar con los numeros introducidos.
----------------------------------------------------- *

.data?
value dd ?
num1 dd ?
num2 dd ?


.data
item dd 0
suma1 dd 0
resta dd 0
multi dd 0
resultadodiv dd 0
rdiv dd 0

.code

start:

;




63
call main
inkey
exit

;


main proc

cls
mov EBX, sval(input("introduzca el primer numero :"))
mov num1, EBX
mov EBX, sval(input("introduzca el segundo numero :"))
mov num2, EBX

ciclo:
print chr$(" ------------------------------------------- ",10)
print chr$("1 .- SUMAR",10)
print chr$("2 .- RESTAR",10)
print chr$("3 .- MULTIPLICAR",10)
print chr$("4 .- DIVIDIR",10)
print chr$("5 .- SALIR",10)


mov EAX, sval(input("Elija una opcion :"))


64


.if eax == 1
print chr$("SUMAR",10)


mov ebx, num1
mov ecx, num2
add ebx, ecx
mov suma1, ebx ; suma de primer y segundo numero

print chr$(" La suma es ====> ")
print str$(suma1)
print chr$(" ",10)


.elseif eax == 2
print chr$("Restar",10)

mov ebx, num1
mov ecx, num2
sub ebx, ecx
mov resta, ebx ; resta de primer y segundo numero

print chr$(" La resta es ====> ")


65
print str$(resta)
print chr$(" ",10)

.elseif eax == 3

print chr$("Multiplicar",10)

mov EAX, num1
mov EBX, num2
mul BL
mov multi, EAX
print chr$(" La multiplicacion es ====> ")
print str$(multi)
print chr$(" ",10)

.elseif eax == 4
print chr$("DIVIDIR",10)


mov eax,num1
mov ebx,num2
xor edx,edx
div ebx
mov rdiv,edx
mov resultadodiv,eax


66

print chr$(" La division es ====> ")
print str$(resultadodiv)
print chr$(" ",10)

.elseif eax == 5
print chr$("Fin del programa")
print chr$(" ",10)

.endif

cmp eax,4
jle ciclo

ret
main endp
;

end start

Programa 4: programa que lee un numero y forma una piramide numerica.
;

include \masm32\include\masm32rt.inc
;



67

comment * -----------------------------------------------------
Alumno: Carlos Hector Cruz Lopez
Fecha: 25/03/2014
Descripcion: programa que lee un nmero y forma una piramide numerica.
----------------------------------------------------- *

.data?
value dd ?
numero dd ?

.data
item dd 0
aux dd 0
count dd 0
auxH dd 0
horizontal dd 0
count2 dd 0

.code

start:

;



68

call main
inkey
exit

;


main proc

cls
mov numero,sval(input("ingrese un numero: "))
xor ebx, ebx

mov eax, numero
sub eax, 1
mov numero,eax

ciclo1:
inc ebx
mov auxH, ebx
mov ebx, 0

mov eax, auxH
sub eax, 1


69
mov aux,eax
ciclo2:

inc ebx
mov horizontal, ebx
print str$(horizontal)

cmp ebx, aux
jle ciclo2

print chr$(" ",10)
mov ebx, auxH
cmp ebx, numero
jle ciclo1

ret
main endp
;

end start

Programa 5: Imprime una piramide de numerous.
;

include \masm32\include\masm32rt.inc


70
;


comment * -----------------------------------------------------
Build this console app with
"MAKEIT.BAT" on the PROJECT menu.
----------------------------------------------------- *

.data?
value dd ?
numero dd 0
incrementar dd 0
incrementar2 dd 0


.data
item dd 0
auxiliar dd 0

.code

start:

;




71
call main
inkey
exit

;


main proc

cls
mov EAX,sval(input("Numero : "))
mov numero,EAX



dec numero

mov eax, 0
mov ebx, 0


ciclo:

inc eax
mov incrementar, eax


72

mov ebx, 0
mov auxiliar, eax
dec auxiliar
ciclo2:

inc ebx
mov incrementar2, ebx

print str$(incrementar2)
print chr$(" ")

mov eax, incrementar2
cmp eax, auxiliar
jle ciclo2
print chr$(7,10)

mov eax, incrementar
cmp eax, numero
jle ciclo

ret

main endp



73
;

end start
Programa 5: Lee nombre y calificaciones y determina promedio
;

include \masm32\include\masm32rt.inc
;


comment * -----------------------------------------------------
Build this console app with
"MAKEIT.BAT" on the PROJECT menu.
----------------------------------------------------- *

.data?
value dd ?
nombre dd 0
total dd 0
residuo dd 4
promedio dd 0

.data
item dd 0

.code


74

start:

;


call main
inkey
exit

;


main proc

cls
mov EAX,sval(input("Ingrese su nombre: "))
mov nombre,EAX

mov EAX,sval(input("Ingrese la calificacion en matematicas: "))
add total, eax


mov EAX,sval(input("Ingrese la calificacion en geografia: "))
add total, eax



75

mov EAX,sval(input("Ingrese la calificacion en ingles: "))
add total, eax


mov EAX,sval(input("Ingrese la calificacion en programacion: "))
add total, eax




mov eax,total
mov ebx,4
xor edx,edx
div ebx
mov residuo,edx

mov promedio, eax
print chr$(7,"----------------------------------------- ")
print chr$(7,10)
print chr$(7,10)

.if promedio >= 90 && promedio <= 100
print chr$("El promedio es EXCELENTE")



76
.elseif promedio >= 80 && promedio < 90
print chr$("El promedio es BUENO")

.elseif promedio >= 70 && promedio < 80
print chr$("El promedio es REGULAR")

.elseif promedio >= 0 && promedio < 70
print chr$("El promedio es REPROBADO")
.endif

print chr$(7,10)
print chr$(7,10)
print chr$(7,"Su promedio es: ")
print str$(promedio)
print chr$(7,10)
print chr$(7,10)



ret

main endp

;



77

end start
Programa 6: Sumatoria de numeros pares.
;

include \masm32\include\masm32rt.inc
;


comment * -----------------------------------------------------
Build this console app with
"MAKEIT.BAT" on the PROJECT menu.
----------------------------------------------------- *

.data?
value dd ?
incrementar dd 0
numero dd 0
sumatoria dd 0


.data
item dd 0

.code



78
start:

;


call main
inkey
exit

;


main proc

cls

mov eax, sval(input("Ingrese el numero par: "))
dec eax
mov numero, eax

mov ax, 0

; --------------------------------------------------------------
; 'variable' can be either a a 32 bit memory operand or register
; You can use one (1) or more 'case' statements.
; The 'default' statement if required must be the last statement


79
; before the 'endsw' statement. It can be used only once.
; --------------------------------------------------------------
switch variable
case number
fn MessageBox,hWnd,"test 1","switch block",MB_OK

default
fn MessageBox,hWnd,"default","switch block",MB_OK

endSw


ciclo:

inc eax
inc eax
mov incrementar, eax

mov ecx, sumatoria
mov eax, incrementar
add ecx, eax
mov sumatoria, ecx


mov eax, incrementar


80
cmp eax, numero
jle ciclo

print chr$(10)
print chr$(10)
print chr$("La sumatoria es: ")
print str$(sumatoria)
print chr$(10)
print chr$(10)

ret

main endp

;


end start
Programa 7: Lee un numero e imprime la tabla de multiplicar
386
.model flat, stdcall
option casemap :none

include \masm32\include\masm32rt.inc



81

includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
incrementar dd 0
numero dd 0
resultado dd 0
.code

start :
mov eax, sval(input("Ingrese el numero: "))
mov numero, eax



mov ax, 0

ciclo:

inc eax
mov incrementar, eax



82
mov eax, numero
mov ebx, incrementar
mul bl

mov resultado, eax


print chr$(10)
print str$(numero)
print chr$(" X ")
print str$(incrementar)
print chr$(" = ")
print str$(resultado)
print chr$(10)

mov eax, incrementar
cmp eax, 9
jle ciclo


inkey
exit
end start




83
Programa 8: Programa que compara 5 numeros e indica el mayor
;

include \masm32\include\masm32rt.inc
;


comment * -----------------------------------------------------
Build this console app with
"MAKEIT.BAT" on the PROJECT menu.
----------------------------------------------------- *

.data?
value dd ?
num1 dd ?
num2 dd ?
num3 dd ?
num4 dd ?



.data
item dd 0


.code


84

start:

;


call main
inkey
exit

;


main proc

cls

; Codigo para ingresar los datos por medio del teclado

mov EAX,sval(input("Ingrese el numero A:"))
mov num1,EAX

mov EAX,sval(input("Ingrese el numero B:"))
mov num2,EAX

mov EAX,sval(input("Ingrese el numero C:"))


85
mov num3,EAX

mov EAX,sval(input("Ingrese el numero D:"))
mov num4,EAX


mov eax,num1

cmp eax,num2
cmp eax,num3
cmp eax,num4
jnb mayor1


mov eax,num2

cmp eax,num1
cmp eax,num3
cmp eax,num4
jnb mayor2


mov eax,num3

cmp eax,num1


86
cmp eax,num2
cmp eax,num4
jnb mayor3


mov eax,num4

cmp eax,num1
cmp eax,num2
cmp eax,num3
jnb mayor4



mayor1:
print chr$(7,"El A es el mayor")
print chr$(10)
ret

mayor2:
print chr$(7,"El B es el mayor")
print chr$(10)
ret

mayor3:


87
print chr$(7,"El C es el mayor")
print chr$(10)
ret

mayor4:
print chr$(7,"El D es el mayor")
print chr$(10)
ret


main endp

;


end start
programa 9: Programa que determina el factorial de un numero
include \masm32\include\masm32rt.inc
;


comment * -----------------------------------------------------
Build this console app with
"MAKEIT.BAT" on the PROJECT menu.
----------------------------------------------------- *



88
.data?
value dd ?
numero dd ?

.data
factorial dd 1
factorial2 dd 1
incrementar dd 0
uno dd 1
original dd 0

.code

start:

;


call main
inkey
exit

;


main proc


89



mov eax, sval(input("Entrada: "))
dec eax
mov numero, eax
mov original, eax
inc original
xor eax, eax ;xor consigo mismo siempre resulta un cero(0)

ciclo:
mov ecx, factorial
inc eax
mov incrementar, eax
mov ebx, uno
mov factorial2, ecx
ciclo2:
inc ebx
add factorial,ecx
cmp ebx, eax
jle ciclo2
mov eax, incrementar
mov ecx, factorial2
mov eax, incrementar
cmp eax, numero


90
jle ciclo ;Salta si es menor o igual o salta si no es mas grande
print chr$(7,"El factorial del numero ")
print str$(original)
print chr$(7," Es: ")
mov ecx, factorial2
print str$(ecx)
print chr$(7,10)
print chr$(7,10)
inkey
exit

ret

main endp


;


end start

Potrebbero piacerti anche