Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos.
Para representar datos que contengan una información se utilizan una serie de unos y
ceros cuyo conjunto indica dicha información. La información que hace que el hardware de
la computadora realice una determinada actividad de llama instrucción. Por consiguiente
una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen
a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que
son interpretadas directamente por la máquina se denomina lenguaje máquina. El
lenguaje máquina fue el primero que empleo el hombre para la programación de las
primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la
siguiente forma:
011011001010010011110110
Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular
grupos de caracteres y la traducción se haría de manera automática. Por ejemplo, se
podría escribir:
TRASLADAR 11010110, 00011101
Esto indicaría que el contenido de la posición 11010110 había que pasarlo a la posición
00011101 si se sabe que al grupo alfabético TRASLADAR le corresponde la secuencia de
bits 11110101. La máquina traduciría la anterior instrucción como:
Que nos resulta de más fácil comprensión. También se introdujo la posibilidad de indicar a
la computadora la dirección de un salto en la secuencia de ejecución de un programa
mediante la utilización de etiquetas.
A los programas que permiten pasar del programa escrito de esta manera (programa
fuente, en ensamblador) al lenguaje máquina también se les denomina normalmente
ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez
más para que la labor del programador fuera más fácil, incluyendo los denominados
directivos del ensamblador, que son órdenes o informaciones que el programador da al
traductor, no instrucciones de lenguaje máquina.
Los lenguajes de alto nivel fueron diseñados para eliminar las particularidades de una
computadora especifica, mientras que un lenguaje ensamblador esta diseñado para una
computadora especifica, o, de manera más correcta, para una familia especifica de
microprocesadores.
El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas son
palabras atrevidas, y hace un cuarto de siglo tal afirmación habría parecido absurda. Pero
cada año, el microprocesador se acerca más al centro de nuestras vidas, forjándose un
sitio en el núcleo de una máquina tras otra. Su presencia ha comenzado a cambiar la
forma en que percibimos el mundo e incluso a nosotros mismos. Cada vez se hace más
difícil pasar por alto el microprocesador como otro simple producto en una larga línea de
innovaciones tecnológicas.
Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el mundo o ha
tocado tan profundamente tantos aspectos de la existencia humana. Hoy existen casi
15,000 millones de microchips de alguna clase en uso (el equivalente de dos
computadoras poderosas para cada hombre, mujer y niño del planeta). De cara a esa
realidad, ¿quién puede dudar que el microprocesador no sólo está transformando los
productos que usamos, sino también nuestra forma de vivir y, por último, la forma en que
percibimos la realidad? No obstante que reconocemos la penetración del microprocesador
en nuestras vidas, ya estamos creciendo indiferentes a la presencia de esos miles de
máquinas diminutas que nos encontramos sin saberlo todos los días. Así que, antes de
que se integre de manera demasiado imperceptible en nuestra diaria existencia, es el
momento de celebrar al microprocesador y la revolución que ha originado, para apreciar el
milagro que es en realidad cada uno de esos chips de silicio diminutos y meditar acerca de
su significado para nuestras vidas y las de nuestros descendientes.
En 1975 Intel decidió ponerse manos a la obra para construir su primer micro de 16 bits
que salió al mercado en 1978. Se trataba del 8086, que definió el inicio de su gama de
productos más famosa, la familia de microprocesadores x86. La longitud de los registros
del 8086 era de 16 bits (de ahí su denominación de 16 bits), había versiones que
funcionaban a 4.77 y 8 MHz, tenía un bus de datos de 16 bits y un bus de direcciones de
20 bits, lo que le permitía acceder a un máximo de memoria de 1 Mb según el cálculo 2
elevado a 20.
Seguidamente, en 1979, Intel sacó el 8088, que en contra de lo que podamos pensar no
es mejor que el 8086. La diferencia era sustancial; el bus de datos era de 8 bits (la
mitad). Este paso hacia atrás estuvo provocado por el estado de la industria de la época.
Utilizar un bus de datos de 16 bits suponía forzar al mercado a desarrollar para 16 bits lo
que implicaba un incremento en los costes de desarrollo de controladores de periféricos y
memorias. El síntoma fue que Intel se había adelantado a su época.
Los japoneses, aprovechando la ocasión fabricaron unos clónicos de los 8086 y 8088. Fue
NEC la que, por procedimientos de reingeniería, sacó el diseño de estos micros y creó sus
modelos V20 y V30, que incrementaban el rendimiento respecto a los de Intel en un 10–
30 por ciento. Intel demandó a NEC, pero perdió el juicio. La Justicia determinó que el
microcódigo del chip podía registrarse pero Intel no había marcado en el chip el símbolo
del copyright, con lo cual perdía los derechos de copia.
Intel fabricó variaciones de estos modelos, sacando al mercado los 80C86, 80C88, 80186
y 80188 cuyas modificaciones fueron el ahorro de energía en las versiones C para su
instalación en portátiles, y el rediseño interno para la optimización en las versiones 1.
En 1984 aparece el 80286 como base para una nueva generación de ordenadores de IBM,
el IBM AT (Advanced Technology). Supone un nuevo salto tecnológico. Además de
incrementar el bus de direcciones de 20 bits a 24, lo que permitía acceder hasta los 16 Mb
de RAM, se incrementaba la velocidad, llegando a ser hasta un 25 por ciento más rápidos
que los 8086 y 8088 originales. La novedad más importante que se introdujo fue la
gestión de memoria virtual. La memoria virtual es una extensión de memoria en disco (o
dispositivo de almacenamiento secundario) añadida a la memoria física instalada. Así, el
80286 es capaz de tratar hasta un total de 1 Gb, desglosado en 16 Mb de memoria física
más 1008 Mb de memoria virtual. La memoria virtual solamente la utilizan los programas
que están preparados para ello.
Aparece también un nuevo modo de operación del microprocesador. Aparte del modo real
(el normal de operación) que direcciona hasta 1 Mb de memoria física y asegura la
compatibilidad para aplicaciones diseñadas par los 8086/8088, se tiene el modo protegido
que no es compatible con estos programas desarrollados para los micros antes
mencionados. El modo protegido es el que permite acceder a los 1.008 Mb de memoria
virtual.
Se detecta un segundo bug denominado POPAD bug. Su efecto es el vaciado del registro
acumulador EAX cuando se ejecuta una instrucción de acceso a memoria inmediatamente
después de la ejecución de la instrucción POPAD.
El 80386SX (SX significa Simple word eXternal) tiene las mismas características que el
80386DX, salvo que el bus de direcciones externo se reduce a 16 bits. Introducido en
1988 daba la potencia de un 80386 a precio de un 80286. Durante mucho tiempo se
rumoreó que el P9 podría ser compatible con los zócalos 80286, pero al final no fue así. La
razón es que el 80286 multiplexa todos sus buses para conseguir con menos líneas el
mismo resultado (menor coste) El 80386SX sólo multiplexa el bus de direcciones. Las
frecuencias de funcionamiento eran de 16, 20, 25 y 33 MHz.
La memoria cache (8 Kb) del microprocesador está dividida en 4 caches de 2 Kb cada una.
Esto agiliza la ejecución de algunas aplicaciones. Si se asigna una memoria cache
secundaria (L2) el rendimiento del micro puede aumentar hasta un 30 por ciento más.
El 80486SX es igual que un 80486DX, sólo que el coprocesador matemático está
inhabilitado. El coprocesador matemático 80487SX es en realidad un 80486DX puro que
desactiva por completo el 80486SX, sin que podamos retirarlo de la placa. Las velocidades
a las que funcionan son de 25, 33, 40 y 50 MHz. Hay versión SL para portátiles.
Los 80486 tampoco están libres del pecado original. En el 80486 cuando el coprocesador
matemático detecta un error de límite del tamaño de segmento, algunas veces la CPU falla
al generar la excepción 13. Este error se genera bajo las siguientes condiciones:
• Segmento de datos de 64 Kb.
• Operandos de direccionamiento de 16 bits.
• Almacenar un valor de 8 bytes desde el coprocesador cuando la mitad está fuera de
los limites del limite del segmento.
• Un segundo bug aparece en el cálculo de la instrucción dedicada a calcular
arcotangentes.
Intel comenzó una nueva política con la salida de los microprocesadores con la
denominación Overdrive. Los Overdrive eran actualizaciones para los microprocesadores
instalados en los sistemas que dispusieran de un segundo zócalo para tal propósito. En
esta primera generación de Overdrives los chips disponían de un duplicador de frecuencia
interno y tenían un pin más, el número 169. Este pin se encargaba de inhabilitar el 80486
instalado en la placa dejando como único micro funcionando el Overdrive. No era posible
la retirada del micro anterior, puesto que el sistema dejaba de funcionar. La política de
actualización era buena, lo que no era tan bueno era la trampa para los usuarios. Si se
puede retirar el micro anterior se puede vender a usuarios que necesiten menos potencia,
salieron los primeros en 1991.
En la segunda generación de Overdrives se olvidó el pin 169, teniendo los 168 que los
hacían compatibles con los zócalos de los 80486. En estos casos la actualización es
sencillísima: quitar el que estaba y poner el nuevo en el mismo lugar.
La tercera generación de Overdrives trabaja con un consumo menor para reducir de este
modo su alta temperatura. El voltaje se reduce a 3.3 voltios de los 5 que necesitaban los
anteriores. Si vas a comprar un DX2 o DX4 fíjate bien qué voltaje utiliza la placa. Los
Overdrives etiquetados como tal funcionan a 5V, los etiquetados directamente como DX4,
sin disipador, funcionan a 3.3V.
Intel toma como modelo la estructura separada para la memoria cache interna del
microprocesador. Consta de dos bloques de 8 Kb, uno para las instrucciones y otro para
los datos que funcionan bajo una estructura de asociación de conjuntos bidireccional. Para
los extremadamente curiosos el algoritmo de sustitución de datos en la cache es el LRU
(Least Recently Used, el menos utilizado recientemente). El coprocesador matemático
incluido utiliza algoritmos mejorados y añade instrucciones de suma, multiplicación y
división de números en punto flotante integradas en el silicio, además de incorporar un
pipeline de 8 niveles para lograr ejecutar operaciones en punto flotante en un solo ciclo de
reloj. Se integran nuevos avances tecnológicos, además de los ya comentados, como por
ejemplo la predicción de ramificaciones, buses de datos internos de 256 bits, bus de datos
externo de 64 bits (que soporta transferencias de 258 Kbytes por segundo) y memorias
cache de escritura diferida.
Intel apunta ahora hacia el mercado del entorno cliente/servidor. Con el Pentium se puede
construir un ordenador multiprocesador con 16 Pentium instalados, pudiendo actuar uno
de ellos como agente supervisor del sistema para entornos que requieran un estricto
control de errores (FRC Functional Redundancy Checking ). Aunque esto sirvió de poco en
un principio. La nueva y mejorada unidad de punto flotante cometía un error garrafal al
hacer una simple división. Recientemente han aparecido versiones del Pentium a 75, 90,
100 y 133 MHz, siendo el último, presentado el 23 de octubre, uno a 120 MHz diseñado
especialmente para ordenadores portátiles.
Aparte de ser como un Pentium genuino cabe destacar la presencia de una memoria cache
de 32 Kb, un regulador de tensión para reducir la tensión de 5 a 3,3 voltios, disipador y
ventilador integrado y una circuitería interna que incrementa en dos veces y media la
frecuencia del bus del sistema (33 MHz * 2′5 = 82′5 MHz). El incremento medio en las
prestaciones respecto a un 80486 a 66 MHz es de un 50 por ciento aunque en aplicaciones
puntuales (Auto CAD 13) puede ser de un 96 por ciento, lo que lo sitúa en las
prestaciones de un Pentium genuino a 75 MHz.
Este nuevo producto tiene un bus que ha sido diseñado para conectar varios Pentium Pro
en paralelo que soporta el protocolo MESI (Modified Exclusive Shared Invalid), es un
microprocesador de 32 bits que incorpora una instrucción más (mover datos
condicionalmente) que supone una mayor predicción de ramificaciones en la ejecución.
Tiene 21 millones de transistores, 5′5 millones en el núcleo y 15′5 millones en la memoria
cache secundaria. La CPU consta de dos chips colocados en cavidades independientes
conectadas internamente. El chip correspondiente a la memoria cache es más pequeño
que el del chip del núcleo, ya que la disposición de los transistores permite una mayor
concentración.
Intel luego trabajo en sus modelos P 55 C?, P68 y P7. El P 55 C, es una versión Lite del
Pentium Pro, presumiblemente compatible pin a pin con los zócalos de 80486 y fue
especialmente diseñado para ejecutar aplicaciones de Windows 95. El P68 y el P7
corresponden a un nuevo escalón, ya que son micros de 64 bits que se presentarán a lo
largo de 1997. El primero es el sucesor del Pentium Pro compatible con la familia x86,
mientras que el P7 es una coproducción de Intel y Hewlett-Packard que utilizará la
tecnología PA-RISC de HP.
http://www.intel.co.nz/espanol/
http://members.tripod.com/~alpertron/
Aunque todos los ensambladores realizan básicamente las mismas tareas, podemos
clasificarlos de acuerdo a sus características. Así podemos clasificarlos en:
Ensambladores Residentes.
Macroensambladores.
Microensambladores.
Estos ensambladores leen una línea del programa fuente y la traducen directamente para
producir una instrucción en lenguaje máquina o la ejecuta si se trata de una
pseudoinstrucción. También va construyendo la tabla de símbolos a medida que van
apareciendo las definiciones de variables, etiquetas, etc.
Debido a su forma de traducción, estos ensambladores obligan a definir los símbolos antes
de ser empleados para que, cuando aparezca una referencia a un determinado símbolo en
una instrucción, se conozca la dirección de dicho símbolo y se pueda traducir de forma
correcta. Estos ensambladores son sencillos, baratos y ocupan poco espacio.
Los ensambladores de dos fases se denominan así debido a que realizan la traducción en
dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de
símbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y
pueden ir traduciendo totalmente, puesto que conocen la totalidad de los símbolos
utilizados y las posiciones que se les ha asignado. Estos ensambladores son los más
utilizados en la actualidad.
Las memorias han evolucionado mucho desde los comienzos del mundo de la
computación. Conviene recordar los tipos de memorias de semiconductores empleadas
como memoria principal y unas ligeras pinceladas sobre cada una de ellas para enmarcar
las memorias flash dentro de su contexto.
Organizando estos tipos de memoria conviene destacar tres categorías si las clasificamos
en función de las operaciones que podemos realizar sobre ellas, es decir, memorias de
sólo lectura, memorias de sobre todo lectura y memorias de lectura y escritura.
• EPROM (EPROM son las siglas de Erasable Programmable Read-Only Memory (ROM
borrable y programable). Es un tipo de chip de memoria ROM inventado por el ingeniero
Dov Frohman que retiene los datos cuando la fuente de energía se apaga. En otras
palabras, no es volátil.
• MEMORIA FLASH: Está basada en las memorias EEPROM pero permite el borrado bloque
a bloque y es más barata y densa. La memoria flash es una forma evolucionada de la
memoria EEPROM que permite que múltiples posiciones de memoria sean escritas o
borradas en una misma operación de programación mediante impulsos eléctricos, frente a
las anteriores que sólo permite escribir o borrar una única celda cada vez. Por ello, flash
permite funcionar a velocidades muy superiores cuando los sistemas emplean lectura y
escritura en diferentes puntos de esta memoria al mismo tiempo. Flash, como tipo de
EEPROM que es, contiene un array de celdas con un transistor evolucionado con dos
puertas en cada intersección. Tradicionalmente sólo almacenan un bit de información. Las
nuevas memorias flash, llamadas también dispositivos de celdas multi-nivel, pueden
almacenar más de un bit por celda variando el número de electrones que almacenan.
Cabe destacar que las memorias flash están subdividas en bloques (en ocasiones llamados
sectores) y por lo tanto, para el borrado, se limpian bloques enteros para agilizar el
proceso, ya que es la parte más lenta del proceso. Por esta razón, las memorias flash son
mucho más rápidas que las EEPROM convencionales, ya que borran byte a byte. No
obstante, para reescribir un dato es necesario limpiar el bloque primero para reescribir su
contenido después.
Memorias de Lectura/Escritura
• MEMORIA RAM o Memoria de acceso Aleatorio ( Random Access Memory ).Esta memoria
es como un escritorio al igual que los escritorios tienen cajones donde ordenan la
información, cuanto mas grande sea el escritorio (plano de apoyo) mas cajones voy a
tener de tal suerte que el micro va a perder menos tiempo en buscar y ordenar la
información
• DRAM (Dynamic Random Access Memory): Los datos se almacenan como en la carga de
un condensador. Tiende a descargarse y, por lo tanto, es necesario un proceso de refresco
periódico. Son más simples y baratas que las SRAM. Este tipo de memoria se utilizan des
los años 80 hasta ahora en toda las computadoras Esta memoria tiene una desventaja hay
que estimularla (Refresco) permanentemente porque se olvida de todo. Como se
estimula: requiere un procesador que ordene el envió de cargas eléctricas, a este tipo de
memorias se le conoce como memoria estáticas Otras de las desventajas de esta memoria
es que es lenta y la ventaja es que es barata. Obviamente al tener estas desventajas se le
incorporaron distintas tecnologías para mejorarlas.
• FPM DRAM. La ventaja de este memoria consiste en pedir permiso una sola vez u
llevarse varios datos consecutivos esto comenzó a usarse principios de os años noventa y
dio buenos resultados a estos módulos se los denominaron SIMM FPM DRAM y pueden
tener 30 o 72 pines y se la utiliza en las Pentium I lo que logro con esta tecnología es
agilizar el proceso de lectura, estas memorias ya no se utilizan mas.
• EDO DRAM Estas memorias aparecieron en 1995, y se hicieron muy populares ya que
estaban presentes en todas las Pentium I MMX y tenia la posibilidad de localizar un dato
mientras transfería otro, a diferencia de las anteriores que mientras transfería un dato se
bloqueaba. Estas EDO SIMM eran de 72 pines
• DDR SDRAM: En este caso se consiguió que pudiera realizar dos transferencia en una
pulsación o tic-tac de reloj, esta memoria pude alcanzar velocidades de 200 a 266Mhz,
Tiene una ventaja mas trabaja en sincronía con el bus del motherboard si este acelera la
memoria también pero tiene una desventaja son muy caras. Se conoce como DIMM DDR
SDRAM PC 1600 Y PC 2100.
• SRAM (Static Random Access Memory): Los datos se almacenan formando biestables,
por lo que no requiere refresco. Igual que DRAM es volátil. Son más rápidas que las DRAM
y más caras.
• MEMORIA CACHÉ o SRAM: La memoria caché trabaja igual que la memoria virtual,
tenemos caché en el procesador, en los discos y en el motherboard y nos guarda
direcciones de memoria. Si ejecutamos un programa en principio, lo cerramos y luego los
volvemos a ejecutar, la memoria caché nos guarda la ubicación (dirección) en el disco,
cuando lo ejecuté, y lo que hicimos con el programa. Es mucho más rápida cuando ya
usamos un programa
Tipos de memoria caché:
Cache L1: Esta dividido en dos bloques uno contiene las instrucciones y otro los datos y
cuando se habla de su capacidad de almacenamiento se dice que es de 2×16 Kb. El cache
L1 se encuentra dentro del interior del procesador y funciona a la misma velocidad que el
micro con capacidades que van desde 2×8 hasta 2×64Kb
Cache L3: Algunos micro soportan un nivel de caché mas, el L3 que esta localizado en el
motherboard.
Dispositivos de entrada
Son todos los elementos que permiten la unión del usuario con la unidad de
procesamiento central y la memoria.: Entre estos tenemos: Teclado, Mouse o Ratón y
Joysticks, Escáner o digitalizador de imágenes, Dispositivos ópticos, Micrófonos.
Teclado: Dispositivos de entrada que traducen los datos a una forma que la computadora
pueda interpretar, para luego procesarlos y almacenarlos.
Dispositivos ópticos: entre estos tenemos, Lector de marcas o rastreador de marca óptica,
Digitalizador de imágenes (scanner), Cámara digital:
Dispositivos de salida
Estos dispositivos permiten al usuario ver los resultados de los cálculos o de las
manipulaciones de datos de la computadora. Los dispositivos de salida más comunes son:
el monitor, la impresora y el módem.
Monitor: sirve como dispositivo de salida para recibir mensajes del computador.
Impresora: seguro Una impresora permite obtener una copia dura o física de cualquier
información que pueda aparecer en pantalla. Hay dos grupos básicos que son: impresora
de Impacto y no impacto (tinta o laser) o de página.
Módem: dispositivo que sirve para enlaza dos ordenadores transformando las señales
digitales.
Dispositivos de Almacenamiento
Son todos los dispositivos que se utilizan para almacenar información de la computadora.
Disco Duro: es un disco rígido, con sensibilidad magnética, que gira continuamente a gran
velocidad dentro del chasis del computador
Disco ópticos: Una unidad de disco óptico usa rayos láser en lugar de imanes para leer y
escribir la información en la superficie del disco.
1.2 El microprocesador.
1.2.1 Buses.
El significado del acrónimo que nos indica su nombre es: Industrial Standard Arquitecture,
que traducido sería, Arquitectura Industrial Estandarizada. El primero al salir al mercado
comercial junto con el primer PC de IBM, fue el bus XT al 1980, funcionaba a la misma
velocidad que los microprocesadores de la época, los 8086 y 8088, a 4.77 MHz; y su
amplitud de banda era de 8 bits. De aquí que con el 8088 se compenetraran
perfectamente, pero con el 8086 (ancho de banda de 16 bits) ya no había tanta
compenetración y surgió el concepto y el hecho de los “cuellos de botella”.
Con la introducción del AT, apareció el nuevo bus de datos de 16 bits (ISA), y compatible
con su antecesor. También se amplió el bus de direcciones hasta 24 bits, la velocidad de
señales de frecuencia también se aumentó: de 4.77 MHz a 8.33 MHz. De nuevo nos
encontramos con un atasco de información entre la memoria y la CPU. A las tarjetas de
expansión incluso, se le asignaron una señal en estado de espera (wait state), el cual
daba más tiempo a las tarjetas lentas para enviar toda la información a la memoria.
Surgió cuándo IBM trabajaba para crear una nueva tecnología de bus, la sacó con sus
ordenadores que incorporaban el PS/2, el MCA (Micro Channel Arquitecture) permitía una
transferencia de datos máxima de 20 Mb/s, por la nueva dirección de 32 bits, y el
aumento de velocidad a 10 MHz. IBM incluyó un circuito de control especial a cargo del
bus, que le permitía operar independientemente de la velocidad del bus y del tipo de
microprocesador.
Este bus es, tal y como nos indica su nombre (Enhanced Industrial Standard
Arquitecture), una extensión del primitivo bus ISA o AT. Tal y como hacía el MCA, su bus
de direcciones era de 32 bits basándose en la idea de controlar un bus desde el
microprocesador. Mantuvo la compatibilidad con las tarjetas de expansión de su antecesor
ISA, motivo por el cual tuvo que adoptar la velocidad de éste (8.33 MHz). Una de las
ventajas que presentaba fue la de que era un sistema abierto, varias compañías
contribuyeron a su desarrollo: AST, Compaq, Epson, Hewlett Packard, Olivetti, Tandy,
Wyse, y Zenith.
Fue el primer bus a poder operar con sistemas de multiproceso (integrar al sistema varios
buses dentro del sistema, cada uno con su procesador). Al igual que al MCA, incorporó un
chip, el ISP Sistema Periférico Integrado, encargado de controlar el tráfico de datos
señalando prioridades para cada posible punto de colisión o de bloqueo mediante reglas
de control de la especificación EISA.
Local Bus
Vistos los resultados de los intentos fallidos para renovar y sustituir al bus ISA, surgió este
nuevo tipo de bus con un concepto de bus diferente a todos los otros existentes, su mayor
consolidación y aprovechamiento lo tuvo en el área de las tarjetas gráficas, que eran las
que más desfavorecidas quedaron con los anteriores buses y velocidades.
VL no se arriesgó a padecer otro intento fallido como los de EISA o MCA, y no quiso
sustituir al ISA, sino que lo complementó. Por lo tanto tenemos que para poseer un PC
con VL, éste también debe tener el bus ISA, y sus respectivas tarjetas de expansión, del
VL en cambio, tendremos una o dos ranuras de expansión, y son sólo estas las que son
conectadas con la CPU mediante un bus VL; de esta forma tenemos a cada sistema de bus
trabajando por su cuenta y sin estorbarse el uno al otro.
El VL es una expansión homogeneizada del bus local, que funcionaba a 32 bits pero podía
realizar operaciones de 16 bits. El comité VESA presentó la primera versión del VL-BUS en
agosto del 1992, y dado su completa integración y compenetración con el procesador
80486 se extendió rápidamente por el mercado.
Este modelo que hoy en día rige en los ordenadores convencionales, y es el más
extendido de todos, lo inventó Intel y significa: interconexión de los componentes
periféricos.
Con la llegada de este nuevo bus automatizado en todos sus procesos, el usuario ya no se
tendrá que preocupar más de controlar las direcciones de las tarjetas o de otorgar
interrupciones. Integra control propio de todo el relacionado con él: DMA, interrupciones,
direccionamiento de datos.
Es independiente de la CPU, puesto que entre estos dos dispositivos siempre habrá un
controlador del bus PCI, y da la posibilidad de poder instalarlo a sistemas no basados en
procesadores Intel. Las tarjetas de expansión se pueden acoplar a cualquier sistema, y
pueden ser intercambiadas como se quiera, tan solo los controladores de los dispositivos
tienen que ser ajustados al sistema anfitrión (host), es decir a la correspondiente CPU.
Su velocidad no depende de la de la CPU sino que está separada de ella por el controlador
del bus. Solución al problema del VL-BUS, dónde las tarjetas debían aceptar la máxima
frecuencia de la CPU o no podían funcionar.
El conector empleado es estilo Micro Channel de 124 pines (128 en caso de trabajar con
64 bits), aunque sólo se utilizan 47 de las conexiones (49 en el caso de tratarse de un
conector bus-master), la diferencia se adeuda a las conexiones de toma de tierra y de
alimentación.
Su gran salida y aceptación fue en gran parte por su velocidad, así el hardware se podía
adaptar a la contínua evolución y el incremento de velocidad de los procesadores.
SCSI no se conecta directamente a la CPU sino que utiliza de puente uno de los buses
anteriormente mencionados. Se podría definir como un subsistema de E/S inteligente,
cumplido y bidireccional. Un solo adaptador host SCSI puede controlar hasta 7 dispositivos
SCSI conectados con él.
Una de las ventajas del SCSI en frente a otros es que los dispositivos se direccionan
lógicamente en vez de físicamente, este sistema es útil por dos razones:
1. Elimina cualquier limitación que el conjunto PC-Bios pueda imponer a las unidades
de disco.
Aunque varios dispositivos (hasta 7), pueden compartir un mismo adaptador SCSI, tan
sólo 2 de éstos pueden comunicarse sobre el mismo bus a la vez.
Fue creada por Intel para dar pie a la creación de un nueve tipo de PC, al cual prestaron
especial atención a los gráficos y la conectividad. Basado en la especificación PCI 2.1 a 66
MHz, incluyó tres características para el aumento de su rendimiento: operaciones de
lectura/escritura en memoria con pipeline, demultiplexado de datos y direcciones al propio
bus, e incremento de la velocidad hasta los 100 MHz (el que supone una razón de
transferencia de más de 800 Mbytes/s, más de cuatro veces que el PCI).
En su caso, como es un bus especialmente dedicado a los gráficos, no tiene que compartir
con otros dispositivos el ancho de banda; otra característica de esta estructura es la de
que posibilita la compartición de la memoria principal por parte de la tarjeta gráfica
mediante un modelo denominado por Intel como DIME ( DIrect Memory Execute
-ejecución directa a memoria), la cual hace posible la obtención de mejores texturas en
juegos y aplicaciones 3D, al almacenar estas en la RAM del sistema y transferirlas cuando
las pidan otros dispositivos. Los buses de datos en la actualidad son de gran importancia
por lo que por medio de ellos, se nos hace posible la comunicación con cualquier tipo de
dispositivo.
1.2.2 Registros.
• Registros de segmento
• Registros de apuntadores de instrucciones
• Registros apuntadores
• Registros de propósitos generales
• Registro índice
• Registro de bandera.
Registros de segmento
Registro CS.
El DOS almacena la dirección inicial del segmento de código de un programa en el registro
CS. Esta dirección de segmento, mas un valor de desplazamiento en el registro de
apuntador de instrucción (IP), indica la dirección de una instrucción que es buscada para
su ejecución. Para propósito de programación normal, no se necesita referenciar el
registro CS.
Registro DS.
La dirección inicial de un segmento de datos de programa es almacenada en el registro
DS. En términos sencillos, esta dirección, mas un valor de desplazamiento en una
instrucción, genera una referencia a la localidad de un byte especifico en el segmento de
datos.
Registro SS.
El registro SS permite la colocación en memoria de una pila, para almacenamiento
temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de
pila de un programa en el registro SS. Esta dirección de segmento, más un valor de
desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la
pila que está siendo direccionada. Para propósitos de programación normal, no se necesita
referenciar el registro SS.
Registro ES
Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro
esta de segmento para manejar el direccionamiento de memoria. En este contexto, el
registro ES esta asociado con el registro DI (índice destino). Un programa que requiere el
uso del registro ES puede inicializarlo con una dirección apropiada.
Registros FS y GS.
Son registros extra de segmento en los procesadores 80386y posteriores a estos
procesadores.
Registros apuntadores.
El registro SP
El apuntador de pila SP de 16 bits esta asociado con el registro SS y proporciona un valor
de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila.
El ejemplo siguiente el registro SS contiene la dirección de segmento 27B3[0]H y el SP el
desplazamiento 312H Para encontrar la palabra actual que esta siendo procesada en la
pila el microprocesador combina las direcciones en el SS y el SP:
Dirección de segmento en el registro SS: 27B30H
Desplazamiento en el registro SP: + 312H
Dirección en la Pila: 27E42H
27B3[0]H 312H
Dirección del segmento SS Desplazamiento del SP
Registro BP.
El registro BP de 16 bits facilita la referencia de parámetros, los cuales son datos y
direcciones transmitidos vía rápida.
Los registros de propósitos generales AX, BX, CX y DX son los caballos de batalla o las
herramientas del sistema. Son los ú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
si nombre. Las instrucciones siguientes mueven ceros a los registros CX, CH y CL
respectivamente.
Mov CX, 00
Mov CH, 00
Mov CL, 00
Registro AX.
El registro AX, el acumulador principal, es utilizado para operaciones que implican
entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para
multiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones
generan código más eficientes si se refiere al AX en lugar de los otros registros.
Registro BX.
Es conocido como el registro base ya que es el único registro de propósitos generales que
pueden ser unos índices para direccionamiento indexado. También es común emplear al
BX para cálculos.
Registro CX.
El CX es conocido como el registro contador. Puede contener un valor para controlar el
número de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la
derecha o hacia la izquierda. El CX también es usado para muchos cálculos.
Registro DX.
El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida
requieren su uso, y las operaciones de multiplicación y división con cifras grandes suponen
al DX y al AX trabajando juntos. Puede usar los registros de propósitos para suma y resta
de cifras de 8, 16, 32 bits.
Registros índice
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 a 32 bits, el ESI.
Registro DI
El registro índice destino también 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 a 32 bits, el EDI.
Registro de banderas
• Direccionamiento Inmediato
• Direccionamiento de Registros
• Direccionamiento Directo
• Direccionamiento Indirecto de Registros
• Direccionamiento Relativo a Base
• Direccionamiento Indexado Directo
• Direccionamiento Indexado Base con Desplazamiento
Direccionamiento Inmediato
Direccionamiento de Registros
El valor del operando fuente ya ha sido almacenado en uno de los registros de memoria
interna del microprocesador. Este puede ser igualmente un dato de 8 o 16 bits y en algunos
microprocesadores hasta de mayor cantidad de bits. Especifica el operando fuente y el
operando destino. Los registros deben ser del mismo tamaño.
MOV DX, CX
MOV CL, DL.
Direccionamiento Directo
En lugar de referenciar por un rotulo la direccion del operando fuente, el valor del
operando señalado por una direccion de desplazamiento almacenada en uno de los
registros siguientes: SI (Indice fuente), SI (Indice destino), BX (Registro base) o bajo
algunas circunstancias el BP (apuntador base).
La dirección efectiva EA está especificada en un registro apuntador o un registro índice. El
apuntador puede ser el registro base BX o el apuntador base BP; el registro índice puede
ser el Indice Fuente (SI) o el Indice Destino (DI).
MOV (DI),BX
1.3 Interrupciones.
Son las peticiones generadas por algunos de los eventos que se llevan a cabo dentro del
sistema computacional, que pueden ser de hardware o de software.
1.3.1 Hardware.
Las interrupciones internas son generadas por ciertos eventos que surgen durante la
ejecución de un programa. Este tipo de interrupciones son manejadas en su totalidad por
el hardware y no es posible modificarlas.
Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del reloj
interno de la computadora, el hardware hace el llamado a esta interrupción varias veces
durante un segundo para mantener la hora actualizada.
Aunque no podemos manejar directamente esta interrupción (no podemos controlar por
software las actualizaciones del reloj), es posible utilizar sus efectos en la computadora
para nuestro beneficio, por ejemplo para crear un “reloj virtual” actualizado
continuamente gracias al contador del reloj interno. Unicamente debemos escribir un
programa que lea el valor actual del contador y lo traduzca a un formato entendible para
el usuario.
Las interrupciones externas las generan los dispositivos periféricos, como pueden ser:
teclado, impresoras, tarjetas de comunicaciones, etc. También son generadas por los
coprocesadores. No es posible desactivar a las interrupciones externas.
Interrupción 10H
INT 10H
Esta interrupción tiene diversas funciones, todas ellas nos sirven para controlar la entrada
y salida de video, la forma de acceso a cada una de las opciones es por medio del registro
AH. En este caso únicamente se verán algunas de las funciones de esta interrupción.
Función 02H Se utiliza para posicionar el cursor en la pantalla dentro de las coordenadas
válidas de texto. No utiliza registros de retorno.
MOV AH,02H
DH = Fila
DL = Columna
Las posiciones de localización del cursor son definidas por coordenadas iniciando en 0,0,
que corresponde a la esquina superior izquierda hasta 79,24 correspondientes a la
esquina inferior derecha. Tenemos entonces que los valores que pueden tomar los
registros DH y DL en modo de texto de 80 x 25 son de 0 hasta 24 y de 0 hasta 79
respectivamente.
Función 09H Se utiliza para desplegar un caracter un determinado número de veces con
un atributo definido empezando en la posición actual del cursor. Tampoco utiliza registros
de retorno.
Registros de llamada:
MOV AH,09H
AL = Caracter a desplegar
CX = Número de repeticiones.
Función 0AH Se utiliza para desplegar un caracter en la posición actual del cursor.
Tampoco utiliza registros de retorno.
MOV AH,0AH
AL = Caracter a desplegar
CX = Número de repeticiones
La única diferencia entre esta función y la anterior es que ésta no permite modificar los
atributos, simplemente usa los atributos actuales. Tampoco se altera la posición del cursor
con esta función.
MOV AH,0AH
AL = Caracter a desplegar
Interrupción 16H
Sintaxis:
INT 16H
Veremos dos opciones de la interrupción 16H, estas opciones, al igual que las de otras
interrupciones, son llamadas utilizando el registro AH.
MOV AH,00H
Registros de retorno:
Cuando se utiliza esta interrupción se detiene la ejecución del programa hasta que se
introduzca un caracter desde el teclado, si la tecla presionada es un caracter ASCII su
valor será guardado en el registro AH, de lo contrario el código de barrido será guardado
en AL y AH contendrá el valor 00H.
El código de barrido fue creado para manejar las teclas que no tienen una representación
ASCII como [ALT], [CONTROL], las teclas de función, etc.
MOV AH,01H
Registros de retorno:
Si la bandera de cero, ZF, está apagada significa que hay información en el buffer, si se
encuentra prendida es que no hay teclas pendientes. En caso de existir información el
registro AH contendrá el código de la tecla guardada en el buffer.
Interrupción 17H
Sintaxis:
INT 17H
MOV AH,00H
AL = Caracter a imprimir
DX = Puerto a utilizar
Registros de retorno:
AH = Estado de la impresora.
1-
2-
3 1 Error de entrada/salida
4 1 Impresora seleccionada
5 1 Papel agotado
6 1 Reconocimiento de comunicación
Los bits 1 y 2 no son relevantes. La mayoría de los BIOS únicamente soportan 3 puertos
paralelos aunque existen algunos que soportan 4.
MOV AH,01H
DX = Puerto a utilizar
Registros de retorno:
AH = Status de la impresora
1-
2-
3 1 Error de entrada/salida
4 1 Impresora seleccionada
5 1 Papel agotado
6 1 Reconocimiento de comunicación
MOV AH,02H
DX = Puerto a utilizar
Registros de retorno:
AH = Status de la impresora.
1-
2-
3 1 Error de entrada/salida
4 1 Impresora seleccionada
5 1 Papel agotado
6 1 Reconocimiento de comunicación
1.3.2 Software.
Este tipo de interrupciones podemos separarlas en dos categorías: las interrupciones del
sistema operativo DOS y las interrupciones del BIOS.
La diferencia entre ambas es que las interrupciones del sistema operativo son más fáciles
de usar pero también son más lentas ya que estas interrupciones hacen uso del BIOS para
lograr su cometido, en cambio las interrupciones del BIOS son mucho más rápidas pero
tienen la desventaja que, como son parte del hardware son muy específicas y pueden
variar dependiendo incluso de la marca del fabricante del circuito.
Interrupción 21H
Sintaxis:
INT 21H
Nota: Cuando trabajamos en MASM es necesario especificar que el valor que estamos
utilizando es hexadecimal.
Esta interrupción tiene varias funciones, para acceder a cada una de ellas es necesario
que el registro AH se encuentre el número de función que se requiera al momento de
llamar a la interrupción.
MOV AH,02H
Esta función nos despliega el caracter cuyo codigo hexagesimal corresponde al valor
almacenado en el registro DL, no se modifica ningún registro al utilizar este comando. Es
recomendado el uso de la función 40H de la misma interrupción en lugar de esta función.
MOV AH,09H
Esta función despliega los caracteres, uno a uno, desde la dirección indicada en el registro
DS:DX hasta encontrar un caracter $, que es interpretado como el final de la cadena. Se
recomienda utilizar la función 40H en lugar de esta función.
MOV AH,40H
BX = Vía de comunicación
CX = Cantidad de bytes a escribir
DS:DX = Dirección del inicio de los datos a escribir
Registros de retorno:
MOV AH,01H
Registros de retorno:
AL = Caracter leído Con esta función es muy sencillo leer un caracter del teclado, el código
hexadecimal del caracter leído se guarda en el registro AL. En caso de que sea un caracter
extendido el registro AL contendrá el valor de 0 y será necesario llamar de nuevo a la
función para obtener el código de este caracter.
Función 0AH Se utiliza para leer un caracter del teclado y almacenarlos en un buffer.
MOV AH,0AH
Registros de retorno:
Cuando se han almacenado todos los caracteres indicados menos uno la bocina suena y
cualquier caracter adicional es ignorado. Para terminar la captura de la cadena es
necesario darle [ENTER].
Registros de retorno:
Registros de retorno:
Registros de retorno:
Registros de retorno:
AL = 00H si no hubo errores, de lo contrario contendrá el código del error: 1 disco lleno o
archivo de solo lectura, 2 error en la formación o especificación del FCB. La función 15H
después de escribir el registro al bloque actual actualiza el FCB.
Registros de retorno:
Algunas otras interrupciones se veran mas adelante como parte del resumen de
programación en ensamblador.
* Instrucciones:
* Directivas:
El fichero creado con todas las sentencias que constituyen un programa se denomina
fichero fuente. Este tipo de fichero tiene formato ASCII. Se recomienda que el fichero de
código fuente tenga por extensión .asm.
Este fichero tiene formato ASCII y contiene el código máquina de las instrucciones que
componen el programa, así como cierta información adicional para realizar la carga del
programa en la computadora del usuario.
Todos los ficheros fuente tienen que adecuarse a una estructura fija dividida en secciones.
UN EJEMPLO CLASICO:
STACK ENDS
DATA ENDS
2.- La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo
de dólares al final de la cadena (denominado centinela) es requerido por la función de
visualización de la cadena de MS-DOS. La cadena incluye los códigos para carriage-return
y line-feed.
3.- La etiqueta INICIO en el segmento de código marca el inicio de las instrucciones del
programa.
4.- La declaración DW en el segmento de pila define el espacio para ser usado por el stack
del programa.
5.- La declaración ASSUME indica que registros de segmento se asociarán con las
etiquetas declaradas en las definiciones de segmentos.
6.- Las primeras dos instrucciones cargan la dirección del segmento de datos en el
registro DS. Estas instrucciones no son necesarias para los segmentos de código y stack
puesto que la dirección del segmento de código siempre es cargada en el registro CS y la
dirección de la declaración del stack segment es automáticamente cargada en el registro
SS.
7.- Las últimas dos instrucciones del segmento CODE usa la función 4CH de MS-DOS para
regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero
ésta es la más recomendada.
8.- La directiva END indica el final del código fuente y especifica a INICIO como punto de
arranque.
En cuanto a la estructura, todos los archivos fuente tienen la misma forma: cero o más
segmentos de programa seguidos por una directiva END. No hay una regla sobre la
estructura u orden que deben seguir las diversas secciones o áreas en la creación del
código fuente de un programa en ensamblador. Sin embargo la mayoría de los programas
tiene un segmento de datos, un segmento de código y un segmento de stack, los cuales
pueden ser puestos en cualquier lugar.
DIRECTIVAS.
.8086(defecto).- Activa las instrucciones para el 8086 y 8088 e inhibe las del 80186 y
80286.
nombre ENDS
El nombre del segmento es dado por nombre, y debe ser único. Segmentos con el mismo
nombre se tratan como un mismo segmento. Las opciones alineación, combinación, y
clase proporcionan información al LINK sobre cómo ajustar los segmentos. Para alineación
tenemos los siguientes valores: byte (usa cualquier byte de dirección), word (usa
cualquier palabra de dirección, 2 bytes/word), para (usa direcciones de párrafos, 16
bytes/párrafo, deafult), y page (usa direcciones de página, 256 bytes/page), combinación
define cómo se combinarán los segmentos con el mismo nombre. Puede asumir valores
de: public (concatena todos los segmentos en uno solo), stack (igual al anterior, pero con
direcciones relativas al registro SS, common (crea segmentos sobrepuestos colocando el
inicio de todos en una misma dirección), memory (indica al LINK tratar los segmentos
igual que MASM con public, at address (direccionamiento relativo a address). Clase indica
el tipo de segmento, señalados con cualquier nombre. Cabe señalar que en la definición
está permitido el anidar segmentos, pero no se permite de ninguna manera el
sobreponerlos.
donde tipo puede ser BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR.
El segmento de código (CS) contiene las instrucciones de maquina que son ejecutadas por
lo común la primera instrucción ejecutable esta en el inicio del segmento, y el sistema
operativo enlaza a esa localidad para iniciar la ejecución del programa. Como su nombre
indica, el registro del CS direcciona el segmento de código. Si su área de código requiere
más de 64K, su programa puede necesitar definir mas de un segmento de código.
DJNZ Decrement
NOP No Operation
ORL Logical OR for byte variables
XRL Exclusive OR
?? Undefined Instruction
1.4.5 Directivas.
Las directivas: son órdenes para el ensamblador y no tienen traducción a código máquina,
las directivas son similares a las instrucciones, pero a diferencia de estas las directivas son
propias del lenguaje ensamblador e independientes del microcontrolador que se utilice.
Las directivas representan algunas características del lenguaje ensamblador, se utilizan
para especificar el procesador empleado así como la configuración de este, también para
asignar locaciones de memoria, entre otras cosas.
1.5 Procedimiento de ensamble, enlace y ejecución.
Proceso de Ensamble
Enlace y Ejecución
• Construir el módulo de carga asignando las posiciones de todos los segmentos de todos
los módulos objeto que se están enlazando.
• Rellenar todos los desplazamientos de segmento que no pudieron ser determinados por
el ensamblador.
Normalmente en el proceso de ensamblado bastan con 2 pasos para determinar todas las
direcciones, por ejemplo:
Jmp etiq
etiq:
Por lo tanto, en el 1er paso se utiliza una variable denominada “contador de posición” ($).
A medida que se analiza el programa, se va incrementando dicha variable en función de
los bytes que necesita cada sentencia.