You are on page 1of 59

Arquitectura de Computadores: Electrnica Digital II ESTUDIO DE LA ARQUITECTURA Intel DE 32 BITS (IA-32)

16/06/06

El presente trabajo presenta ha sido diseado para servir de herramienta instruccional en el estudio de la arquitectura de los microprocesadores Intel, en especial los pertenecientes a la arquitectura de 32 bits (IA-32). En tal sentido este trabajo se presenta un anlisis de la arquitectura, la programacin y la conexin de la familia de Microprocesadores IA32 de Intel. 1. Resumen de la historia del desarrollo de la computacin1 baco, utilizado por los antiguos Babilonios 500 A.C.

La generacin cero - Computadoras mecnicas (1642 - 1945) Blaise Pascal (1623 1662, Francs): desarrolla su mquina calculadora a los 19 aos de edad en 1642. Esta mquina era capaz de sumar y restar. Barn Gottfried Wilhem von Leibniz (1646 - 1716): cientfico alemn que crea una mquina que adems de sumar y restar permita multiplicar y dividir en 1972. 150 aos despus Charles Babbage (1792-1871, Cambridge): crea su Mquina de Diferencias, que sumaba, restaba y ejecutaba un slo algoritmo (el de diferencias finitas empleando polinomios); la salida de la mquina era mediante tarjetas de cobre perforadas (precursor de las tarjetas perforadas y el CD-ROM). Despus crea la mquina analtica capaz de ejecutar diferentes algoritmos mediante el uso de tarjetas perforadas a la entrada y salida. El gran avance de la mquina analtica era que lea instrucciones de tarjetas perforadas y las ejecutaba. sta fue la primera mquina programable. Para desarrollar el software que requera esta mquina, Babbage contrat a Ada Augusta Lovelace, hija del poeta Britnico Lord Byron, convirtindose en la primera programadora del mundo. Konrad Zuse utiliz relevadores para construir mquinas calculadoras, que fueron destruidas en el bombardeo de Berln en 1944, estas fueron las primeras mquinas en utilizar relevadores (rels -lgica digital-) a nivel mundial. Posteriormente, John Atanasoff (del Iowa State College) y George Stibbitz (de Bells Labs), dos estadounidenses, disearon mquinas calculadoras diferentes. Atanasoff utilizaba aritmtica binaria e ide una memoria de condensadores las cuales se renovaban peridicamente para evitar que se perdiera la carga, a lo que llam refrescamiento. Los chips actuales de memoria dinmica (RAM) funcionan de esta manera. Aiken construy el Mark I en 1944 en Hardvard (mquina de relevadores), para cuando termin de construir su Mark II ya era obsoleta la tecnologa de relevadores. Avances Relevantes de la poca: -Primera mquina de cmputo. -Primera mquina capaz de ejecutar diferentes algoritmos y primer programador del mundo. -Uso de relevadores en computadores (lgica digital). -Concepcin de la memoria dinmica (memoria basada en capacitancias que requiere de procesos de refrescamiento). La primera generacin - Bulbos (1945 - 1955) ENIGMA: mquina alemana utilizada para la codificacin de mensajes durante la segunda guerra mundial. COLOSSUS: fue la respuesta de los ingleses ante la necesidad de descifrar los mensajes alemanes. Esta mquina no tuvo gran relevancia en el desarrollo de las computadoras debido a que se mantuvo en secreto por parte del gobierno britnico. John Mauchley y J. Presper Eckert construyeron la ENIAC (Electronic Numerical Integrator And Computer) en 1946 bajo los auspicios del ejrcito norteamericano para el clculo de las tablas de alcance de sus misiles. Sin embargo, la culminacin de este trabajo ocurri despus de la segunda guerra mundial por cuanto se permiti que se divulgara este avance logrando despertar el inters el los computadores electrnicos. Crearon una compaa que despus se convertira en Unisys Corporation. John von Neumann construy su versin del ENIAC (habiendo trabajado en este proyecto con Mauchley y Eckert) basado en un nuevo modelo creado por el mismo Neumann al cual denomin "mquina IAS". Neumann se percat que el programa poda ser almacenado en la memoria del computador y que la aritmtica binaria resultaba ser mejor que la decimal, hasta entonces utilizada. A partir de estas ideas Neumann describi lo que ahora se conoce como la mquina de von Neumann, que consista en cinco (5) partes, la memoria, la unidad aritmtica lgica, la unidad de control y los equipos de entrada y salida (ver Figura 1). La primera mquina construida con el modelo descrito por Neumann se llam EDSAC (Electronic Delay Storage Automatic Calculator) desarrollada por Maurice Wilkes y sus colegas de Cambridge (Inglaterra), se complet en Junio de 1949 y fue la primera computadora que almacenaba programas. En el Instituto tecnolgico de Masachussets (MIT) se crea una computadora que usaba memoria de ncleos magnticos y tamao de 16 bits, adems fu diseada para el control en tiempo real. Esta computadora se llam Whirldwind I. Este tamao de memoria se utiliza an hoy en los computadores modernos.
1

Resumen histrico por Tanenbaum Andrew en su libro Organizacin de Computadoras: Un enfoque estructurado. Prentice Hall. Mxico. 2000. 13-24 pags.
1/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II

16/06/06

IBM para entonces era una compaa pequea dedicada a producir tarjetas perforadas y mquinas clasificadoras de tarjetas, hasta que en 1953 produjo la 701 tras lo cual se convertira en la empresa de mayor relevancia en el mercado cientfico.

Figura 1. Mquina de Von Neumann Avances de la poca -Primera mquina en utilizar Bulbos, componentes capaces de producir comportamientos digitales. -Creacin del modelo de von Neumann en la que se describen cinco componentes principales del computador. El modelo de von Neumann defina el primer computador que almacenaba un programa. -Primeras computadoras comerciales de aplicaciones cientficas de la empresa IBM. La segunda generacin - Transistores (1955 - 1965) El transistor fue inventado por los Laboratorios Bell en 1948 por John Bardeen, Walter Brattain y William Schockley a quienes se otorg el premio Nbel de fsica de 1956. Los transistores revolucionaron las computadoras y para finales de la dcada las computadoras de bulbos ya eran obsoletas. La primera computadora de transistores fue construida en el Instituto Tecnolgico de Massachusetts-MIT y se llam TX-0 (computadora Transistorizada eXperimental 0). Kenneth Olsen (que particip en los trabajos de la TX-0) form una compaa denominada DEC (Digital Equipment Corporation) en donde cre la PDP-1 en 1961 con un gran xito de mercado, incluso sobre la IBM 7090 sucesor transistorizado de la IBM 709. En el MIT se crea unos de los primeros juegos de computadoras del mundo para la PDP-1, era un juego de guerras espaciales. Cuatro aos despus DEC introdujo al mercado la PDP-8, este computador tena una innovacin importante: un bus nico (conformado por un conjunto de alambres en paralelo que conectaba a todos los componentes de la computadora), esta arquitectura marc una diferencia importante respecto de la mquina de von Neumann centrada en la memoria; en la actualidad todas las computadoras utilizan esta arquitectura. Ante las iniciativas de DEC, IBM introduce al mercado dos modelos de computadoras transistorizadas, la 7090 (especficamente para uso cientfico) y la IBM 1401 (de uso comercial pero muy verstil). En 1964 una pequea compaa llamada Control Data Corporation (CDC) introdujo al mercado una computadora muy avanzada para la poca denominada 6600, con un alto grado de paralelismo que obtuvo un xito rotundo de inmediato en el rea cientfica. El diseador de esta computadora fue Seymour Cray padre de las supercomputadores. Avances Relevantes de la poca -Invencin del transistor. -La DEC modifica el modelo de Von Neumann creando un bus nico para comunicar a todos los dispositivos entre s (modelo de arquitectura de computadoras orientada a un bus) -Surgimiento de las primeras computadoras con un alto grado de paralelismo, precursoras de las supercomputadores. La tercera generacin - Circuitos integrados (1965-1980) Esta poca inicia en 1958 con la invencin de los circuitos integrados por Jack Kilby. Posteriormente, en 1959, Robert Noyce refina el proceso de integracin haciendo posible su utilizacin, permitiendo colocar en un solo chip docenas de transistores. Esta innovacin hizo posible crear computadoras ms pequeas, rpidas y flexibles reduciendo de forma importante los costos. Cuando lleg la hora para sustituir a sus dos lneas principales la 7090 y la 1401 IBM introdujo la System/360. La System/360 era la primera familia de computadoras con diferentes en tamaos y potencia, pero que eran compatibles entre si (a diferencias de los modelos 7090 y 1401) y posean un lenguaje ensamblador comn. Otro avance importante de esta familia de computadoras fue la multiprogramacin, que consiste en la capacidad de tener varios programas en la memoria en ejecucin a la vez, mientras uno esperaba el trmino de una operacin (p.e. de entrada y salida) otro poda realizar sus operaciones. Entre otras innovaciones estaban la capacidad de emular a sus predecesores (gracias a la microprogramacin), mayor espacio de Elaborado por: Ing. David Fernndez 2/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

direccionamiento de memoria, introdujo los registros orientados hacia palabras de 32 bits y la memoria orientada a bytes. Las computadoras de hoy en da an usan todas estas caractersticas aadiendo, por supuesto, nuevos avances. La DEC introdujo al mercado para este momento la PDP-11 para competir con la serie System/360 de IBM, con arquitectura muy similar, con memoria organizada por bytes y registros orientadas a palabras.

Avances Relevantes de la poca -Invencin del circuito integrado. -Surgen las primeras computadoras multitareas, capaces de ejecutar varios programas de forma secuencial, todos compartiendo la memoria. -Capacidad de emulacin de otras arquitecturas. -Mayor direccionamiento de memoria. -Se orientan los registros a palabras mientras que la memoria principal se ordena por bytes. La cuarta generacin - Integracin a muy grande escala (1980 - actualidad) Para los aos ochenta la VLSI (integracin a muy grande escala, Very Large Scale of Integration) haba hecho posible colocar millones de transistores en un solo chip, dando origen a computadoras pequeas y ms rpidas. En esta poca se populariz la computadora personal, inicialmente se vendieron paquetes con los componentes bsicos para que el usuario construyera el equipo; pero no existan programas comerciales ni sistemas operativos para estas computadoras. En esta poca surgen las primeras computadoras Apple diseadas por Steve Jobs y Steve Wozniak con sistemas operativos y aplicaciones muy amigables. IBM tambin entr a competir en el rea de las computadoras personales con la IBM Personal Computer-PC, construida con componentes comerciales fciles de conseguir para el momento, incluyendo como procesador el 8080 de Intel. Microsoft crea el sistema operativo de la IBM Personal Computer al que denomin MS/DOS y despus dise el Windows. Avances Relevantes de la poca -Se desarrolla la tecnologa VLSI. -Se popularizan las computadoras personales. -Cobra importancia el software, surgimiento de Microsoft.

Tabla 1. Resumen de los eventos relevantes en el desarrollo de las computadoras2


Ao 500AC Nombre baco Elaborado por Babilonia Avances de la poca y comentarios Primera mquina de calculo utilizada ampliamente

La generacin cero - Computadoras mecnicas (1642 - 1945) 1642 Entre 1646 y 1716 Blaise Pascal Gottfried Wilhem von Leibniz Primera mquina que realizaba sumas y restas (19 aos) Crea una mquina que adems multiplicaciones y divisiones de sumas y restas realizaba

1834

Analytical

Engine Babbage

Primer intento de construir un computador Digital que ejecutaba cualquier programa, su entrada era a travs de tarjetas perforadas (precursoras de las tarjetas perforadas ms modernas y del CDROM). Surge la primera programadora del mundo Ada Augusta Lovelace. (Mquina de diferencias) Primera mquina funcional en base a relevadores Crea la aritmtica binaria y establece los principios para memorias basadas en condensadores. Primera computadora Americana de propsito general

1936 1944

Z1 Mark I

Konrad Zuse John Atanasoff Aiken

La primera generacin - Bulbos (1945 - 1955) 1939 a 1945 1943


2

ENIGMA COLOSSU S

Gov. Alemn Gov. Britnico

Mquina de cmputo utilizada para la codificacin de mensajes durante la II Guerra Mundial. Primera Computadora Electrnica.

TANENBAUN Andrew. ORGANIZACIN DE COMPUTADORAS. UN ENFOQUE ESTRUCTURADO. Mxico. Cuarta Edicin. 2000. Pags. 13-24.
3/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II Ao Nombre IAS Elaborado por Von Neumann Avances de la poca y comentarios

16/06/06

Creacin del modelo IAS que define cinco partes bsicas de un computador (Memoria, Unidad de control, UAL y las entradas y salidas); almacenamiento de los programas en la memoria del computador. Primera computadora que almacenaba programas basada en el modelo IAS. Primera Computadora de Tiempo Real. Primer computador comercial.

1949 1951 1953

EDSAC Whirlwind I 701

Wilkes M.I.T IBM

La segunda generacin - Transistores (1955 - 1965) 1948 William Shockley, John Bardeen y Walter Bratain Creacin del transistor. Este grupo estaba conformado por ingenieros de los Laboratorios Bell y para 1956 se les otorg el premio Nobel en fsica.

1960 1961 1962 1963 1964 1965

TX-0 PDP-1 1401 7094 B5000 6600 PDP-8

Lincon Laboratory- Primer computador transistorizado. MIT DEC IBM IBM Burroughs CDC DEC Primera minicomputadora (50 vendidas $120000) . Mquina para pequeos negocios muy popular . Domin el medio cientfico para los principios de 1960. Primera mquina diseada para lenguaje de alto nivel. Primera supercomputadora cientfica. Primera minicomputadora de venta masiva (50,000 vendidas $16000).

La tercera generacin - Circuitos integrados (1965-1980) 1958 1964 1970 360 PDP-11 Jack Kilby (TI) IBM DEC Creacin del circuito integrado. Posteriormente Robert Noyce refina el proceso de integracin haciendo posible el uso de esta tecnologa. Primera familia de computadoras (con soporte para multiprogramacin). Domino el mercado de las minicomputadoras en 1970.

La cuarta generacin - Integracin a muy grande escala (1980 - actualidad) 1974 1974 1978 1981 1985 1987 1990 8080 CRAY-1 VAX IBM PC MIPS SPARC RS6000 Intel Cray DEC IBM MIPS Sun IBM Creacin del VLSI (Integracin a muy gran escala - Very Large Scale of Integration). Primer computador de propsito general de 8 bits en un solo chip. Primer Supercomputador vectorial. Primer superminicomputador de 32-bits . Inicio de la era de la computadora personal. Primera computadora comercial RISC. Primera estacin de trabajo basada en arquitectura RISC (SPARC). Primera computadora superescalar.

Elaborado por: Ing. David Fernndez

4/59

Arquitectura de Computadores: Electrnica Digital II 2. Arquitecturas del Computador y de la Unidad Central de Procesamiento (CPU) 2.1. Conceptos bsicos

16/06/06

a. Computador Digital Es un sistema electrnico de operacin digital compuesto por procesadores, memorias y dispositivos de entrada/salida todos interconectados mediante un bus comn (coleccin de cables en paralelo que transmiten direcciones, datos y seales de control, ver Figura 2), con el propsito de procesar datos segn diferentes tipos de algoritmos. Son sistemas para el procesamiento de datos de propsito general. Entre otras definiciones populares de computadoras se encuentran las siguientes:

Cualquier dispositivo capaz de procesar informacin para producir un resultado deseado. Sin importar cuan grande o pequeas sean, tpicamente las computadoras realizan su trabajo en tres pasos bien definidos: (1) aceptar una entrada, (2) procesar esta entrada de acuerdo a reglas predefinidas (o programas), y (3) producir una salida [http://www.microsoft.com/technet/prodtechnol/visio/visio2002/plan/glossary.mspx, 13/03/2006]. Mquina electrnica, analgica o digital, dotada de una memoria de gran capacidad y de mtodos de tratamiento de la informacin, capaz de resolver problemas matemticos y lgicos mediante la utilizacin automtica de programas informticos [Real Academia de la Lengua Espaola, www.rae.es, 13/03/2006]. Segn IBM un computador es una mquina que usa informacin, llamada entradas, y la procesa mediante un conjunto de instrucciones denominado programa de aplicacin. Dadas las entradas y las instrucciones la computadora produce y devuelve el resultado, a estos resultados se les denomina salida. En una manera la computadora es una calculadora compleja. Sin embargo, un computador es ms que una calculadora, utiliza diferentes programas para realizar distintas tareas. Como resultado, una computadora es un dispositivo de propsito general para el procesa de informacin.

Figura 2. Organizacin de Computadoras orientada a Bus nico b. Arquitectura de los Sistemas de Computadoras La arquitectura de un computador es similar a la arquitectura de edificios y construcciones, son las partes visibles de la estructura que componen a estas construcciones. El estudio de la arquitectura se dedica a estudiar el diseo de los computadores, en especial lo referente a las partes visibles a los programadores y usuarios. Las partes visibles de un sistema de computadora son los dispositivos de Entrada y Salida, la Memoria, el CPU (instrucciones y tipos de datos) y los Canales Buses(ver Figura 3). Otro concepto de importancia, que suele confundirse con el de Arquitectura, es el de Organizacin de Computadores. La Organizacin consiste en la manera como se planifican, ordenan, relacionan e implementa a nivel fsico el CPU, y los dems componentes antes referidos, para lograr cumplir con la funcionalidad definida por la arquitectura. Los sistemas modernos de computadora presentan una arquitectura orientada a buses (en adelante y a lo largo de este material, se usar la palabra canal indistintamente por buses), esto es, el microprocesador se comunica con el resto de los componentes del sistema mediante el uso de buses. Los buses pueden definirse como conjuntos de conexiones paralelas entre los diferentes componentes que conforman el computador. Son las carreteras que comunican a todos

Elaborado por: Ing. David Fernndez

5/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

los elementos de un computador entre s. Los buses son los mecanismos de comunicacin entre los componentes de un computador. Los principales buses que contienen los computadores son: El bus o canal de direcciones: que permite al microprocesador especificar direcciones de memoria o del espacio de entrada/salida, para la lectura o escritura de la informacin. El bus o canal de datos: transfiere datos entre el microprocesador, la memoria y/o los dispositivos de entrada/salida. El bus o canal de control: suministra las seales de control requeridas para coordinar la comunicacin entre el microprocesador y el resto del sistema (e.g. coordinacin de las operaciones de escritura/lectura entre el microprocesador y la memoria o los dispositivos de E/S).

Computador
Unidad Central de Procesamiento Memoria Principal

Sistemade Interconexin Buses Entrada / Salida

Figura 3. Componentes Bsicos de un Microprocesador Es importante destacar que el ancho de los canales depende de la arquitectura del microprocesador que se est utilizando, pudiendo cambiar este tamao de un procesador a otro. Adicionalmente, debe observarse que el ancho del canal de datos influye en la cantidad de datos que pueden transferirse entre la memoria y el microprocesador, mientras que el canal de direcciones determina la cantidad de memoria que puede ser direccionada por el microprocesador. Estos conceptos sern estudiados con ms profundidad en las secciones venideras. Estas son nociones simples de como fueron los primeros buses de computadoras; actualmente, estas tecnologas ha sufridos grandes cambios para adaptarse a las exigencias de comunicacin de los diferentes dispositivos en un sistema de computacin. De manera que hoy en da se habla de que existe ms de un conjunto de bus. En los microprocesadores Intel se poseen dos grupos de buses, uno frontal para la memoria y los dispositivos que transfieren ms datos (como las tarjetas de video AGP y el bus PCI) y otro para los dispositivos de entrada y salida (E/S) ms lentos. Al bus de la memoria se le denomina NorthBridge y al bus de los dispositivos de E/S se le denomina SouthBridge. El bus SouthBridge est conectado al sistema a travs del bus PCI. En el bus PCI normalmente se conectan dispositivos como las tarjetas de sonido, los puertos paralelos, seriales y usb, los discos duros, etc. En la Figura 4 se observa una diagrama esquemtico de como se dividan los buses para un procesador Celeron Mobile en Northbridge y Southridge. Las arquitecturas ms nuevas implementan buses independientes para cada dispositivo, as como lo planteaba el modelo de Von Neumann. En estos nuevos buses se implementan en dos controladores, uno de alta velocidad y otro de baja velocidad. Al controlador de alta velocidad se conecta la memoria y la tarjeta de video; este posee conexin directa al CPU. El controlador de baja velocidad se conecta al resto de los dispositivos de E/S (puertos usb, seriales, paralelos y PCI, tarjetas de sonido, etc.) y se conecta al CPU a travs del controlador de alta velocidad por un enlace especial de alta velocidad (ver Figura 5).

Elaborado por: Ing. David Fernndez

6/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Figura 4. Esquema de los buses Northbridge y Southbridge para un microprocesador Celeron

Mobile

Figura 5. Esquema de buses mediante controladores en microprocesadores Intel c. Arquitectura de los CPU (Unidad de Procesador Central por sus siglas en ingls Central Processing Unit) Las CPU son los microprocesadores que controlan todos los sistemas de computo modernos; representan el cerebro de estos sistemas y su funcin bsica es la de ejecutar los programas almacenados en la memoria principal coordinando todas las actividades del sistema de computacin. Los pasos bsicos seguidos por las CPU para la ejecucin de un programa son: Buscar las instrucciones en la memoria a travs de direcciones predefinidas Elaborado por: Ing. David Fernndez 7/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Examinar y preprocesar estas instrucciones Ejecutar una instruccin tras otra

La CPU se compone de cuatro partes fundamentales, la unidad de control, la unidad aritmtica lgica, los registros y el bus de conexin como se observa en la Figura 6. En la actualidad los microprocesadores poseen muchos ms componentes que permiten realizar las mismas funciones con mayor rapidez y un alto grado de paralelismo que las realizadas por los cuatro elementos antes mencionados del modelo simplificado de un CPU. Un concepto alterno de microprocesadores ms formal y enfocado hacia el hardware es: un circuito integrado compuesto de miles o millones de transistores capaces de manipular datos en diversas formas. La manipulacin que se hace sobre los datos es determinada mediante los programas software (conjunto de instrucciones ordenadas segn un algoritmo) que ejecuta el computador 3. Funciones principales de los componentes principales de la CPU: La unidad de control: que se encarga de buscar las instrucciones en la memoria principal y determinar su tipo. La unidad aritmtica lgica: que como bien lo indica su nombre, est a cargo de todas las operaciones aritmticas y lgicas necesarias en la ejecucin de ciertas instrucciones. Los registros: son memorias pequeas y de alta velocidad que sirven para almacenar resultados de las operaciones realizadas por las diferentes unidades de procesamiento de los CPU. El bus es el componente interno de la CPU encargado de transmitir los datos, direcciones y seales de control, entre las diferentes unidades del CPU.

CPU
Registros Unidad Aritmtica Lgica Conexin Interna del CPU

Unidad de Control

Figura 6. Componentes de un Computador Personal 2.2. Enfoque estructurado de Organizacin de Computadores (lectura complementaria) A pesar de que este trabajo no se dedica al estudio de la organizacin de computadores, es importante conocer algunos de los conceptos bsicos que rigen esta materia. En este sentido, se presenta a continuacin el enfoque de organizacin de computadoras que planteado en [1] . El problema de diseo de las computadoras radica en que se desea facilidad para su programacin, manteniendo equipo que sea razonablemente simple de construir para hacerlo factible econmicamente. Estos dos criterios construccin colidan en cuanto a que hacer un sistema simple de programar requiere gran complejidad para construccin; mientras que hacer un sistema muy simple en cuanto a su construccin resulta en un equipo difcil programar. un de su de

Las soluciones que han sido presentadas ante esta problemtica radican en la construccin de una mquina simple y difcil de programar en una primer nivel (nivel 0). Esta mquina usara un lenguaje muy simple (digital-difcil de programar), por lo cual se construye un segundo nivel (nivel 1), sobre el primero, que permita interpretar instrucciones ms complejas y traducirlas a las instrucciones del nivel inferior para su ejecucin. En teora se podran realizar microprocesadores de n-niveles pero quizs esto resultara imprctico. Los sistemas modernos poseen normalmente 6 niveles como se muestra en la Figura 7. Cada nivel define un conjunto de instrucciones/datos que puede ejecutar. Toda la ejecucin real se produce en el nivel 0; debido a esto, cada nivel ha de traducir sus instrucciones para que estas puedan ser ejecutadas por el nivel inferior hasta llegar al nivel 0 en donde se ejecutar finalmente el programa. A los niveles, en este tipo de organizacin, se les denomina mquinas virtuales, debido a que (si se hace abstraccin
3

http://www.intel.com/intel/intelis/museum/exhibit/hist_micro/hof/whatis.htm. 2003.
8/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II

16/06/06

respecto de los dems niveles) cada uno de estos define conjuntos de instrucciones que sabe ejecutar. Cada nivel representa una arquitectura de computador.

Figura 7. Computador de seis capas

El nivel 0 (lgica digital) es el nivel de compuertas que permite realizar operaciones lgicas mediante diferentes combinaciones. Al combinar estas compuertas se pueden crear pequeas memorias para almacenar un bit, y al combinar estas memorias se pueden crear registros que almacenen conjuntos de bits. Los registros que se crean de tamaos comunes como 8, 16, 32, 64 128 bits. En este nivel, cada registro puede contener un dato binario que puede operarse con la lgica digital, pudiendo sumar valores, restarlos, multiplicarlos y dividirlos, entre otras operaciones. El nivel 1 (microarquitectura) combina un conjunto de registros (entre 8 a 32 tpicamente) para formar una memoria local con una Unidad Aritmtica Lgica (ALU) que puede realizar operaciones sobre estos datos. Se definen trayectorias entre los registros y la ALU para que se puedan realizar operaciones (comnmente entre dos registros) y su resultado se almacene en uno de los registro. En las computadoras antiguas se sola usar un microprograma para controlar la trayectoria entre la ALU y los registros, pero en la mayora de los computadores modernos se implementa este programa en hardware y a esto se le denomina microcdigo. Las mquinas que poseen microporgramas ejecutan los programas del nivel 2 interpretndolo lnea a lnea. La interpretacin consiste en obtener una instruccin, examinarla y ejecutarla. Las computadoras con microcdigo hacen lo mismo pero la interpretacin la realiza directamente el hardware. Nivel 2, describe propiamente las instrucciones que es capaz de ejecutar un computador a nivel de microprograma. Al conjunto de instrucciones de este nivel y a los datos que es capaz de manejar se le denomina nivel de Arquitectura de Conjunto de Instrucciones o nivel ISA. Los manuales de programacin de microprocesadores que elaboran los fabricantes explican las instrucciones de este nivel. El nivel 3 es normalmente un nivel hbrido. Maneja las instrucciones del nivel 2 e introduce nuevas instrucciones, un modelo para el manejo de memoria, archivos y recursos del computador, mecanismos para ejecutar programas simultneamente y otras caractersticas. Este es el nivel en el que se encuentran los sistemas operativos (MSDos, Windows, UNIX, Linux, OS/2, Solaris, etc.). Las nuevas instrucciones y caractersticas introducidas en este nivel son ejecutadas por el nivel inferior al ser traducidas por el sistema operativo que resulta ser un intrprete de la arquitectura definida por este nivel.

Elaborado por: Ing. David Fernndez

9/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Los prximos niveles son los diseados para los usuarios, mientras que los niveles inferiores fueron diseados para facilitar la interaccin del usuario con el computador. Los programas de los niveles inferiores, en especial del nivel tres, son diseados por programadores de sistemas mientras que los programas del nivel 4 y 5 son diseados por programadores de aplicaciones y a veces hasta por el usuario comn. El nivel 4 se denomina ensamblador y define un lenguaje alfanumrico ms fcil de comprender por los seres humanos que el lenguaje binario manejado por los niveles inferiores. Para ejecutar el lenguaje ensamblador hay que primero traducirlo a binario y posteriormente cada nivel subyacente se encargar de ejecutarlo como describi en cada nivel (principalmente a travs de la interpretacin del programa en cada nivel). Por ltimo, el nivel 5 es el nivel en el que nos desempeamos los usuarios comunes para resolver problemas mediante aplicaciones. En este nivel existe una ingente cantidad de lenguajes de programacin de alto nivel que se traducen a los niveles inferiores para ser ejecutados mediante programas denominados compiladores. Algunos de estos lenguajes son interpretados, como es el caso del Basic, Matlab y el Java entre otros.

Elaborado por: Ing. David Fernndez

10/59

Arquitectura de Computadores: Electrnica Digital II 3. Evolucin de los microprocesadores Intel4 3.1. El microprocesador de 4 bits

16/06/06

Fu creado en 1971, ste era capaz de direccionar 4096 localidades de memoria de 4 bits y con solo 45 instrucciones tena una funcionalidad limitada. Nota histrica: este microprocesador surge como una solucin a un problema de diseo que plante una compaa japonesa llamada Busicom en 1969 para la creacin de una mquina calculadora basada en chips. El ingeniero a cargo de este proyecto en Intel, Ted Hoff al examinar las exigencias se percat de que era posible utilizar en lugar de un conjunto de chips un microprocesador de 4 bits de propsito general que hara el mismo trabajo que l conjunto de chips propuesto por Busicom. Estos eventos dieron origen al primer microprocesador del mundo. Avances -Primer microprocesador Intel y del mundo -45 instrucciones 3.2. El microprocesador de 8 bits Creado a principios de 1972 Intel produjo el 8008 que fue el primer microprocesador de 8 bits (8 bits = 1 byte) con una memoria de 16 K (1 K equivale a 1024 direcciones) de 8 bits con un total de 48 instrucciones. Posteriormente, en 1973 Intel introdujo al mercado el 8080, que era 10 veces ms veloz que el 8008 (una suma se realizaba en 2 microsegundos en el 8080 en lugar de los 20 microsegundos de su predecesor), era capaz de direccionar ms memoria y adems era compatible con la tecnologa TTL, lo que permiti interconectarse directamente a dispositivos digitales TTL (TransistorTransistor Logic). En 1977 Intel crea el 8085 ligeramente ms rpido que el 8080 pero con algunas ventajas adicionales, incorporaba un generador de reloj y el controlador del sistema, dispositivos que eran externos en el 8080 . Avances -Primer microprocesador de 8bits. -Incremento en las capacidades de manejo de memoria. -Compatibilidad con la tecnologa TTL. -Mejoras en las velocidades de reloj. -Incorpora el generador de reloj y un controlador del sistema en el CPU. 3.3. El microprocesador de 16-bits En 1978 Intel lanza al mercado su primer procesador de 16 bits denominado 8086 y casi un aos ms tarde introduce al mercado otra versin ms econmica denominado 8088. Ambos dispositivos son de 16-bits y ejecutan instrucciones a casi 400 ns (2,5 millones de instrucciones por segundo) con relojes entre 5 y 10 MHz. Poseen una capacidad para direccionar una memoria de 1MB (igual a 1000 Kbytes -KB-, 1 KB = 1024 bytes -B- y 1 B = 8 bits -b-) lo que es lo mismo que 512 KB palabras (una palabra tiene 16 bits). Esta evolucin fue impulsada por la necesidad de direccionar ms memoria (de los 64 KB de memoria) a los cuales poda acceder el 8080 y por las necesidades de incorporar capacidades de multiplicacin y divisin. Con el 8086 se introduce el manejo de la memoria por medio de segmentos, a esto se le llam segmentacin de memoria. Estos microprocesadores utilizan un registro de 16 bits capaz de acceder a un segmento de memoria de 64 KB. Intel contino utilizando la arquitectura de 16 bits en dos procesadores adicionales el 80186 y el 80286. Ambos fueron muy populares an cuando el 80186 fue utilizado mayoritariamente en aplicaciones de control o como controlador de dispositivos en las tarjetas madres o tarjetas de propsito especfico. El 80286 representaba una mejora real sobre la arquitectura de 16 bits preexistente, posea capacidad para direccionar una mayor cantidad de memoria 16 MB (mediante 24 bits en el bus de direcciones) en lugar de 1 MB y la velocidad haba alcanzado los 16 MHz. Adicionalmente, incluy un nuevo modo de operacin, el modo protegido introdujo mejor seguridad y proteccin del sistema de memoria, y el manejo de memoria virtual para el intercambio de segmentos de memoria. Avances -Arquitecturas de 16 bits. -Incrementos en las velocidades de reloj y en las capacidades de memoria. -Introduccin del manejo segmentado de memoria con segmentos de 64 KB. -Introduccin del Modo Protegido como nuevo modo de operacin de las CPU de la familia Intel. - Memoria virtual. 3.4. El microprocesador de 32-bits Los primeros procesadores de 32 bits que produjo Intel fueron el 80386 y el 80486. El 80386 fue el primero en salir al
4

http://www.intel.com/pressroom/kits/quickref.htm. 2003.
11/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II

16/06/06

mercado con una velocidad de reloj de 33 MHz y una capacidad de direccionamiento de memoria de 4 GB, el 80486 lo sigui poco tiempo despus. Estos procesadores posean registros de 32 bits tanto para el manejo de operandos as como para el de direcciones, adems de ofrecer la capacidad para ser manejados como registros de 16 bits, ofreciendo de esta manera compatibilidad con las arquitecturas anteriores. En el 80386 se introdujo la paginacin como una herramienta adicional para la administracin de memoria en el modelo de memoria segmentada y es el primer microprocesador en incorporar etapas paralelas en procesamiento (lo que se conoce como paralelismo). En el 80386 se incluyen 6 etapas de paralelismo compuestas por unidades de procesamiento especfico, a continuacin se nombran estas unidades: Unidad de interfaz del bus: que permita el acceso a la memoria y a los dispositivos de E/S por parte de las dems unidades del CPU. Unidad de prebsqueda de instrucciones: permita recibir cdigo objeto de la unidad del bus y colocarlo en una cola de 16 bytes. Unidad de decodificacin de instrucciones: decodifica el cdigo de la cola de la unida de prebsqueda y lo convierte en microcdigo. Unidad de ejecucin: ejecuta instrucciones de microcdigo. Unidad de segmentacin: traduce direcciones lgicas a direcciones lineales y realiza verificaciones de proteccin. Unidad de paginacin: realiza la conversin de direcciones lineales a fsicas, realiza verificaciones de proteccin de paginacin y mantiene un cach con las pginas ms recientes usadas. Este procesador incluy tambin un nuevo modo de funcionamiento denominado modo virtual-8086, cuyo propsito era el de mejorar la eficiencia en el procesamiento de aplicaciones desarrolladas para los microprocesadores 8086 y 8088. Estos microprocesadores son capaces de trabajar tanto con el modelo de memoria segmentado como el modelo de memoria plano (en el cual todos los segmentos se solapan y tienen acceso a los 4GB completos de memoria). El 80486 tena el doble de la velocidad de reloj (66 MHz) que su predecesor y exista una versin que adicionalmente incorpora un coprocesador aritmtico (versin 80486DX) y una memoria cach de 8 KB en el chip. En el 80486 se aaden ms etapas paralelas; se dividen las unidades de decodificacin y ejecucin en cinco lneas de ejecucin independientes que reciben el nombre de Pipeline (este alto grado de paralelismo permiti procesar hasta 5 instrucciones a la vez). La tecnologa de procesamiento paralelo permiti que estos procesadores ejecutaran una instruccin por ciclo de reloj. Finalmente, se aade un cach nivel 1 al microprocesador, se integra la unidad de punto flotante al chip del CPU y se aaden caractersticas de ahorro energtico al microprocesador. El siguiente procesador fue el Pentium que apareci con dos lneas de ejecucin (dos Pipelines, convirtindose en la primera arquitectura superescalar de Intel). Incluy adems un sistema de prediccin de ramificaciones de algoritmos y un controlador avanzado de control de interrupciones (Advanced Programable Interrupt Controller-APIC) para permitir la conexin de mltiples procesadores Pentium. Esta arquitectura permiti la ejecucin de hasta dos instrucciones en un ciclo de reloj. El cach se almacen dentro del chip y se duplic su tamao, dedicando 8 KB a datos y los 8KB restantes a cdigo. Este microprocesador mejora la compatibilidad del modo virtual-8086 y expande el tamao de los caminos de datos internos de microprocesador a 128 bits y 256 bits. El bus de datos externo incrementa de 32 bits a 64 bits.

Elaborado por: Ing. David Fernndez

12/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Figura 8. Diagrama de bloques del Pentium


El ltimo procesador introducido en la familia Pentium fue el Pentium MMX. Este inclua la tecnologa MMX que usaba las instrucciones SIMD (single-instruction, multiple-data) para el procesamiento en paralelo de enteros empaquetados contenidos en registros MMX de 64 bits. La tecnologa MMX permiti mejorar grandemente el rendimiento de estos procesadores en la ejecucin de aplicaciones multimedia, procesamiento de imgenes y en aplicaciones de compresin de datos. Avances -Arquitectura de 32bits. -386: Introduccin del Modo Virtual-8086. -386: Introduccin de la paginacin como metodologa para el manejo de la memoria segmentada. -386: incorpora 6 etapas de paralelismo. -486: divide en cinco lneas de ejecucin en paralelo a las unidades de decodificacin y ejecucin, esto recibe el nombre de Pipeline y permiti ejecutar una instruccin por ciclo de reloj. -486: incluye coprocesador matemtico y memoria cach. -Pentium: introduce un segundo Pipeline incrementando el paralelismo, a estas configuraciones se les llama arquitectura superescalar, logrando ejecutar hasta dos instrucciones por ciclo de reloj. -Pentium: incluye un nuevo sistemas de prediccin de ramas de algoritmos. -Pentium MMX: introduce instrucciones SIMD para la tecnologa MMX. 3.5. Familia de procesadores P6: se basan en una nueva micro-arquitectura superescalar que ofrece mejor rendimiento que las arquitecturas anteriores con la misma tecnologa de fabricacin de 0.6 micrmetros de 4 capas de metal BICMOS. El microprocesador Pentium Pro fue el primero en el que se implement esta tecnologa, seguido del Intel Pentium II, Pentium II Xeon, Celeron, Pentium III y Pentium III Xeon. El Pentium Pro posea una arquitectura superescalar con tres lneas de procesamiento (tres Pipelines de 12 etapas

Elaborado por: Ing. David Fernndez

13/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

cada una) lo que le permiti ejecutar hasta tres instrucciones por ciclo de reloj. En este procesador tambin se introdujo el concepto de ejecucin dinmica y se le aadi un segundo cach denominado cach de nivel 2 con un tamao de 256 KB. Por ltimo, incluy un bus de direcciones de 36 bits lo que le permiti acceder a un total de 64GB de memoria. La ejecucin dinmica consiste en la capacidad de predecir las ramificaciones del programa que sern ejecutadas (deep branch prediction), hacer seguimiento de la trayectoria de datos dentro del CPU para aprovechar las oportunidades de ejecucin de instrucciones fuera de orden (manteniendo a las unidades del CPU ocupadas la mayor parte del tiempo - dynamic data flow analisys y out of order execution); y finalmente, adelantar la ejecucin de instrucciones posteriores a las ramificaciones con datos independientes de las ramificaciones (speculative execution) para mantener ocupadas las unidades del CPU y luego retirar los resultados de forma ordenada. El Pipeline de la arquitectura P6 se dividi en cuatro (4) secciones una cache de nivel 1 (Level 1) y otro de nivel 2 (Level 2), una seccin denominada front end, un ncleo de ejecucin fuera de orden y una seccin para el retiro de instrucciones.

Figura 9. Microarquitectura del P6


3.6. Microarquitectura NetBurst La siguiente arquitectura construida por Intel crea para el desarrollo de sus nuevos procesadores Xeon y Pentium 4 es conocida como NetBurst. Bsicamente, la arquitectura NetBurst mejora las caractersticas de velocidad de la arquitectura P6 en casi todos los niveles (tanto en las unidades de ejecucin, como en las unidades Aritmtica-lgicas), incrementa el paralelismo de los pipelines a 20 etapas por pipeline. Tambin se mejoran las caractersticas de ejecucin dinmica, aade las instrucciones SSE2, SSE3 y aade una cach nivel 3 (Level 3). 3.7. Hyperthreading y Dual-Core La tecnologa Hyperthreading fu desarrollada para mejorar el rendimiento de la arquitectura IA32 al ejecutar en sistemas operativos multi-hilos y en la ejecucin de aplicaciones de un hilo pero que se ejecutan en entornos multitareas. El Hyperthreading permite ejecutar dos o ms hilos de cdigos separados en un mismo procesador al mismo tiempo. Los microprocesadores con esta tecnologa estn dotados de dos procesadores lgicos internos cada uno con entornos de ejecucin separados (a esto se le denomina estado de la arquitectura Architectural State, AS por sus siglas en ingls, ver Figura 10).

Elaborado por: Ing. David Fernndez

14/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Figura 10. Comparacin entre un procesador IA-32 con tecnologa Hyperthreading y un sistema con dos procesadores
Esta tecnologa bsicamente duplica los registros de datos, segmento, control, depuracin y la mayora de los registros MSR, adems de proveer un controlador de interrupcin por cada procesador lgico. Sin embargo, se comparten las unidades de ejecucin y la interfaz con el bus. Despus de reiniciar estos microprocesadores cada procesador lgico puede iniciar, detener y controlar la ejecucin de hilos diferentes sin afectar el funcionamiento del otro procesador lgico. La tecnologa Dual Core representa otra manera de mejorar las capacidad de ejecucin de mltiples hilos a nivel de hardware. Esta tecnologa provee dos ncleos de ejecucin completos dentro de un mismo empaque fsico. Las primera implementaciones del Dual Core son los procesadores Pentium D, existe otra familia de procesadores de la arquitectura IA-32 denominados Pentium processor Extreme Edition que incorporan las tecnologas Hyperthreading y Dual Core ofreciendo un rendimiento efectivo cercano al de cuatro procesadores (ver Figura 11).

Figura 11. Procesadores IA-32 con soporte Dual Core


En la se presenta un resumen de la evolucin de los microprocesadores Intel. Es de especial inters observar como los cambios en las arquitecturas producen cambios en los registros y en la capacidad de memoria manejada; tambin es de inters observar las innovaciones tecnolgicas, el incremento de las velocidades de reloj y el aumento en el nmero de transistores utilizados.

Elaborado por: Ing. David Fernndez

15/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Tabla 2. Resumen de la evolucin de los microprocesadores intel [2]


Caractersticas Espacio Velocidad (Tamao Registros/ Tecnologa de Fecha de Nmero de Mximo de de Reloj Bus Datos / Integracin Introduccin Transistores Memoria Cachs) Microprocesadores de 4 bits 108 KHz 4 bits PG5/4 bits/no 640 Bytes 10 micrones 15/11/1971 2300 - 45 instrucciones. - 4096 direcciones de memoria direccionable de 4 bits. Microprocesadores de 8 bits 200 KHz 8 bits PG/8 bits/no 16 KB 10 micrones 4/1972 3500 2 MHz 8 bits PG/8 bits/no 64 KB 6 micrones 4/1974 6000 - 10 veces ms rpido que el 8008. - 48 instrucciones. - Compatible con la tecnologa TTL (Seguido del 8085 que posee un generador de reloj y un controlador del sistema). 2 MHz 8 bits PG/8 bits/no 64 KB 3 micrones 3/1976 6500 Microprocesadores de 16 bits 10 MHz 16 bits PG/16 bits/no 1 MB 3 micrones 8/6/1978 8 MHz 16 bits PG/8 bits/no 6/1979 5 MHz 29000 - Se aaden instrucciones de multiplicacin y divisin (2.5 MIP). - Sistema de memoria Segmentado. 12 MHz 16 bits PG/16 bits/no 1 MB 3 micrones 1982 --10 MHz 12 MHz 16 bits PG/16 bits/no 16 MB 1.5 micrones 2/1982 134000 10 MHz 6 MHz - Memoria virtual. - Modo protegido. - 8 MIP (Millones de Instrucciones Por segundo). Microprocesadores de 32 bits 33 MHz 32 bits PG/32 bits/no 4 GB 1.5 / 1 micrones 17/10/1985 275000 25 MHz 20 MHz 16 MHz - Modo virtual-8086. - Paginacin. - Primer micro de Intel en tener etapas de ejecucin en paralelo (6 etapas). - Registro de 32 bits compatibles con los de 16 bits anteriores. 33 MHz 32 bits PG/32 bits/no 4 GB 1.5 / 1 micrones 16/6/1988 275000 25 MHz 20 MHz 16 MHz 25 MHz 32 bits PG/16 bits/no 4 GB 1 micrn 15/10/1990 855000 20 MHz 100 MHz 32 bits PG/32 bits/ 4 GB 0.8 / 1 micrones 10/4/1989 1200000 hasta 8 KB 50 MHz 33 MHz 25 MHz Incluye coprocesador matemtico x87 FPU. Modo de manejo de sistema. Soporte de cach para mltiples procesadores. 54 MIP con memoria cach L1, que ejecuta hasta una instruccin por ciclo de reloj (1 Pipeline). Trabaja con el modelo de memoria plana y segmentada . 25 MHz 32 bits PG/32 bits/no 4 GB 1 micrn 15/10/1990 20 MHz Procesadores para las porttiles (Notebook). 33 MHz 32 bits PG/32 bits/no 4 GB 0.8 / 1 micrones 16/9/1991

4004

8008 8080

8085 8086 8088

80186 80286

80386 DX

80386 SX

80386 SL 80486 DX

80486 SL 80486 SX
5

855000 1185000 /

PG: registros de propsito general.


16/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II 25 MHz 20 MHz 16 MHz - No posee la unidad de punto flotante 66 MHz 32 bits PG/ 64 GB 60 MHz 64 bits/16 KB

16/06/06 900000

Pentium

0.8 / 0.6 / 0.35 micrones

22/3/1993

3100000 / 3300000 /

Pentium Pro

Pentium II

Celeron

4500000 - Dos pipelines de ejecucin (primera arquitectura superescalar) y 100 MIP. - Unidad de prediccin de ramas (especialmente til en programas cclicos). - Los ltimos procesadores Pentium producidos introdujeron la arquitectura MMX especial para procesamiento de diferentes medios, imgenes y compresin de datos con las instrucciones SIMD (Single Instruction Multiple Data -Instrucciones sencillas con mltiples datos ). - Direccionamiento expandido de 64 GB. 200 MHz 32 bits PG / 64 bits / 64 GB 0.6 / 0.35 1/11/1995 5500000 / 180 MHz L1:8 KB y L2:256 KB micrones 15500000 166 MHz 512 KB 1 MB 150 MHz - Tres pipelines de ejecucin (hasta tres instrucciones mximas por ciclo de reloj). - Introduccin de la arquitectura P6. - Ejecucin dinmica que introduce cinco unidades de ejecucin. - No posee soporte MMX pero aade una memoria cach L2. 450 Mhz 32 bits PG / 64 bits / 64 GB 0.35 / 0.25 7/5/1997 7500000 Hasta L1:32 KB y L2:256 KB micrones 300 MHz 512 KB 1 MB 266 MHz 233 MHz - Introduce soporte MMX en la arquitectura P6. - El cach L2 se conecta a la mitad de la frecuencia del reloj. - Empaquetamiento del chip en formato SECC (single edge contact cartrige Cartucho de contactos de un slo lado). 2.20 GHz 32 bits PG / 64 bits / 4 GB 0.25 / 0.18 / 0.13 15/4/1998 7500000 / L1:32 KB y L2:128 KB micrones hasta 19000000

300 MHz 266 MHz - Empaquetamiento en formato PPGA (Plastic Pin Grid Array Arreglo de Rejilla de Espigas Plsticas) y SECC. Pentium II Xeon 450 MHz 32 bits PG / 64 bits / 64 GB 0.25 micrones 29/6/1998 7500000 L1:8 KB y L2:256 KB 400 MHz 512 KB 1 MB 2 MB - Aade Caches L2 ms grandes a la velocidad del reloj del sistema. - Empaquetamiento en formato SECC. Pentium III 900 MHz 32bits PG / 64 bits / 64 GB 0.25 / 0.18 17/3/1999 9500000 / Xeon L1:8 KB y L2:512 KB micrones hasta 28000000 1 MB 2 MB 550 MHz 500 MHz - Incluye una Cach de transferencia avanzada a la velocidad de reloj. - Empaquetamiento en formato PPGA y SECC. Pentium III 1 GHz 32 bits PG / 64 bits / 64 GB 0.25 / 0.18 26/2/1999 9500000 / L1:8 KB y L2:512 KB micrones 600 MHz 25000000 550 MHz 500 MHz 450 MHz - Empaquetamiento en formato PPGA y SECC. - Aade las Streaming SIMD Extensions (SSE) a la tecnologa MMX preexistente y registros de 128 bits, adems de la habilidad para operar sobre nmeros punto flotante de precisin sencilla. Pentium 4 2 GHz 32 bits PG / - / L1:8 64 GB 0.18 / 0.13 20/11/2000 42000000 / 1.90 GHz KB y L2:256 KB micrones 55000000 1.80 GHz 1.70 GHz 1.60 GHz 1.50 GHz 1.40 GHz Elaborado por: Ing. David Fernndez 17/59

Arquitectura de Computadores: Electrnica Digital II - Incluye la arquitectura NetBurst (Mayor arquitectura superescalar, instrucciones SSE3, bus interno de 400MHZ). - Empaquetamiento PGA423. - En las ltimas versiones (del 2003 en adelante) se incluye la nueva arquitectura con HiperThreading. - A partir de mediados del 2005 se incluye una nueva tecnologa denomina Dual Core que incorpora dos procesadores dentro de un mismo encapsulamiento y se tiene planificado liberar en un futuro cercano una tecnologa dual core con hyperthreading.

16/06/06

2 GHz 32 bits PG / - / L1:8 64 GB 0.18 / 0.13 21/5/2001 42000000 1.70 GHz KB y L2:512 KB micrones 1.50 GHz L2:256 KB y L3:1 MB 1.40 GHz - Habilitado para integracin rpida en sistemas con mltiples procesadores. - En las versiones MP se incluye la nueva arquitectura con HyperThreading y prximamente Dual Core. Microprocesadores de 64 bits Intel Itanium 800 MHz 64 bits PG / - / L3:2 0.18 micrones -/5/2001 25000000 733 MHz MB 4 MB Intel Itanium 2 1 GHz -/-/0.18 micrones 8/7/2002 220000000 900 MHz

Intel Xeon

Elaborado por: Ing. David Fernndez

18/59

Arquitectura de Computadores: Electrnica Digital II 3.8. Ley de Moore6 (1965)

16/06/06

La Ley de Moore fue una observacin hecha por uno de los ingenieros fundadores de Intel, en la que se establece que la cantidad de transistores en los circuitos integrados se duplica cada 18 meses. Sorprendentemente, an hoy esta ley sigue mantenindose vigente como puede apreciarse en la Figura 12 y en la .

Figura 12. Relacin de tamaos de los CPU Intel del 4004 al Pentium II7

Tabla 3. Incremento en el nmero de transistores en los microprocesadores intel


Procesador 4004 8008 8080 8086 286 386 processor 486 DX processor Pentium processor Pentium II processor Pentium III processor Pentium 4 processor Ao de Introduccin al Mercado 1971 1972 1974 1978 1982 1985 1989 1993 1997 1999 2000 Transistores 2,250 2,500 5,000 29,000 120,000 275,000 1,180,000 3,100,000 7,500,000 24,000,000 42,000,000

6 7

http://www.intel.com/research/silicon/mooreslaw.htm. http://www.intel.com/intel/intelis/museum/exhibit/hist_micro/hof/tspecs.htm. 2003.


19/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II 4. Arquitectura bsica de los microprocesadores Intel

16/06/06

Una vez culminado con el resumen histrico de los microprocesadores Intel se posee una idea general de las caractersticas de los mismo y como evolucionaron, esto permitir ahora continuar con la descripcin de la arquitectura de los mismos. El estudio de la arquitectura de estos microprocesadores requiere la comprensin de las interfaces fsicas de los mismos, los tipos de datos que estos manejan y las instrucciones que poseen. El manejo adecuado de estos equipos slo puede alcanzarse mediante el conocimiento de su funcionamiento interno, en tal sentido el material presentado a continuacin pretende primero hacer una descripcin general de la arquitectura de los microprocesadores Intel para posteriormente estudiar de forma ms detallada sus interfaces de software y de hardware. 4.1. Arquitectura Interna del CPU Los microprocesadores modernos funcionan de forma similar a los de generaciones anteriores, buscan instrucciones de la memoria principal y operan sobre datos obtenidos de dicha memoria para generar resultados a ser almacenados en la misma memoria o ser desplegados al usuario; sin embargo, los procesadores actuales contienen internamente un gran nmero de procesadores de propsito especfico, lo que permiten al microprocesador realizar cierto nmero de operaciones de forma simultnea, en diversas etapas de la ejecucin. Esta capacidad recibe el nombre de paralelismo. Los microprocesadores ms antiguos tenan una sola unidad que controlaba la interfase del canal y que efectuaba todas las operaciones. Hasta el 8085 no exista el paralelismo propiamente dicho en los microprocesadores Intel, este procesador buscaba las instrucciones de memoria (mediante operaciones de lectura) y mientras las decodificaba y ejecutaba el sistema de memoria y los canales se mantenan ociosos. A partir de 8086 y el 8088 se aprovecha este tiempo ocioso de la memoria y el canal, buscando de forma anticipada la siguiente instruccin de memoria, mientras la actual se ejecutaba, de manera que el canal de transferencia de datos se encontraba la mayor parte del tiempo ocupado. A medida que evolucionaron las computadoras comenzaron a aparecer varias unidades internas, todas destinadas a trabajar en paralelo. Estas nuevas caractersticas permitieron realizar varias operaciones simultneas. Entre las unidades ms importantes para el 80496 Intel estn(ver Figura 13):

Figura 13. Diagrama de bloques del 80486

Unidad de interfase del Canal BIU, que tiene la funcin de leer instrucciones de la memoria y de leer o escribir datos entre el microprocesador y la memoria.

Elaborado por: Ing. David Fernndez

20/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

La memoria cach conectada a la BIU, en donde se almacenan las instrucciones y los datos que se estima probable a ser utilizados. El pre-recuperador, est conectado a la salida del cach y puede contener hasta 3 instrucciones de 1 byte sin ejecutar. Unidad decodificadora de instrucciones, se ubica a la salida del pre-recuperador y su labor es identificar las instrucciones enviarlas a la unidad de control-prueba y proteccin. Unidad de control-prueba y proteccin, prueba y controla las instrucciones decodificadas por la unidad decodificadora. Unidad de punto flotante, unidad de ejecucin que realiza las operaciones con nmeros decimales. La unidad de paginacin, realiza convierte las direcciones lineales en direcciones fsicas cuando se utiliza el mecanismo de manejo de memoria virtual por paginacin. La unidad de segmentacin, convierte las direcciones de memorias lgicas(del modelo segmentado de memoria) en direcciones lineales(del modelo plano de memoria). La Unidad Aritmtica Lgica ALU, realiza todas las operaciones lgicas y las aritmticas de nmeros enteros.

En la actualidad los microprocesadores Intel poseen muchas ms unidades internas de la referidas aqu, haciendo crecer su paralelismo interno. Esta afirmacin se ve concretada en algunos de los avances tecnolgicos actuales como lo son la tecnologa Hyperthreading y la Dual-Core de Intel con las que no solamente se posee paralelismo a nivel de unidades de ejecucin sino de microprocesadores en un solo chip. Con la tecnologa Hyperthreading se logran tener dos o ms procesadores lgicas en un chip mientras que con la tecnologa Dual-Core se logran tener dos microprocesadores fsicos en un solo chip. El paralelismo puede encontrarse a nivel del chip en forma de mltiples unidades internas, en mltiples pipelines o incluso como mltiples procesadores encapsulados en el mismo chip. Tambin es posible conseguir niveles de paralelismo fuera del chip en una misma tarjeta madre, esto es, en tarjetas madres que soporten mltiples procesadores. Finalmente, se puede conseguir paralelismo a nivel de computadores completos en dos formas principales como grids (o rejillas de computadores) y como clusters (o conglomerados de computadores). Los Grids son conjuntos de computadores heterogneos u homogneos conectados en red, cuyos recursos y tiempos libres de procesamiento son utilizados por el Grid para la ejecucin de tareas especficas. En contraste, los Cluster son arreglos homogneos de computadores conectados en red, que corren un sistema operativos capaz de administrar los recursos computacionales de dicha red como si fuera un solo computador en la ejecucin de tareas especficas. Los computadores conectados a un Grid son autnomos, pudiendo conectarse y desconectarse del Grid, mientras que los computadores conectados a un Cluster son dependientes del mismo. 4.2. Modos de operacin de los microprocesadores Intel de la arquitectura IA-32 Los microprocesadores Intel ms modernos poseen cuatro modos de operacin: modo protegido, modo real, modo de administracin del sistema y modo . Estos modos de operacin determinan que instrucciones y caractersticas de la arquitectura estarn disponibles para la programacin y ejecucin. A continuacin se describen brevemente los modos de operacin de los microprocesadores Intel. Modo Protegido: este es el modo de trabajo nativo de los microprocesadores IA-32. En este modo estn disponibles todas las instrucciones y caractersticas disponible en la familia IA-32. Este es el modo de operacin recomendado para todos los programas y sistemas operativos nuevos. Ofrece un ambiente multitarea de ejecucin y un submodo especial para mantener compatibilidad con el modo real denominado modo virtual 8086. En este submodo se tiene acceso a una memoria limitada de 1MB denominada espacio de direccionamiento de modo real. Los datos y las instrucciones manejadas son de hasta 32bits y la memoria se maneja por grupos o bloques denominados segmentos de memoria. Los segmentos de memoria son de diferentes tamaos y el acceso a los mismos puede estar protegido. El microprocesador tambin puede pasar del modo protegido al modo de administracin del sistema si as se desea. Modo Real: Todos los microprocesadores Intel IA-32 inician su funcionamiento en modo real. Este modo implementa el entorno de ejecucin del procesador 8086 (tambin permite cambiar a cualquiera de los otros dos modos de operacin). En este modo existen restricciones en cuanto a los tipos de instrucciones que pueden manejarse y el espacio de direccionamiento es de 1MBytes. En este modo todos los datos e instrucciones manejadas son de 16bits. La memoria se maneja mediante segmentos de tamao fijo (hasta 64Kbytes). No existe proteccin de los segmentos e incluso se pueden solapar. Modo de administracin de sistema (System management mode-SMM): este modo implementa funciones especiales para la administracin de energa y funciones de seguridad del sistema. Este modo utiliza un modelo de memoria separado denominado RAM de manejo del sistema (System Management RAM SMRAM). Este modo es parecido al utilizado en modo real. Modo IA-32e: este es un nuevo modo de ejecucin en los microprocesadores Intel de la familia IA-32. Extiende el modelo de memoria y presenta dos sub-modos de ejecucin que se describen a continuacin. Elaborado por: Ing. David Fernndez 21/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Sub-modo de compatibilidad: es el modo de compatibilidad para el funcionamiento de 16 bits y 32 bits sin necesidad de requerir recompilar las aplicaciones en sistemas operativos de 64 bits. En este modo no funcionarn las aplicaciones diseadas para el modo virtual-8086. Los sistemas operativos de 64 bits pueden habilitar este modo por segmentos, de manera que una aplicacin de 32 bits 16 bits pueda ejecutarse sin problemas, sin afectar otros programas compilados para 64 bits. En este modo las aplicaciones de 32 bits 16 bits pueden acceder a un espacio de direcciones de 4 GB y mediante un mecanismo denominado PAE (Physical Address Extensions) pueden acceder a memoria fsica por arriba de los 4 GB. Sub-modo de 64bits: es un modo de operacin que permite a la arquitectura IA-32 ejecutar sistemas operativos de 64 bits y aplicaciones de 64 bits que accedan adems a un espacio de memoria de 64 bits. Este modo aade ocho registros de propsito general y ocho adicionales para las instrucciones SIMD. As mismo, incrementa el tamao de los registros de propsito general a 64 bits para lo que aade el prefijo REX al cdigo de operacin. Las direcciones que maneja son de 64 bits y los operandos por defecto son de 32 bits.

Todos estos modos utilizan un entorno de ejecucin comn que se describe en el siguiente apartado. 4.3. Entorno bsico de ejecucin de la familia IA-32 A cualquier programa que se ejecuta en la familia IA-32 se le asigna una serie de recursos para el manejo de su cdigo, datos e informacin de su estado de ejecucin. Al conjunto de estos recursos se les denomina de entorno bsico de ejecucin. En los prximos prrafos se explica brevemente cuales son estos recursos y que funcin cumplen (ver Figura 14).

Registros de ejecucin bsica de programas: 16 registros utilizados para la ejecucin de instrucciones de propsito general que permiten realizar la mayora de las operaciones lgicas, aritmtica de enteros y direccionamiento del espacio de memoria. Estos registros se dividen en 8 de propsito general, 6 registros segmento, un registros bandera y un registro apuntador de instrucciones. Estos registros sern estudiados ms a fondo en los siguientes apartados. Registros x87 FPU: son los registros utilizados por la unidad de punto flotante para realizar clculos numricos sobre nmeros punto flotante, enteros y BCD. Estos registros se dividen en 8 registros de 80 bits de propsito general, uno de estado, otro apuntador de instrucciones, uno apuntador de datos. Registros MMX: utilizados para realizar las operaciones SIMD. Son 8 registros de 64 bits. Registros XMM: utilizados para realizar operaciones SSE, SSE2 y SSE3. Son 8 registros de 128 bits y un registro de control de 32 bits. Pila: existen recursos adicionales para el manejo de la Pila lo que ofrece las herramientas necesarias para realizar llamadas y pase de parmetros entre sub-rutinas. La Pila se almacena en la memoria. Espacio de direccionamiento de memoria: los microprocesadores de la arquitectura IA-32 pueden direccionar un espacio de memoria lineal de 4 GB (232 bytes) y una espacio de memoria fsica de 64 GB (236 bytes).

Elaborado por: Ing. David Fernndez

22/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Figura 14. Entorno bsico de ejecucin de la familia IA-32


Existen otros recursos que no pertenecen al entorno bsico de ejecucin pero que son caractersticas fundamentales de la arquitectura IA-32 y representan recursos de suma importancia para la programacin de aplicaciones y la administracin del sistema operativo. Entre estos recursos se encuentran los sealados seguidamente.

Puertos de entrada y salida (E/S): es el modelo manejado por la arquitectura para permitir transferir informacin entre el microprocesador y los dispositivos de E/S. Registros de control: se poseen 5 registros de control (CR0 al CR4) que determinan el estado de operacin del microprocesador y de las tareas en ejecucin. Registros para el manejo de la memoria: utilizados para el manejo de la memoria en modo protegido (GDTR, IDTR y LDTR). Registros de depuracin: utilizados para operaciones de depuracin (DR0 al DR7). Registros de tipo de rango de memoria: utilizados para asignar tipos de memoria a ciertas localidades de memoria (MTRRs). Registros especficos de la mquina: se utilizan para reportar caractersticas funcionales del procesador (MSRs). La mayora de estos registros no estn disponibles para las aplicaciones de usuario. Registros de verificacin de la mquina: son registros (MSR) de control, estado y reporte de errores utilizados para el manejo de errores del microprocesador. Registros contadores para la observacin del rendimiento: permiten realizar observaciones del rendimiento sobre eventos en el sistema.

Elaborado por: Ing. David Fernndez

23/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

El nuevo modo de operacin IA-32e introducido en los microprocesadores de ltima generacin de la familia IA-32 poseen un entorno de ejecucin expandido para soportar datos y operaciones de 64bits. Este entorno no ser discutido en este documento. 4.3.1. Registros de propsito general Los registros de propsito general se utilizan en la forma en la que desee el programador y se pueden direccionar como registros de 32 bits (EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI), como registros de 16 bits (AX, BX, CX, DX, SP, BP, DI, SI) y algunos como registros de 8 bits (AH, AL, BH, BL, CH, CL, DH, DL). Debe recordarse que slo los procesadores de 32 bits pueden utilizar los registros de 32 bits. Algunas de las instrucciones de los microprocesadores utilizan de forma especial estos registros, es por esta razn que se les han asignado nombres. En lenguaje ensamblador los nombres de los registros se representan por dos o tres letras como por ejemplo AX, CH, BL. A continuacin se indican los nombres de estos registros y su uso ms importante. EAX (Acumulador Acumulator): a menudo conserva los resultados de operaciones aritmticas y lgicas. Puede direccionarse como EAX, AX, AH y AL. EBX (Base): contiene frecuentemente la direccin base (desplazamiento) de los datos que hay en la memoria la direccin base de una tabla de datos a ser referenciada por la instruccin de conversin XLAT. Puede ser direccionado como EBX, BX, BH y BL. ECX (Contador Counter): este registro contiene usualmente el conteo de operaciones de desplazamiento de bits y rotaciones, para las operaciones repetidas de cadenas y para las operaciones de ciclos o bucles de programas. Puede direccionarse como ECX, CX, CH y CL. EDX (Datos Data): puede contener la parte ms significativa de un producto despus de una multiplicacin de 16 32 bits; puede contener la parte ms significativa del dividendo antes de la divisin el nmero del puerto de E/S (entrada/salida) para una instruccin de E/S. Tambin puede direccionarse como EDX, DX, DH y DL. ESP (Apuntador de Pila Stack Pointer): permite direccionar datos contenidos en una pila LIFO (ltimo en entrar primero en salir-Last In First Out). Es utilizado por las instrucciones PUSH y PULL o cuando se realizan llamadas a subrutinas con las instrucciones CALL y RET. Este registro se puede direccionar como ESP SP. EBP (Apuntador Base Base Pointer): se utiliza generalmente para apuntar a una matriz de datos ubicados en una pila de memoria. Tambin se utiliza para manejar los parmetros pasados a un procedimiento en el marco de pila del procedimiento. Este registro puede direccionar como EBP BP. EDI (ndice Destino Destiny Index): se utiliza generalmente para apuntar de forma indirecta a direcciones de memoria donde se almacenaran un conjunto de datos en cadena o arreglos. Se puede direccionar como EDI o DI. ESI (ndice Fuente Source Index): se utiliza para apuntar de forma indirecta al lugar de memoria donde se encuentran los datos de una cadena o arreglo de datos que sern copiados a otro lugar de memoria. Se puede direccionar como ESI o SI.

4.3.2. Registros especiales Existen dos registros de propsito especial en los microprocesadores Intel, el EIP y el EFLAGS que se describen a continuacin. EIP (Registro Apuntador de Instruccin-Instruction Pointer): es un registro cuyo nico propsito es apuntar a la prxima instruccin que va a ejecutar el microprocesador. Para conocer la direccin de la instruccin a ejecutar se suma la direccin que contiene EIP al inicio del segmento cdigo. Se puede direccionar como EIP(forma de 32bits) y como IP (forma de 16bits). EFLAGS (Banderas): este registro contiene una serie de bits que indican el estado en el que se encuentra el microprocesador y el programa actual despus de cada instruccin ejecutada y algunos de ellos controlan su funcionamiento. Tambin se puede direccionar como FLAGS. En la Figura 14 se ilustra el registro bandera, en la misma se indica el nombre y la posicin de cada bit en dicho registro.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ID VIP VIF AC VM RF 0 NT IOP O D I T S Z 0 A 0 P 1 C X X X X X X X S: denota bits banderas relacionados al estado de ejecucin del programa actual C: denota bits de control de operacin X: denota bits de estado del sistema Nota: los espacios en blanco son reservados para uso futuro. X S C X X S S S S S

Figura 15. Registro bandera EFLAGS

Elaborado por: Ing. David Fernndez

24/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Los bits del registro bandera se agrupan en tres categoras, bits de estado de la aplicacin (indicados con la letra S), bits de control (indicados con la letra C) y bits de estado del sistema (indicados con la letra X). Los bits del registro bandera mantiene compatibilidad hacia atrs entre los microprocesadores Intel de las familias IA-16 e IA-32, esto es, el registro bandera del 8086/8088 es compatible con el registro bandera de los microprocesadores actuales (p.e. 80486 y familia Pentium) pero los registros de los microprocesadores son mucho ms especializados y los nuevos bits que introducen no existen ni son compatible con microprocesadores antiguos. A continuacin se describen los bits del registro bandera. C (Acarreo Carry): indica si hubo acarreo o prstamo en operaciones de suma y resta respectivamente, tambin indica la ocurrencia de errores para ciertas instrucciones, como por ejemplo sobre flujo en operaciones de aritmtica sobre nmeros enteros sin signo. P (Paridad Parity): indica si el resultado de una operacin tiene paridad par. El 1 indica paridad par y el 0 indica paridad impar (recurdese que la paridad es el conteo de los unos de un nmero binario), esto aplica para el byte menos significativo del resultado. A (Medio acarreo hAlf carry): indica que hubo un acarreo o prstamo entre el tercer y el cuarto bit de un byte en operaciones de suma y resta con nmeros en representacin BCD. Instrucciones como DAA y DAS se utilizan para ajustar los valores de AL despus de haber realizado una suma o resta BDC ajustando el valor contenido en AL segn lo indique este bit. El microprocesador no utiliza de otra manera este bit. Z (Cero Zero): indica cuando el resultado de una operacin matemtica o lgica es cero. Si el resultado es cero este bit se fija en uno (1), si el resultado es distinto de cero se almacena un cero (0) en este bit. S (Signo Sing): indica si el resultado de la operacin aritmtica de suma o resta es positivo o negativo. Si S = 0 el resultado es positivo de lo contrario es negativo. Es importante resaltar que en el bit de signo copia el valor del bit ms significativo del resultado de cualquier instruccin que afecte a las banderas. T (Trampa Trap): se utiliza para habilitar las caractersticas de depuracin del microprocesador (fija el modo de ejecucin paso simple). Cuando T vale uno (1) la funcin de depuracin se encuentra habilitada, caso contrario se encuentra deshabilitada. I (Interrupcin Interrupt): controla el funcionamiento de las interrupciones enmascarables del microprocesador. Si I = 0 se deshabilita la entrada INTR y si I = 1 se habilita la entrada INTR. D (Direccin Direction): controla la seleccin de incremento o decremento de los registros DI y SI en operaciones de cadenas o arreglos. Si D = 1 hay decremento automtico en los registros mencionados, si D = 0 hay incremento automtico en estos registros. Esta bandera se fija en uno con la instruccin STD (fijar D set) y se coloca en cero con la instruccin CLD (borrar D - clear). (Sobreflujo Overflow): este bit es importante solamente en operaciones con signo de lo contrario no importa el estado de este bit. Este bit se coloca en uno si el resultado de la suma o resta aritmtica exceden la capacidad almacenamiento del microprocesador de lo contrario permanece en cero. P.e. si se suma 7FH (+127) a 01H(+1) el resultado es 80H (-128) esta es una situacin de sobreflujo si se trabaja con datos de 1 byte (8bits). IOPL (Nivel de privilegio de entrada y salida IO Privilege Level): se utiliza nicamente en el modo de operacin protegido del procesador para al espacio de direcciones de E/S. Si el nivel de privilegio actual es de mayor prioridad que el de la bandera IOPL se ejecuta la operacin de E/S, de lo contrario se produce una interrupcin que ocasiona la suspensin de la ejecucin. El nivel IOPL = 00 es el de mayor prioridad y el 11 es el de menor prioridad. NT (Tarea anidada Nested Task): se utiliza solamente para el modo protegido y permite indicar si la tarea que se ejecuta en la actualidad est anidada dentro de otra (esto sucede cuando el bit vale 1 de lo contrario la tarea actual no est anidada). RF (Reanudar ejecucin Restart Execution): se utiliza en la depuracin para ejecutar la siguiente instruccin. VM (Modo virtual Virtual Mode): esta bandera selecciona el funcionamiento de modo virtual cuando el procesador est funcionando en modo protegido, y permite la creacin de varias sesiones simuladas de modo real (MS/DOS). AC (Comprobacin de alineacin Alignment Check): cuando se coloca en uno se habilita la funcin de verificacin de alineacin de referencias o direcciones de memoria, y cuando est en cero se deshabilita la funcin de verificacin de alineacin de las direcciones de memoria. Este bit bandera slo existe en el 80486 y sus sucesores. VIF (Bandera de Interrupcin Virtual - Virtual Interrupt Flag): es una imagen virtual del bit bandera IF que se utiliza en conjunto con el bit bandera VIP VIP (Bandera de Interrupcin en Espera Virtual - Virtual Interrupt Pending Flag): cuando este bit se encuentra en uno sealiza que existe una interrupcin por atender, si no existen interrupciones pendientes se coloca en cero. ID (Bandera de identificacin Identification Flag): permite activar o desactivar las instrucciones de CPUID.

4.3.3. Registros segmentos Los registros segmentos permiten generar las direcciones de memoria para el manejo de los segmentos de memoria. Los registros segmentos funcionan de forma diferente dependiendo del modo de trabajo del microprocesador. Los registros segmentos FS y GS slo existen a partir de 80386. CS (Registro segmento de cdigo Code Segment): define la direccin de memoria a partir de la cual se 25/59

Elaborado por: Ing. David Fernndez

Arquitectura de Computadores: Electrnica Digital II

16/06/06

almacenan los programas y procedimientos que ejecuta el procesador. El CS define la direccin inicial de un segmento de 64KB en la que est alojado el cdigo a ejecutar cuando el procesador opera en modo real; si el procesador se encuentra en modo protegido CS apunta a la direccin de memoria donde se encuentra un descriptor que describe la direccin inicial del segmento de cdigo, su longitud y sus derechos de acceso. El segmento de cdigo est limitado a 64KB en los procesadores 8086-80286 y a 4GB a partir del 80386.. DS (Segmento de Datos Data Segment): define la direccin de memoria a partir de la cual se almacenan la mayora de los datos de un programa. ES (Segmento Extra Extra Segment): contiene la direccin de un segmento de extra de memoria utilizado para algunas instrucciones de cadenas. SS (Segmento de Pila Stack Segment): indica el punto donde inicia la pila. Las operaciones que trabajan con la pila utilizan al registro ESP para apuntar al tope de la misma. Tambin es posible acceder a datos dentro de la pila mediante el registro BP. FS y GS: solamente existen a partir del 80386 y su objetivo es de ofrecer a los programadores capacidad para disponer de dos segmentos adicionales de memoria para datos.

4.4. Manejo de la memoria en el microprocesador Los microprocesadores Intel manejan la memoria en dos formas diferentes. La memoria fsica es la que estos ven desde sus buses (es la que ve el fabricante de hardware) y la memoria lgica la que se utiliza a nivel de la programacin (es la que ve el programador). 4.4.1. Memoria Fsica La memoria fsica se organiza en bloques pequeos de memoria de 8 bits a los que se les denomina bancos de memoria, y el nmero de bancos de memoria depende del tamao del bus de datos del microprocesador. Los microprocesadores de 8 bits tienen un solo banco (ya que poseen un bus de datos de 8bits, por ejemplo en el 8080 la memoria es de 8 bits de ancho), los de 16 bits tienen dos bancos de memoria (por ejemplo en los procesadores 8086, 80186, 80286 es de 16 bits de ancho) y los procesadores de 32 bits tienen 4 bancos de memoria (por ejemplo en el 80386DX y 80486 es de 32 bits de ancho), en donde la memoria puede ser direccionada como bytes, palabras o palabras dobles. Hoy en da el tamao des bus de datos sigue creciendo y en consecuencia el nmero de bancos de memoria dependern de la arquitectura particular de los microprocesadores utilizados. 4.4.2 Memoria Lgica La memoria lgica es la misma para todos los microprocesadores Intel, se considera como un gran bloque de memoria organizado en bytes (ver Figura 14), con la nica distincin entre los diferentes microprocesadores que el tamao del bloque puede ser ms grande o ms pequeo. Esta es la manera como el programador ve la memoria, slo se diferencia de un procesador de otro en cuanto a la cantidad de memoria que puede direccionar. La memoria de los procesadores 8086, 80186 y 80286 es en total de 1MB (1MB = 1024KB) que va desde 00000H hasta FFFFFH, para el 80286 y el 80386SX la cantidad de memoria es de 16MB y se extiende desde 000000H hasta FFFFFFH y para los procesadores ms modernos 80386DX, 80486 y los Pentium de primera generacin la memoria direccionable es de 4GB (1GB = 1024MB) y se extiende desde la direccin 00000000H hasta la direccin FFFFFFFFH. 4.4.3. Modelos para el manejo de la memoria lgica Los microprocesadores Intel no manejan la memoria fsica de forma directa, para ello utilizan tres modelos lgicos para el manejo de la memoria el Modelo Plano, el modelo Segmentado, y el modelo Real. A continuacin se describirn estos modelos. Modelo Plano (Flat memory model) Este es el modelo bsico para el manejo de la memoria lgica de los microprocesadores Intel. En este modelo se maneja la memoria como un espacio continuo de direcciones (ver Figura 17). A este espacio de memoria se le denomina espacio lineal de direcciones. Tanto los programas como los datos y la pila estn contenidos en este espacio de memoria. Las direcciones en el modelo plano estn asociadas a localidades de memoria de 1byte y en los microprocesadores modernos en modelo plano tiene un tamao de 4Gbytes con direcciones que inician en 0 y llegan hasta 232-1 (excepto para el modo de operacin de 64bits en el que cambia un poco este modelo). Una direccin en este modelo de memoria se denomina direccin lineal. La direccin lineal puede estar relacionada con las direcciones de memoria fsica de forma directa o de forma indirecta. En la relacin directa existe una correspondencia uno a uno con las direcciones fsicas del sistema y en la relacin indirecta se traducen las direcciones lineales a la fsicas a travs de un mecanismo denominado paginacin. Modelo Segmentado (Segmented memory model) La memoria, en este modelo, aparece como bloques de direcciones independientes denominados segmentos. Estos bloques se pueden pensar como varios modelos planos de memoria independientes uno del otro, organizados de igual forma por bytes. El cdigo los datos y la pila se almacenan en segmentos de memoria distintos en este modelo. Las direcciones manejadas por este modelo para ubicar un byte dentro de un segmento se denominan direcciones lgicas. Una direccin lgica se conforma de un selector de segmento y un desplazamiento (estas direcciones tambin Elaborado por: Ing. David Fernndez 26/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

reciben el nombre de punteros lejanos, ver Figura 16). El selector de segmento identifica cual es el segmento al que se tendr acceso y el desplazamiento identifica un byte dentro del espacio de direccionamiento del segmento. La arquitectura IA-32 puede manejar hasta 16383 segmentos de diferentes tipos y tamaos, y cada segmento puede tener un tamao mximo de 232bytes.

Figura 16. Direccin lgica de memoria (Fuente Volumen 1 pag. 3-27 del manual de programacin de la arquitectura IA-32)
Internamente, todos los segmentos definidos por este modelo se localizan dentro del modelo plano de memoria antes explicado. Es decir, el microprocesador posee mecanismos para convertir la direccin lgica de memoria (utilizada en el modelo segmentado) en direccin lineal (utilizada en el modelo plano). Esta traduccin es transparente para el usuario y las aplicaciones. Este modelo de memoria parece ser un poco complicado pero tiene una gran ventaja, permite que las aplicaciones desarrolladas (tanto a nivel de datos como de cdigo) sean reubicables en cualquier lugar de la memoria (relocalizacin de segmentos). Esta caractersticas es de vital importancia si se considera la gran variedad de configuraciones de computadores que pueden conseguirse en el mercado, permitiendo escribir el programa una sola vez sin importar la configuracin del sistema que lo ejecutar. Para mover un programa de una localidad de memoria a otra basta con cambiar el valor de los registros segmento que maneja el programa. La asignacin y modificacin de los valores de los registros segmentos utilizados en una aplicacin estn a cargo, por lo general, del sistema operativo. La principal razn por la que se utiliza este modelo es la seguridad que ofrece a los segmentos de los programas y del sistema operativo. Entre algunos de los beneficios de este modelo est que los segmentos no pueden solaparse y que existen derechos de acceso a los mismos. Modelo Real (Real-address mode memory model) Este es el modelo de manejo de memoria que utiliza el microprocesador 8086. En este modelo solamente se tiene acceso a 1Mbyte de memoria, es decir, las direcciones de memoria se extienden desde 0 a 2 20-1. Existe para proveer compatibilidad con los programas escritos para el 8086. El modelo real es un caso especfico del modelo segmentado, en el mismo se manejan segmentos de memoria de 64Kbytes. El problema con este modelo es que los segmentos no poseen proteccin, se pueden solapar y no existe control sobre el tamao de los mismos (son siempre del mismo tamao). En este modelo las direcciones de memoria se denominan direcciones lgicas y se calculan igual que como lo hace el modelo segmentado, mediante un selector de segmento y un desplazamiento. Estas direcciones tambin se deben traducir a direcciones del espacio lineas, el siguiente apartado explica como realizar esta conversin.

Elaborado por: Ing. David Fernndez

27/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Figura 17. Modelos para el manejo de la memoria lgica de los microprocesadores Intel (Fuente: Volumen 1, pag. 3-9 del manual de programacin de la arquitectura IA-32)
4.4.4. Clculo de las direcciones lineales en el modelo real En el modelo real la memoria se direcciona a travs de un selector de segmento y un desplazamiento, al igual que en el modelo segmentado. El selector de segmentos en este modelo viene dado por una direccin almacenada en uno de los seis registros segmentos y el desplazamiento puede estar conformado por varios componentes que se explicarn ms adelante. La direccin lineal se calcula multiplicando al registro segmento por 10H y sumndole el desplazamiento como se muestra en Figura 18.

19 0 Registro_Segmento(16b) * 10H (Direccin del inicio del segmento)

15

0 Desplazamiento (Direccin Efectiva)

Figura 18. Construccin de direcciones de memoria en el "Modelo Real"


Por ejemplo, suponga que se posee un selector de segmento almacenado en el registro DS = 1AB0H y un desplazamiento almacenado en un registro de propsito general (AX = 1010H), la direccin lineal se calcula como sigue: Direccin Lineal = DSx10H + AX = 1AB00H + 1010H = 1BB10H Es importante resaltar que los registros segmento contienen la direccin donde inicia el segmento y el desplazamiento indica cual es el byte dentro del segmento seleccionado al que se desea acceder.

Elaborado por: Ing. David Fernndez

28/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

4.4.5. Clculo de las direcciones lineales en el modelo segmentado El selector del segmento siempre est ubicado en un registro segmento y selecciona una estructura de datos denominada descriptor almacenada en un lugar especial de la memoria. El selector contiene tres elementos que permiten seleccionar al descriptor, a continuacin se muestran las partes del selector.

Figura 19. Estructura de un selector


El RPL es el nivel de privilegio solicitado por el usuario o la aplicacin para acceder a un segmento, este debe ser mayor o igual al nivel de privilegio del descriptor denominado DPL. El campo TI establece si el descriptor seleccionado es de la tabla de descriptores globales (TI = 0) o de la tabla de descriptores locales (TI = 1). Finalmente el ndice indica cual descriptor dentro de la tabla de descriptores es el que se ha seleccionado. Al seleccionar el descriptor, se utiliza la informacin contenida en l para identificar el inicio del segmento, su longitud y los derechos de acceso al mismo. A continuacin se muestra la estructura bsica de un descriptor.
BYTE 7 5 P 3 1 L AVL D/B G Base Lm ite P DPL S TIPO BASE 31:24 DPL S TIPO BASE 15:08 LM ITE 15:08 G D/B L AVL LM ITE 19:16 BASE 23:16 BASE 07:00 LM ITE 07:00 6 4 2 0 BYTE

Si es 0 no hay com patibilidad con el m odo IA-32e, de lo contrario si hay com patibilidad Indica si el segm ento est disponible o est siendo (AVL=0) utilizado (AVL=1) Si es 0 existe com patibilidad con el m odo de instrucciones y datos de 16 bits y si es 1 la com patibilidad es con 32 bits El bit de granularidad inidica si se m ultiplica por 1 el valor del lm o por 4 KB (agregando XXXH al lm ite ite) Indica la direccin lineal en la que inicia el segm ento Establece el tam ao del segm ento Si es 0 el descriptor no se ha definido (contiene inform acin invlida) y si es 1 se ha definido Nivel de privilegio del descriptor, si el RPL>=DPL hay acceso al descriptor Indica si el segm ento es del sistem (S=1) o de a cdigo/datos Indica si el segm ento es de cdigo/datos, si crece o decrece, si se puede leer y escribir de l y si ha sido accedido por algn otro program con anterioridad a

Figura 20. Estructura de un descriptor


Finalmente, para calcular la direccin lineal correspondiente a la direccin lgica en el modelo segmentado se suma la base del descriptor y el desplazamiento como se muestra en la Figura 21.

31 Selector_de_Segmento (Base obtenida del Descriptor)

31

0 Desplazamiento (Direccin Efectiva)

Figura 21. Construccin de direcciones de memoria en el "Modelo Segmentado"


Por ejemplo, suponga que un descriptor posee una base=FFA10000H y un desplazamiento dado por el registro EBX=00001234H entonces la direccin lineal resultante de esta direccin lgica se calcula como sigue: Direccin lineal = Base + EBX = FFA10000H + 00001234H = FFA11234H 4.5. Manejo de los operandos y direcciones en las instrucciones de la arquitectura IA-32 En este apartado se estudiarn las caractersticas de los operandos utilizados como datos y como direcciones de memoria. El primer aspecto revisado ser relativo al tamao de los operandos, posteriormente se presentar el lugar donde se pueden almacenar los operandos y por ltimo se realizar un estudio de los operandos que pueden utilizarse Elaborado por: Ing. David Fernndez 29/59

Arquitectura de Computadores: Electrnica Digital II para crear direcciones de memoria.

16/06/06

4.5.1. Tamao de los operandos de datos o de direcciones Cada segmento de memoria en la familia IA-32 puede trabajar con tamaos diferentes de operandos, y el tamao depende del bit D del descriptor de dicho segmento. Cuando el bit D vale 0 los operandos manejados son de 16bits de 8 bits y cuando ste bit vale 1 los operandos son de 32bits de 8bits. Es importante destacar que esto es vlido cuando se trabaja con el modelo segmentado el modelo plano de memoria, el modelo real y el SMRAM trabajan con operandos de 16bits o de 8bits. En particular el tamao de los operandos utilizados para el direccionamiento de la memoria son importantes en la manera como se accede a la memoria. Cuando la opcin de operandos de 16bits se utiliza solamente se tiene acceso a desplazamientos de 64kbytes mximos lo que limita al sistema a utilizar segmentos de 64kbytes. Por otro lado, cuando se trabaja con operandos de 32bits el tamao mximo de los segmentos utilizados es de 4Gbytes. El tamao de los operandos de las instrucciones o de las direcciones se puede cambiar para algunas instrucciones con prefijos de instruccin. En la siguiente figura es posible observar como mediante el uso de un prefijo para el cambio de tamao de operandos de instrucciones (66H) o para el cambio de operandos de direcciones (67H) se pueden cambiar los tamaos por defecto de los mismos. Una N en la figura indica que el prefijo de la instruccin no se utiliza mientras que una Y indica que si se utiliza. De igual manera, un 16 indica operandos de 16bits mientras que un 32 indica operandos de 32bits.

Figura 22. Tamao de los operandos de instrucciones y memoria cuando se utilizan prefijos de cambio de tamao (Fuente: Volumen 1 Manuales de programacin de la IA-32, pag. 3-24)
4.5.2. Descripcin de los operandos Las instrucciones de los microprocesadores de la arquitectura IA-32 pueden trabajar sin operandos o con operandos. Algunos de los operandos pueden estar definidos de forma explcita en la instruccin o de forma implcita dependiendo de la instruccin. Por ltimo, los operandos utilizados por las instrucciones pueden ser de dos tipos: operandos fuente y operandos destino. Los operandos fuente pueden estar ubicados en: La instruccin misma (operandos datos inmediatos) Registros Localidades de memoria Puertos de E/S Los operandos destinos pueden estar ubicados en: Registros Localidades de memoria Puertos de E/S A continuacin se describen cada uno de estos tipos de operandos. A. OPERANDOS INMEDIATOS Algunas instrucciones permiten definir operandos en la misma instruccin, tales operandos se denominan inmediatos. Por ejemplo, la siguiente instruccin copia el nmero 60 en el registro AX, el valor 60 es un operando inmediato que se almacena junto con la instruccin en el segmento de cdigo: MOV AX,60 Las instrucciones aritmticas permiten el uso de operandos fuente inmediatos con excepcin de las instrucciones de divisin DIV e IDIV. El valor ms grande que puede representarse con un operando inmediato nunca puede exceder el mximo valor que puede representarse con una palabra doble (32bits). B. OPERANDOS DE REGISTROS Dependiendo de la instruccin utilizada los registros utilizados pueden ser: Elaborado por: Ing. David Fernndez 30/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Cualquiera de los 8 registros de propsito general (en cualquiera de sus formas de direccionamiento) Uno de los 6 registros segmento El registro bandera Cualquiera de los 8 registros de la unidad de punto flotante x87, los de control y estado Uno de los 8 registros MMX Uno de los 8 registros XMM o el registro MXCSR Alguno de los registros de control o de los registros de la tabla de descriptores Uno de los registros de depuracin o los registros MSR Algunas instrucciones pueden utilizar ms de un registro como un operando como sucede con las instrucciones de divisin y multiplicacin

C. OPERANDOS DE MEMORIA Los operandos de memoria siempre estn direccionados por un selector y un desplazamiento. El selector identifica el segmento con el que se trabaja mientras que el desplazamiento indica la direccin linear la direccin efectiva dentro del segmento en la que se consigue el operando con el que se desea trabajar. Los selectores de segmentos: viene dados por un registro segmento. Normalmente el selector se carga en un registro segmento y posteriormente se especifica, de forma implcita o explcita, el segmento a utilizar. Cuando el registro segmento se selecciona de forma implcita se escoge de acuerdo al tipo de referencia que realice la instruccin (ver tabla 2) que se explica a continuacin:

Si la instruccin hace referencia a otras instrucciones se trabaja con el registro segmento de cdigo CS Si la instruccin hace referencia a la pila entonces se trabaja con el registro segmento de pila SS Si la instruccin hace referencia datos globales entonces se trabaja con el registro segmento de datos DS Si la instruccin hace referencia a datos destino de cadenas de datos entonces se trabajo con el registro segmento extra ES

Tabla 4. Reglas de seleccin de segmentos


Tipo de Referencia Instrucciones Pila Registro utilizado CS SS Segmento Regla de seleccin implcita utilizado De Cdigo De Pila Utilizado en todas las instrucciones de control de flujo y de bsqueda de instrucciones. Instrucciones PUSH y POP. Cualquier referencia de memoria que utilice los registros ESP y EBP como registro base. Datos Locales Cadenas Destino DS ES De Datos Extra Todas las referencias a datos que no utilicen a ESP y a EBP en referencias de memoria como base. En las instrucciones de cadenas que tengan operandos destino.

Los registros segmentos que se especifican de forma explcita se colocan en la misma instruccin delante del desplazamiento en una direccin, separados con dos puntos. A continuacin se presentan dos ejemplos, uno en donde el selector de segmento se escoge de forma implcita y otro donde el selector de segmento es explcito: Direccionamiento con seleccin implcita del registro segmento: MOV [ECX], EBX -> utiliza a DS como registro segmento Direccionamiento con seleccin explcita del registro segmento: MOV ES:[ECX], EBX -> utiliza a ES como registro segmento. Existen instrucciones en las que no se puede indicar de forma explcita el registro segmento utilizado. En estas instrucciones se utilizan las reglas establecidas en la tabla anterior. A continuacin se listan estos casos:

Las instrucciones slo pueden buscarse en el segmento de cdigo. Los operandos destino de instrucciones de cadena slo pueden almacenarse en el segmento extra.

Elaborado por: Ing. David Fernndez

31/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Las operaciones push y pop siempre hacen referencia al segmento de pila.

Los desplazamientos: pueden ser valores constantes o pueden ser valores obtenidos de un clculo entre diferentes elementos. Los elementos que componen un desplazamiento calculado son:

Desplazamiento fijo: es un valor de 8bits, 16bits o 32bits (puede estar representado por una etiqueta de memoria). Base: es un valor almacenado en uno de los 8 registros de propsito general. ndice: un valor almacenado en un registro de propsito general (con excepcin del registro ESP que no puede ser utilizado como ndice). Factor de escala: es un factor que multiplica al ndice y puede ser 1, 2, 4 u 8.

Cada uno de los elementos antes mencionados se suman para generar un nico desplazamiento denominado direccin efectiva y pueden ser positivos o negativas salvo por el factor de escala que siempre es positivo. La figura que se muestra a continuacin muestra las maneras en las que se pueden combinar estos elementos para calcular la direccin efectiva.

Figura 23. Calculo de la direccin efectiva


D. CONSIDERACIONES GENERALES Existen diferentes consideraciones importantes cuando se calculan direcciones efectivas de memoria, a continuacin se presentan algunas de las ms importantes.

En todos los casos mostrados en la figura el registro segmento implcito es DS, pero cuando se utiliza como base el registro EBP el registro ESP entonces el registro segmento es SS. La base, el ndice y el desplazamiento numrico pueden utilizarse en cualquier combinacin. Cualquiera de estos elementos puede utilizarse como mximo una vez o puede omitirse. Si la instruccin transfiere informacin de una fuente a un destino, ambos tienen que ser del mismo tamao y el destino nunca puede ser el registro segmento de cdigo CS. No se admiten transferencias entre registros segmentos.

E. OPERANDOS DE PUERTOS DE E/S Las instrucciones pueden utilizar operandos que direccionen a dispositivos de entrada/salida. Los microprocesadores Intel poseen un espacio de direcciones de E/S de 65536 puertos de 8bits cada uno. Tambin se pueden definir puertos de 16bits 32bits. Las instrucciones que utilicen estos tipos de operandos pueden direccionar al espacio de E/S mediante un valor numrico fijo de 8bits a lo que se le denomina puerto esttico o mediante el registro DX a lo que se le denomina puerto variable o dinmico (debido a que este registro puede cambiar de valor). 4.5.3. Modos de direccionamiento de memoria Segn las diferentes combinaciones que pueden utilizarse para construir una direccin efectiva, Intel define algunos modos comunes para el direccionamiento de la memoria de datos que se describen a continuacin. Modo de Desplazamiento: se utiliza cuando la referencia a la memoria viene dada por el elemento de desplazamiento fijo. Este tipo de direccionamiento tambin recibe el nombre de absoluto esttico y en el mismo el desplazamiento numrico se almacena junto con la instruccin. Uso: se utiliza para direccionar datos escalares estticos en la memoria de datos. Modo de Base: solamente utiliza el elemento base para direccionar un dato en la memoria de forma indirecta. Se dice que el direccionamiento es indirecto porque est almacenado en un registro. Uso: debido a que el dato almacenado en la base es variable este modo permite direccionar variables y estructuras de Elaborado por: Ing. David Fernndez 32/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

datos en la memoria de forma dinmica (permite direccionar a diferentes variables en memoria ya que su valor en el registro puede cambiar). Modo de Base + Desplazamiento: en este modo de direccionamiento se utiliza un elemento base y uno desplazamiento. Usos: este modo de direccionamiento puede ser utilizado con dos propsitos principales. Como un ndice para manejar elementos de un arreglo, siempre que los elementos de dicho arreglo posean un tamao diferente de 1, 2, 4 u 8 bytes. El elemento de desplazamiento fijo permite direccionar el inicio del arreglo mientras que el elemento base contiene el valor requerido para acceder al elemento deseado dentro del arreglo. Para obtener un campo de un registro, en cuyo caso la base contiene la direccin de inicio del registro y el elemento de desplazamiento fijo contiene la distancia esttica hasta el campo requerido en el registro. Modo (ndice * Escala) + Desplazamiento: en este modo existen solamente los elementos ndice, factor de escala y el desplazamiento. Uso: este modo es muy eficiente para direccionar arreglos estticos de datos en memoria cuyo tamao sea de 2, 4 y 8 bytes. El elemento de desplazamiento fijo ubica el inicio del arreglo y el elemento ndice contiene el nmero (ndice) del dato al que se desea acceder (el microprocesador aplica de forma automtica el factor de escala para calcular la distancia real del inicio del arreglo hasta el elemento deseado utilizando el factor de escala especificado). Modo Base + ndice + Desplazamiento: es un modo complejo de direccionamiento que usa los elementos base, ndice y desplazamiento. Uso: permite direccionar arreglos bidimensionales. El elemento de desplazamiento fijo indica el inicio del arreglo, y la base y el ndice permiten calcular la direccin del elemento deseado. Modo Base + (ndice * Escala)+ Desplazamiento: es el modo de direccionamiento ms complejo. Uso: permite direccionar de forma eficiente a los elementos de una arreglo bidimensional de datos en donde los elementos tengan tamao de 2, 4 u 8 bytes. 4.6. Problemas para el clculo de direcciones de memoria En esta seccin se presentan problemas en los que existen direcciones de memoria del modelo real y del modelo segmentado. Los problemas utilizan la instruccin MOV DEST,ORIG (que permite transferir datos de un ORIGen a un DESTino) y la instruccin PUSH DATA (que almacena datos en el segmento de pila). Es necesarios, para la ejecucin de cada instruccin, identificar el dato que ser movido, su tamao y las direcciones destino y origen. Debe indicarse en cada instruccin que tipo de direccionamiento se est realizando (segn los modos de direccionamiento definidos en apartado 4.5) y los valores de los datos que tendrn los registros modificados. Instrucciones en modo real A. MOV EAX,[BX+DI+2] B. MOV BX,SS:[AX] C. MOV AH,BL Asuma los siguientes valores iniciales para los registros en modo real: DS = 2A20H CS = 1000H SS = AA00H AX = 000AH BX = 0003H CX = 1111H BP = 0006H SP = 000AH DI = 0005H SI = 0002H DX = FFFFH Y se posee un vaciado de memoria mostrado a continuacin: Direccin Contenido 2A200: 38 4C 2C 8F FA CB 25 18 EF 87 45 67 AF BC DA 5F 2A210: ... ... AA000: 12 23 45 56 78 78 AC BD BA DC FA 70 25 56 6C 49 AA010: ... Solucin de instrucciones en modo real A. MOV EAX,[BX+DI+2] 1. Direccin de memoria: DS*10H + BX + DI + 2 = 2A20H*10H + 0003H + 0005H + 2 = 2A20AH 2. Contenido de memoria: EAX = [2A20AH] = BCAF6745H 3. Modo de direccionamiento: Base ms ndice ms Desplazamiento fijo. B. MOV BX,SS:[AX] 1. Direccin de memoria: SS*10H+AX = AA00H*10H + 000AH = AA00AH 2. Contenido de memoria: BX = [AA00AH] = 70FAH 3. Modo de direccionamiento: Base. C. MOV AH,BL

Elaborado por: Ing. David Fernndez

33/59

Arquitectura de Computadores: Electrnica Digital II 1. Direccin de memoria: no aplica 2. Contenido de memoria: AH = BL = 03H 3. Modo de direccionamiento: no aplica pues no se direcciona la memoria. Instrucciones en modo protegido D. MOV FS,[SP] E. MOV BX,[DX+2*SI] F. PUSH 102AH

16/06/06

Asuma los siguientes valores iniciales para los registros en modo protegido: SS = 0020H DS = 001CH CS = 0001H AX = 0002H CX = 0001H DX = 0004H DI = 0013H BP = 0002H SP = 0008H SI = 0004H Y se posee un vaciado de memoria mostrado a continuacin: Direccin Contenido 10000: 09 19 20 47 2C A4 F2 EE 8A 45 F4 F8 2B 98 10010: ... ... 2A200: 38 4C 2C 8F FA CB 25 18 EF 87 45 67 AF BC 2A210: ... ... AA000: 12 23 45 56 78 78 AC BD BA DC FA 70 25 56 AA010: ... Direccin inicial de la tabla de descriptores globales: Direccin Contenido 00000: FF C0 AB 04 F6 0F 98 00 FF 00 A0 12 0F 96 00010: 00 FF C0 AB 04 F6 0F 00 43 56 23 64 AD CD 00020: 00 01 00 A0 0A F6 00 00 4F 63 40 03 02 F2 Direccin inicial de la tabla de descriptores locales: 10000: FF 00 00 00 40 F6 01 00 19 20 47 2C A4 F2 10010: 00 19 20 47 2C A4 F2 EE BC 00 00 00 01 F2 10020: 2F 00 00 00 01 F2 00 00 01 5E 24 4D 53 11 Solucin de instrucciones en modo protegido D. MOV FS,[SP] 1. Direccin de memoria: BASE+SP = 000AA000H + 0008H = 000AA008H Selector (SS) = 0020H = 0000|0000|0010|0|0|00 b TI = 0 (Tabla de descriptores globales) RPL = 00 (mayor nivel de privilegio) ndice = 0000000000100 b = 4 Descriptor 7[00 5[F6 3[A0 2[01 | | | | 00]6 0A]4 00]2 00]0

67 08 DA 5F 6C 49

00 00 56 FA 0A FF EE 8A 00 00 23 53

Base: 000AA000H Lmite: 00100H Byte de derechos de acceso: F6H = 1(P)|11(DPL)|1(S)|0(E)|1(D)|1(W)|0(A) P:segmento vlido DPL: mnimo nivel de privilegio S: Descriptor de Datos/Cdigo E: Descriptor de datos D: decrece W: se puede escribir A: no se ha accedido al segmento 2. Contenido de memoria: FS = [000AA008H] = DCBAH 3. Modo de direccionamiento: Base. E. MOV BX,[DX+2*SI] 1. Direccin de memoria: BASE+DX+2*SI = 00010000H + 0004H + 2*0004H = 0001000CH Selector (DS) = 001CH = 0000|0000|0001|1|1|00 b

Elaborado por: Ing. David Fernndez

34/59

Arquitectura de Computadores: Electrnica Digital II TI = 1 (Tabla de descriptores locales) RPL = 00 (mayor nivel de privilegio) ndice = 0000000000011 b = 3 Descriptor 7[00 5[F2 3[00 2[00 | | | | 00]6 01]4 00]2 BC]0

16/06/06

Base: 00010000H Lmite: 00100H Byte de derechos de acceso: F2H = 1(P)|11(DPL)|1(S)|0(E)|0(D)|1(W)|0(A) P:segmento vlido DPL: mnimo nivel de privilegio S: Descriptor de Datos/Cdigo E: Descriptor de datos D: crece W: se puede escribir A: no se ha accedido al segmento 2. Contenido de memoria: BX = [0001000CH] = 982BH 3. Modo de direccionamiento: Base ms ndice Escalado. F- PUSH 102AH 1. Direccin de memoria: BASE+SP = 000AA000H + 0008H = 000AA008H El anlisis del selector y descriptor es el mismo que el realizado para el problema D. 2. Contenido de memoria: [000AA007H] = 10H y [000AA006H] = 2AH SP = SP-2 = 0006H 3. Modo de direccionamiento: De Pila.

Elaborado por: Ing. David Fernndez

35/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

5. Datos manejados por la arquitectura IA-32 Los microprocesadores intel de la familia IA-32 manejan diversos tipo de datos. En base a los tipos bsicos pueden representar otros tipos de datos; esta habilidad depender en gran medida de los lenguajes de programacin utilizados y de la manera como estos interpreten los tipos bsicos de datos. Los datos en los microprocesadores intel se pueden almacenar en forma de enteros, BCD y decimales. Sin importar el tipo, existen unos formatos bsicos utilizados por la familia IA-32 para el almacenamiento de estos datos y son: los Bytes (8 b), las palabras (16 b), las palabras dobles (32 b), las palabras cudruples (64 b) y las palabras cudruples dobles (128 b). Los datos manejados por estos microprocesadores sern almacenado en alguno de estos formatos dependiendo de lo grande o pequeo del dato que se desea representar o del tamao con el que se desea operar. La siguiente figura muestra los tipos fundamentales de datos manejados por esta familia de procesadores.

7 15 31 63
Palabra Doble Alta

0 Byte 0 0 0

Palabra Palabra Alta Baja Palabra Baja

87

Palabra (Word) Palabra doble (Doubleword) Palabra Cudruple (Quadword) Palabra Doble Cudruple (Quadword)

Palabra Alta

16 15

32 31
Palabra Doble Baja

127
Palabra Cudruple Alta

64 63
Palabra Cudruple Baja

Figura 24. Tipos fundamentales de datos de los microprocesadores IA-32


5.1. Organizacin de los datos en la memoria Los datos son almacenados en la memoria semiconductora en los formatos mostrados en la Figura 24. Estos formatos se pueden almacenar en la memoria a partir de cualquier direccin con excepcin de la palabra doble cudruple; las instrucciones que usan este formato de datos requieren que los datos estn alineados en la memoria. La alineacin consisten en el almacenamiento de los datos en direcciones que sean divisibles entre el nmero de bytes que ocupa el dato. En la Figura 25 se puede observar una seccin de memoria conformada por celdas de 8 b, cada celda est asociada a una direccin de memoria. En dicha figura se han identificado varios datos de distintos tamaos, todos alineados en memoria. Los datos identificados se muestran en la Tabla 5.

Tabla 5. Ejemplos de datos de distintos formatos


Tamao Byte Palabra (word) Palabra doble (doubleword) Palabra cudruple (quadword) Palabra doble cudruple (double quadword) Informacin 84 H (cualquier dato tomado de cualquier byte) AACD H 0A11BB2B H 617DE2F13E200184 H AACD00120A11BB2B617DE2F13E200184 H

La organizacin de los datos en la memoria de los microprocesadores intel se realiza colocando en las direcciones ms bajas de memoria los datos menos significativos y en las direcciones ms altas las partes ms significativas de los datos. As pues, en nuestro ejemplo de palabra cudruple el byte menos significativo (84 H) se encuentra en la direccin ms baja de memoria que ocupa dicho dato (20 H) y el byte ms significativo (61 H) se encuentra en la direccin ms significativa (27 H). A este mtodo de almacenamiento se le denomina Little Endian, existen otras arquitecturas de computadoras que almacenan la informacin en el orden inverso; es decir, guardan en la direccin ms baja de memoria la parte ms significativa del dato, a este formato se le denomina Big Endian.

Elaborado por: Ing. David Fernndez

36/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

... AA CD 00 12 0A 11 BB 2B 61 7D E2 F1 3E 20 01 84 ...

Palabra AACD H

2F H 2E H 2D H 2C H 2B H 2A H 29 H 28 H 27 H 26 H 25 H 24 H 23 H 22 H 21 H 20 H

Palabra doble cudruple AACD00120A11BB2B617DE2F13E200184 H

Figura 25. Organizacin de los datos en la memoria


5.2. Datos enteros Los datos enteros se pueden almacenar en binario simple cuando se desea representar los enteros sin signo y en complemento a dos cuando se desea representar enteros con signo. En binarios simple se usa cualquiera de los formatos explicados en la seccin 5 para almacenar un dato. Es evidente que mientras ms grande sea el dato es probable que se requiera un formato ms grande para poder almacenarlo. En la Figura 26 se muestra como se almacena el entero 200 en formato de 1 byte.

Posicin del bit:

Palabra Cudruple 617DE2F13E200184 H

Doble Palabra 0A11BB2B H

7 6 5 4 3 2 1 0

11001000

= 200

Figura 26. Representacin de enteros de 1 byte sin signo


Cuando se representan nmeros enteros en binario simple el valor decimal de dicho nmero se puede obtener mediante la siguiente frmula:

Frmula 1. Calculo del valor decimal de un nmero binario sin signo


Donde BX es el bit en la posicin X. Si ahora se aplica esta frmula para calcular el valor decimal del binario representado en la Figura 26 se obtendr sin duda 200, este clculo se muestra a continuacin.

decimal = BN 2 ... B22 B12 B02

Frmula 2. Ejemplo para calcular el valor decimal de un nmero binario sin signo

decimal =12 12 02 02 12 02 02 02 =200

Observe que la representacin del entero en binario posee sus bits menos significativos hacia la derecha y los bits ms significativos a la izquierda. Esta es la notacin comn utilizada para representar informacin en binario y es la utiliza por intel. Elaborado por: Ing. David Fernndez 37/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Los enteros con signo se almacenan en complemento a dos. Bsicamente, el cambio con respecto a los enteros con signo, est en que el bit ms significativo tiene ponderacin negativa mientras que todos los dems bits de la representacin tienen ponderacin positiva. Esto se puede observar en la siguiente frmula.

Frmula 3. Clculo del valor decimal de un nmero binario con signo (en complemento a dos)

decimal =BN 2 BN 1 2

N1

... B22 B12 B02

Si aplicamos esta misma frmula al ejemplo de la Figura 26 se obtendr el siguiente resultado (por simplicidad se han omitido los elementos con coeficiente igual a cero).

Frmula 4. Ejemplo para calcular el valor decimal de un nmero binario con signo

decimal =12 12 12 =56

Observe como ahora el resultado es negativo. Otra manera de conocer el valor absoluto de un nmero binario con signo, que tenga su bit ms significativo en 1, es sacarle su complemento a dos y aplicar la Frmula 1 al nmero. Existen otras formas para representar nmeros enteros con signo en binario pero no son de inters para este estudio debido a que los microprocesadores intel solamente utilizan las antes referidas. Lo antes dicho aplica tambin para los dems formatos de representacin de nmeros recordando siempre que si los nmeros son sin signo todos los bits tendrn ponderacin positiva (utilizar la Frmula 1), mientras que si los nmeros son con signo todos los bits tendrn ponderacin positiva salvo el ms significativo que tendr ponderacin negativa (utilizar la Frmula 3). 5.2. Datos decimales En los microprocesadores modernos se utiliza la norma IEEE-754 de la IEEE para representar los nmeros decimales. Hoy en da existen tres formatos distintos de esta norma para representar nmeros decimales, el formato punto flotante de precisin simple, el de precisin doble y el de precisin doble extendida. En la Figura 27 se muestran l formato general utilizado por la IEEE-754 para representar los nmeros decimales.

Bit de Signo

Bit J

Exponente Polarizado Significante Figura 27. Formato de representacin de los nmeros punto flotantes
El Bit de signo indica si el nmero es positivo (0) o si es negativo (1) y el bit J existe solamente para el formato de precisin doble extendida (para los otros dos formatos es implcito). El exponente se polariza para representarlo siempre como nmero positivo y el significante representa la parte decimal de un nmero binario con el formato mostrado a continuacin.

Frmula 5. Notacin utiliza por la norma IEEE-754 para representar nmeros decimales normalizada
A continuacin, se presenta el tamao en bits que ocupa cada uno de los formatos utilizados por la norma para representar los nmeros decimales y los valores mximos-mnimos que pueden representarse.

Nmero Decimal IEEE 754 =1.SIGNIFICANTE2

EXPONENTE

Elaborado por: Ing. David Fernndez

38/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Tabla 6. Representaciones de nmeros decimales segn la norma IEEE-754 Formato


Precisin Simple (32 bits) Precisin Doble (64 bits) Precisin Doble Extendida (80 bits)

Signo
1 1 1

Exponente
8 bits 11 bits 15 bits

Bit-J
implcito implcito explcito

Significante
23 bits 52 bits 63 bits 1.1810

Rango
-38

hasta 3.4010 38

2.2310 308 hasta 1.7910 308 3.3710 4932 hasta 1.1810 4932

Para representar un nmero decimal en estas representaciones primero es necesario colocarlos en la notacin cientfica binaria de la Frmula 5 y posteriormente vaciar esta informacin en el formato mostrado en la Figura 27. Hay que recordar que para la precisin simple y la doble no existe el bit-J en el formato antes referido. Tambin es importante destacar que el exponente utilizado en cada caso est polarizado, esto es, se la ha sumado una constante numrica que para el formato de precisin simple es 127 (7FH), para la precisin doble es 1023 (3FFH) y para la precisin doble extendida es 16383 (3FFFH). De inmediato se muestra un ejemplo de conversin de un dato decimal a formato punto flotante de precisin simple. Los nmeros decimales pueden representarse en formato no normalizado; esto sucede solamente cuando se representan nmeros muy pequeos. En la siguiente tabla se muestran las variaciones que pueden ocurrir en el formato IEEE-754 al representar nmeros decimales.

Tabla 7. Formatos de nmeros decimales normalizados y no normalizados


Nmero Bit de Signo Exponente Bit J Positivos + +Normalizados 0 0 11..11 11..10 .. 00..01 +No normalizados 0 00..00 1 1 .. 1 0 Significante Fraccin 00..00 11..11 .. 00..00 11..11 .. 00..01 +Cero Negativos -Cero -No normalizados 0 1 1 00..00 00..00 00..00 .. 00..00 -Normalizados 1 00..01 .. 11..10 - 1 11..11 1 1 0 0 0 00..00 00..00 00..01 .. 11..11 00..00 .. 11..11 00..00

Se desea convertir el nmero en base diez 34.0625 a la representacin punto flotante de precisin sencilla (IEEE-754).

Elaborado por: Ing. David Fernndez

39/59

Arquitectura de Computadores: Electrnica Digital II 1. Convertir la parte entera a binario 34/2=17 R=0 17/2=8 R=1 8/2=4 R=0 4/2=2 R=0 2/2=1 R=0 1/2=0 R=1 => 34 = 100010 2. Convertir la parte decimal a binario 0.0625*2=0.125 00.125*2=0.25 000.25*2=0.5 0000.5*2=1 => 0.0625 = 0.0001

16/06/06

3. Representar en notacin normalizada 34.0625 = 100010.0001 -> normalizando -> 1.000100001x25 Exponente normalizado: 5+7FH=84H (10000100 b) 4. Representacin de punto flotante de precisin simple normalizada: Signo|exponente|significante => 0|10000100|000100001000000000000000 5.3. Datos BCD En los microprocesadores intel se pueden manejar los nmeros BCD de forma directa. Tanto la unidad aritmtico-lgica como la unidad punto flotante soportan operaciones en BCD. El almacenamiento de estos nmeros puede ser en tres formas diferentes, formato desempacado, empacado y empacado en 80 bits. En la Figura 27 se pueden apreciar estos tres formatos.

Figura 28. Formatos de representacin de nmeros BCD


El formato desempacado permite representar un dgito BCD por cada byte. El BCD se almacenar en la parte menos significativa del byte y la parte ms significativa del byte no se utiliza. El formato empacado almacena dos dgitos BCD en un byte. En la parte menos significativo del byte se almacena el dgito BCD menos significativo mientras que en la parte alta del byte se almacena el dgito BCD ms significativo. Cuando se requiera representar un nmero entero de dos dgitos, el dgito menos significativo se almacenar en la parte baja del byte y el dgito ms significativo se almacenar en la parte alta del byte. Por ejemplo si se desea representar el nmero 98 en formato BCD de un byte se almacenar como se muestra en la siguiente figura.

43

43

= 1001 1000

Figura 29. Almacenamiento de un entero de dos dgitos en formato BCD empacado


Por ltimo, es posible representar nmeros enteros de hasta dieciocho (18) dgitos decimales en un formato de 80 b. Este formato incluye el signo del nmero en el bit ms significativo (bit 79).

Elaborado por: Ing. David Fernndez

40/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

6. Direccionamiento de memoria de datos, cdigo y pila La memoria de los microprocesadores intel se direcciona a travs de conjuntos de instrucciones diferentes dependiendo si se desea trabajar con datos generales, datos de pila o programas. Sin importar lo que est almacenado en la memoria (datos, programas o pila) ni el modelo de memoria manejado, al direccionar la memoria se pueden utilizar cualquiera de las combinaciones explicadas en el apartado 4.5.3 para construir la direccin efectiva. En los apartados que siguen se describirn las instrucciones ms comunes utilizadas para direccionar memoria de datos, pila y cdigo, y las combinaciones particulares usadas para construir las direcciones efectivas. 6.1. Direccionamiento de memoria de Datos La instruccin por excelencia utilizada para manejar la memoria de datos es la instruccin MOV DESTINO,FUENTE. Esta instruccin siempre copia un dato de la fuente al destino. Los operandos que se pueden utilizar en esta instruccin tanto para la fuente como para el destino son los Registros, Memoria, Inmediato Entrada/Salida. Existen algunas restricciones para el uso de esta instruccin importantes para poder explicarla, las mismas se enuncian a continuacin:

Lo dos operandos usados deben ser del mismo tamao. Si solamente uno de los operandos tiene tamao definido este ser el que establezca el tamao del dato que ser copiado. Cuando ninguno de los dos operandos provea informacin sobre el tamao del dato copiado, ser necesario utilizar prefijos especiales de ensamblador que especifique el tamao en alguno de los dos operandos. Para transferir bytes se usa byte ptr, para palabras word ptr, para dobles palabras dword prt. Estas directivas de ensamblador se utilizan solamente con operandos de memoria. No se admiten transferencias entre memoria, de manera que los dos operandos no pueden ser de memoria en una misma instruccin MOV. Existen instrucciones especiales para realizar este tipo de transferencia de datos, pero se consideran excepciones. No se pueden realizar copias de datos entre registros segmentos en una misma instruccin. El registro segmento de cdigo CS no puede ser operando destino de ninguna instruccin de transferencia de datos. Este registro solamente puede ser cambiado por las instrucciones especiales para direccionar cdigo (ver explicacin en la seccin 6.2). Los datos inmediatos nunca pueden ser operadores destino.

A continuacin se ejemplifican los diferentes modos de direccionamiento explicados en el apartado 4.5.3, adems se presenta una nueva clasificacin de las direccionamientos de memoria presentada en [3], el lector es libre para escoger la clasificacin que desee usar, la ofrecida por intel (referida en el apartado 4.5.3 la ofrecida aqu por [3]). a. Direccionamiento de registro: transfiere un byte, palabra doble palabra de un registro a otro entre un registro y una localidad de memoria. Ejemplos: MOV DL,CH ;transfiere 1 byte de CH a DL MOV AX,BX ;transfiere 1 palabra de BX a AX MOV ESP,EDI ;transfiere 1 palabra doble de EDI a ESP MOV CS,CX ;no es permitido porque cambia a CS MOV DS,ES ;no es permitida la transferencia entre registros segmento MOV BX,CL ;no es permitida la transferencia entre registros de diferentes tamaos b. Direccionamiento inmediato: transfiere un dato inmediato del tamao de un byte palabra o palabra doble hacia un registro, direccin de memoria o dispositivo de entras/salida. Ejemplos: MOV BH,20 ;transfiere 1 byte (20-decimal) al registro BH MOV CX,12ABH ;transfiere 1 palabra (12ABH-hexadecimal ) al registro CX MOV EDX,0A0000011H ;transfiere 1 palabra doble (A0000011H) al registro EDX MOV BX,'AB' ;transfiere el dato 'BA' al registro BX (BL = 'A' y BH = 'B') MOV DL,11000111b ;transfiere el dato binario 11000111b al registro DL c. Direccionamiento directo: permite transferir datos entre una direccin, de memoria dada por un desplazamiento fijo, y un registro o dato inmediato. Ejemplos: MOV AH,TABLA ;transfiere un byte de la direccin de memoria TABLA (del segmento de datos) ;al registro AH MOV BX,SS:DATO ;transfiere dos bytes de la direccin de memoria DATO (del segmento de pila) ;al registro BX MOV ECX,ARREGLO ;transfiere cuatro bytes de la direccin de memoria ARREGLO (del segmento ;de datos) al registro ECX MOV ES:[1000H],BX ;transfiere dos bytes del registro BX a la direccin de memoria del Elaborado por: Ing. David Fernndez 41/59

Arquitectura de Computadores: Electrnica Digital II segmento MOV BYTE PTR TABLA,20 (del

16/06/06

;de extra con desplazamiento de 1000H ;transfiere el dato decimal 20 de un byte a la direccin de memoria TABLA ;segmento de datos)

d. Direccionamiento indirecto por registro: transfiere datos entre una localidad de memoria y un registro o un dato inmediato. La direccin efectiva de memoria se especifica a travs de un registro. Ejemplos: MOV DH,[AX] ;transfiere un byte de la direccin de memoria del segmento de datos con ;desplazamiento dado por AX al registro DH MOV [BP],CX ;transfiere dos bytes del registro CX a la direccin de memoria del segmento ;de pila con desplazamiento dado por BP. MOV [EBX],EDX ;transfiere cuatro bytes del registro EDX a la direccin de memoria del ;segmento de datos con desplazamiento dado por EBX MOV [BX],[DI] ;no se pueden realizar transferencias de memoria a memoria con la ;instruccin MOV e. Direccionamiento base-ms-ndice: transfiere datos entre una localidad de memoria y un registro o un dato inmediato. La direccin efectiva de memoria se especifica a travs de un registro base y uno ndice. Ejemplos: MOV AX,[BX+DI] ;transfiere dos bytes de la direccin de memoria del segmento de datos con desplazamiento dado por BX+DI hacia el registro AX MOV [BP+SI],CL ;transfiere un byte del registro CL a la direccin de memoria del segmento de pila con desplazamiento dado por BP+SI MOV [ECX+ESI],DH ;transfiere un byte del registro DH a la direccin de memoria del segmento de datos con desplazamiento dado por ECX+ESI Nota: es comn utilizar este modo de direccionamiento para ubicar datos dentro de un arreglo de datos unidimensional en la memoria. Normalmente se interpreta al registro base como la direccin del inicio del arreglo y al registro ndice como la distancia entre el inicio del arreglo y el dato que se desea ubicar dentro del mismo. En el ejemplo que se muestra a continuacin se muestra como, haciendo uso de este modo de direccionamiento, se lee el elemento 17 de un arreglo y se almacena en el elemento 34 (se presume que los elementos del arreglo son todos de un byte)[BREY, pag.85]. ETIQUETAS CDIGO DE OPERANDOS LA OPERACIN .MODEL SMALL .DATA DB 16 DUP (?) DB 29H DB 30 DUP (?) .CODE .STARTUP MOV MOV MOV MOV MOV .EXIT END COMENTARIO

ARREGLO

;se definen un arreglo de 16 bytes (datos)

17

BX,OFFSET ARREGLO DI,10H AL,[BX+DI] DI,20H [BX+DI],AL

;copia la direccin efectiva de ARREGLO en BX ;direcciona al elemento 17 del arreglo ;lee el elemento 17 del arreglo ;direcciona al elemento 34 del arreglo ;guarda en el elemento 34 el valor del elemento

f. Direccionamiento relativo a registro: transfiere datos entre una localidad de memoria y un registro o un dato inmediato. La direccin efectiva de memoria se especifica a travs de un registro base y un desplazamiento fijo. Ejemplos: MOV AH,[SI+10] ;transfiere un byte de la direccin de memoria del segmento de datos con ;desplazamiento dado por SI+10 al registro AH MOV TABLA[AX+4],BP ;transfiere dos bytes del registro BP a la direccin de memoria del segmento ;de datos con desplazamiento dado por TABLA+AX+4

Elaborado por: Ing. David Fernndez

42/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Nota: este modo de direccionamiento puede ser utilizado para acceder a elementos de un arreglo unidimensional de la misma manera como se utiliz el de Base ms ndice con algunas diferencias. La direccin del inicio del arreglo estar dada por un desplazamiento fijo y la direccin del elemento a partir del inicio del arreglo estar especificada por el registro. A continuacin se presenta el mismo ejemplo anterior pero con direccionamiento relativo a registro. Como puede observarse, en este otro ejemplo no es necesario inicializar al registro BX para que apunte al inicio del arreglo de datos y en consecuencia se ahorra una lnea de programacin.

ETIQUETAS

CDIGO DE OPERANDOS LA OPERACIN .MODEL SMALL .DATA DB 16 DUP (?) DB 29H DB 30 DUP (?) .CODE .STARTUP MOV MOV MOV MOV .EXIT END

COMENTARIO

ARREGLO

;se definen un arreglo de 16 bytes (datos)

17

DI,10H AL,ARREGLO[DI] DI,20H ARREGLO[DI],AL

;direcciona al elemento 17 del arreglo ;lee el elemento 17 del arreglo ;direcciona al elemento 34 del arreglo ;guarda en el elemento 34 el valor del elemento

g. Direccionamiento relativo a base-ms-ndice: transfiere datos entre una localidad de memoria y un registro o un dato inmediato. La direccin efectiva de memoria se especifica a travs de un registro base , uno ndice y un desplazamiento fijo. Ejemplos: MOV CX,[BX+SI+30H] ;transfiere dos bytes del segmento de datos con desplazamiento dado por ;BX+SI+30H al registro CX MOV TABLA[EBP+EDI],EBX ;transfiere cuatro bytes del registro EBX al segmento de pila con ;desplazamiento dado por EBP+EDI+TABLA En el siguiente ejemplo se poseen datos almacenados en un archivo en la memoria principal. El archivo se compone por cuatro registros cada uno con 10 datos en formato de bytes cada uno. El este programa se muestra como se transfiere el elemento 0 del Registro A al elemento 2 del registro C utilizando direccionamiento relativo base-ms-ndice (ejemplo tomado de [BREY pag. 89]).

Elaborado por: Ing. David Fernndez

43/59

Arquitectura de Computadores: Electrnica Digital II ETIQUETAS CDIGO DE OPERANDOS LA OPERACIN .MODEL SMALL .DATA EQU THIS BYTE DB DB DB DB .CODE .STARTUP MOV MOV MOV MOV MOV MOV .EXIT END 10 10 10 10 DUP DUP DUP DUP (?) (?) (?) (?) COMENTARIO

16/06/06

ARCHIVO RECA RECB RECC RECD

;define la etiqueta ARCHIVO apuntado al ;mismo byte que la etiqueta RECA ;define 10 datos en formato de bytes para ;define 10 datos en formato de bytes para ;define 10 datos en formato de bytes para ;define 10 datos en formato de bytes para

RECA RECB RECC RECD

BX,OFFSET RECA DI,0 AL,ARCHIVO[BX+DI] BX,OFFSET RECC DI,2 ARCHIVO[BX+DI],AL

;direcciona al arreglo A con BX ;direcciona al elemento 0 del arreglo A con DI ;guarda en AL el elemento 0 del arreglo A ;direcciona al arreglo B con BX ;direcciona al elemento 2 del arreglo B con DI ;copia el valor de AL en el elemento 2 de arreglo

h. Direccionamiento de ndice escalado: transfiere datos entre una localidad de memoria y un registro o un dato inmediato. La direccin efectiva de memoria se especifica a travs de un registro ndice multiplicado por un factor de escala (1-2-4-8) y posiblemente con un registro base y un desplazamiento fijo. Ejemplos: MOV ECX,[EDX+4*EBX] ;transfiere cuatro bytes del segmento de datos con desplazamiento dado por ;EDX+4*EBX al registro ECX MOV ARREGLO[8*ECX],AH ;transfiere un byte del registro AH al segmento de datos con desplazamiento ;dato por ARREGLO + 8*ECX En el ejemplo que se muestra a continuacin se presentan una serie de instrucciones que trabajan con direccionamiento de ndice escalado. En el mismo, se puede observar como se copia un dato en formato de byte ubicado en la tercera posicin del arreglo LISTA a los datos en las posiciones 4 y 8. ETIQUETAS CDIGO DE OPERANDOS LA OPERACIN .MODEL SMALL .DATA DW 0,1,2,3,4 DW 5,6,7,8,9 .CODE .STARTUP MOV MOV MOV MOV MOV MOV MOV .EXIT END COMENTARIO

LISTA

;define un arreglo de 10 elementos de palabras

EBX,OFFSET LISTA ECX,2 AX,[EBX+2*ECX] ECX,4 [EBX+2*ECX],AX EXC,7 [EBX+2*ECX],AX

;direcciona al arreglo LISTA con EBX ;direcciona al elemento 3 del arreglo LISTA ;copia el elemento 3 del arreglo al registro AX ;direcciona al elemento 5 del arreglo LISTA ;copia el contenido de AX al elemento 5 de LISTA ;direcciona al elemento 5 del arreglo LISTA ;copia el contenido de AX al elemento 5 de LISTA

6.2. Direccionamiento de memoria de Programa Elaborado por: Ing. David Fernndez 44/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

La memoria de cdigo solamente puede direccionarse mediante instrucciones de control de flujo de programas como son los saltos (condicionales e incondicionales) y las instrucciones cclicas. En este apartado solamente se tratarn las instrucciones de saltos incondicionales para ilustrar los tipos de direccionamiento que se pueden emplear. a. Direccionamiento directo de memoria: las instrucciones que direccionan la memoria de programa a travs de este modo incorporan en la instruccin una direccin lineal completa (inicio del segmento y el desplazamiento la base y el desplazamiento). Estos salto se denominan saltos lejanos o intersegmento debido a que se cambia el valor del registro segmento y en consecuencia cambia el segmento al que se direcciona. A continuacin, se muestra un ejemplo donde se observa como se almacena la direccin lgica junto a la instruccin de salto.
Cdigo de Desplazamiento Desplazamiento Segmento Segmento la operacin Bajo Alto Bajo Alto

JMP [4A200H]

EA 1A000 1A001 1A002 1A003 1A004

00 EA 00 02 00 4A

02

00

4A

Figura 30. Estructura de un salto directo o lejano

b. Direccionamiento relativo de memoria: en este modo se almacena junto a la instruccin de salto un valor igual al desplazamiento con respecto al registro apuntador de instrucciones (IP EIP). El valor sumado al registro apuntador de instruccin puede ser de 1 byte (a lo que se denomina salto corto) de 2 4 bytes (a lo que se denomina salto cercano). Estos valores de desplazamientos se le suman al registro EIP, por esto se denomina a este modo relativo. A continuacin, se muestra un ejemplo en el que se puede ver como se almacena el valor de desplazamiento junto a la instruccin de salto.

A0000 A0001 A0002 A0003 A0004

EB 02 -------

JMP [2]

Figura 31. Estructura de un salto relativo


c. Direccionamiento indirecto de memoria: en este modo la direccin de salto viene dada por un registro y la misma sustituye al valor actual del registro apuntador de instruccin (IP EIP). Ejemplos: JMP EDX ;salta a la direccin del segmento de cdigo dada por EDX (copia a EDX en EIP) JMP BX ;salta a la direccin del segmento de cdigo dada por BX (copia a BX en IP) JMP NEAR PTR[ECX] ;salta a la direccin del segmento de cdigo almacenada en el segmento de ;datos con desplazamiento dado por ECX JMP TABLA[CX] de JMP [BX+2] de ;salta a la direccin del segmento de cdigo almacenada en el segmento ;datos con desplazamiento dado por CX ms TABLA ;salta a la direccin del segmento de cdigo almacenada en el segmento ;datos con desplazamiento dado por BX ms 2

En el siguiente ejemplo se muestra un salto indirecto que busca la direccin de salto (que ser almacena en el registro IP) en una tabla de direcciones de salto almacenada en el segmento de datos.

Elaborado por: Ing. David Fernndez

45/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

ETIQUETAS

CDIGO DE OPERANDOS LA OPERACIN .MODEL SMALL .DATA DW UBICACION0 DW DW DW .CODE .STARTUP ... MOV JMP ... .EXIT END UBICACION1 UBICACION2 UBICACION3

COMENTARIO

TABLA

;almacena ;etiqueta ;IDEM con ;IDEM con ;IDEM con

la direccin de salto dada por la UBICACION0 del segmento de cdigo UBICACION1 UBICACION2 UBICACION3

BX,4 TABLA[BX]

6.3. Direccionamiento de memoria de Pila El segmento de pila se direcciona mediante instrucciones especiales (PUSH y POP) cuando se direccionen datos utilizando como base el registro EBP el registro ESP. Normalmente se hace uso de las instrucciones PUSH y POP para el manejo de este segmento. El segmento de pila almacena la informacin en forma de una pila LIFO (Last In First Out, ltimo en entrar primero en salir) y crece en forma descendente. A pesar de este comportamiento particular, el segmento de pila almacena la informacin utilizando la convencin little-endian como sucede con los dems segmentos. Al inicializar el segmento de pila el registro segmento de pila (SS) apunta al inicio del segmento de pila y el registro apuntador de pila (SP ESP) siempre apunta al tope de la pila. Para la inicializacin el tope de la pila es el mismo inicio del segmento de pila. Cada vez que se introduce un dato en la pila este se almacena en el tope de la pila, es decir, se almacena despus de la direccin indicada por el registro SP; finalmente el registro SP se decrementa para apuntar a este nuevo dato introducido. Cuando se extrae un dato de la pila, siempre se extrae el ltimo dato introducido, es decir, el apuntado por el registro SP. Despus de extraer el dato se incrementa el registro SP para que apunte al dato anterior al que se extrajo que ahora est en el tope de la pila. Estas operaciones se explicarn mejor ms adelante en este apartado. En la Figura 32 se muestra un segmento de pila en el que se muestran tres datos de tamao de palabra cada uno almacenado en el segmento de pila. En esta figura se observa como inicialmente SP apunta al inicio del segmento, pero cuando se introduce el primer dato en la pila este se coloca en el tope del segmento de pila (que crece de forma descendente) y luego se decrementa el valor de SP en el nmero de bytes que se introdujo en el segmento de pila. Este mismo procedimiento se repite dos veces ms para introducir dos datos adicionales de un registro y del segmento de datos. Posteriormente, se extraen datos del segmento de pila y se almacenan en dos registros. Observe que el primer dato se extrae como palabra doble y el segundo como palabra simple.

Elaborado por: Ing. David Fernndez

46/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

...
SP' SP'' SP''' 10 AB 22 11 34 5B

PUSH 10ABH PUSH BX PUSH [AX] POP EAX POP CX

;Suponiendo que BX = 2211H ;Suponiendo que DS:[AX] = 345BH ;EAX = 2211345BH y SPIV = SP' ;CX = 10ABH y SPV = SP

...

SS

...

SP

Figura 32. Manejo de la memoria de pila


La instruccin PUSH permite almacenar datos (de 8, 16 32 bits) en el tope del segmento de pila y se puede utilizar de las siguientes maneras. PUSH registro ;almacena un registro en el segmento de pila PUSH memoria ;almacena un dato del segmento de datos en la pila PUSH dato_inmediato ;almacena un dato inmediato en la pila PUSHF ;almacena el registro bandera en la pila PUSHFD ;almacena el registro bandera extendido en la pila PUSHA ;almacena los registro AX, CX, DX, BX, SP, BP, DI Y SI en la pila PUSHAD ;almacena los registro EAX, ECX, EDX, EBX, ESP, EBP, EDI Y ESI en la pila Procedimiento utilizado por PUSH para almacenar datos en la pila Para 8-bits El nuevo dato se almacena en SS:[SP-1] y posterior se decrementa a SP en 1. Para 16-bits La parte alta del dato se almacena en SS:[SP-1] y la parte baja se almacena en SS:[SP-2] y posterior se decrementa a SP en 2. Para 32-bits La parte alta del dato se almacena en SS:[SP-1], el siguiente byte en SS:[SP-2], el siguiente en SS:[SP-3] y la parte baja se almacena en SS:[SP-4] y posterior se decrementa a SP en 4. Ejemplos: PUSH ES PUSH BX PUSH EBX PUSH WORD PTR[CX] datos ;almacena ;almacena ;almacena ;almacena una palabra en el tope de la pila tomada de ES en el tope de la pila una palabra tomada de BX en el tope de la pila una palabra doble tomada de EBX en el tope de la pila una palabra tomada del segmento de

;con desplazamiento dado por CX

La instruccin POP permite sacar datos (de 16 32 bits) del tope de la pila y se puede utilizar de las siguientes formas. POP registro ;extrae un registro del segmento de pila POP memoria ;extrae un dato de la pila y lo almacena en el segmento de datos POP dato_inmediato ;extrae un dato inmediato de la pila POPF ;extrae el registro bandera de la pila POPFD ;extrae el registro bandera extendido de la pila POPA ;extrae los registro SI, DI, BP, SP, BX, DX, CX y AX de la pila POPAD ;extrae los registro ESI, EDI, EBP, ESP, EBX, EDX, ECX y EAX de la pila Procedimiento utilizado por POP para recuperar datos de la pila Para 8-bits El dato se extrae del tope de la pila de SS:[SP] y posterior se incrementa a SP en 1. Para 16-bits La parte baja del dato se extrae de SS:[SP] y la parte alta se extrae de SS:[SP+1] y posterior se incrementa a SP en 2. Para 32-bits La parte baja del dato se extrae de SS:[SP], el siguiente byte de SS:[SP+1], el siguiente en SS:[SP+2] y la parte alta se extrae de SS:[SP+3] y posterior se incrementa a SP en 4.

Elaborado por: Ing. David Fernndez

47/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Ejemplos:

POP EAX POP CS POP DS

;extrae una palabra doble de la pila y la almacena en EAX ;operacin invlida ;copia una palabra de la pila al registro DS

Observacin: cuando se utiliza la instruccin MOV para copiar datos a o desde el segmento de pila se maneja el segmento igual que el de datos.

Elaborado por: Ing. David Fernndez

48/59

Arquitectura de Computadores: Electrnica Digital II 8. Conjunto de Instrucciones de la familia IA-32

16/06/06

8.1. Formato de las instrucciones de la familia de microprocesadores IA-32 Los microprocesadores Intel tiene el formato de instrucciones estndar como se muestra en la XXX con campos que pueden aparecer o no dependiendo principalmente de la instruccin empleada, los operandos y el modo de direccionamiento utilizado.

Figura 33. Formato de instrucciones en la arquitectura IA-32


a. Prefijos: el campo de prefijos puede contener hasta cuatro (4) prefijos de 1 byte cada uno. Los prefijos son de cuatro tipos, prefijos del grupo 1, grupo 2, grupo 3 y grupo 4. Grupo 1: son prefijos para repetir las instrucciones o bloquear recursos de memoria que puedan ser compartidos. F0H: prefijo de bloqueo. F2H: aparece cuando se utilizan las instrucciones REPNE/REPNZ empleadas nicamente con instrucciones de cadena e instrucciones SIMD. F3H: aparece cuando se utilizan las instrucciones REP REPE/REPEZ empleadas nicamente con instrucciones de cadena e instrucciones SIMD. Grupo 2: son prefijos utilizados cuando se cambia el segmento por defecto utilizado, tambin se usan como pistas para la toma de decisiones entre ramas. Prefijos para la sobrecarga de registros segmento. 2EH: sobrecarga para el uso de CS. 36H: sobrecarga para el uso de SS. 3EH: sobrecarga para el uso de DS. 26H: sobrecarga para el uso de ES. 64H: sobrecarga para el uso de FS. 65H: sobrecarga para el uso de GS. Prefijos para las pistas de ramificaciones. 2EH: la ramificacin no se toma. 3EH: la ramificacin si se toma Grupo 3: prefijo 66H para el cambio de tamao de los operadores de 16 a 32 bits o viceversa. Grupo 4: prefijo 67H para el cambio de tamao de las direcciones de 16 a 32 bits o viceversa. b. Campo Opcode: es el cdigo de la instruccin que se representa, ocupan 1, 2 4 bytes y en ocasiones existe un cdigo adicional de tres bits ubicado dentro del campo ModR/M. Algunas veces, en estos bytes se incluyen bits que definen la direccin del flujo de la informacin, el tamao de los desplazamientos, codificacin de registros, condiciones de cdigo o seales de extensin de signo de operandos. Entre los bits ms utilizados en el primer byte del cdigo de operacin estn los de direccin de flujo de la informacin (d) y el del tamao de los operandos (w). Estos bits influyen sobre los operandos del byte ModR/M y su efecto se explica a continuacin: d = 0, los datos van del campo Reg al campo R/M del byte ModR/M d = 1, los datos van del campo R/M al campo Reg del byte ModR/M w = 0, los operandos son de 8 bits w = 1, los operandos son de 16 bits de 32 bits En la XXX se muestra la estructura del primer byte del cdigo de operacin en la que se pueden ver las posiciones de los bits d y w.

Elaborado por: Ing. David Fernndez

49/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

c. Campo ModR/M y SIB: cada uno de estos dos campos ocupan 1 byte, y sirven para indicar los tipos de operandos de direcciones (modos de direccionamiento) y registros usados. El byte ModR/M tiene tres campos internos, el campo de mod, el campo de Reg/Opcode y el campo de R/M . El campo mod combinado con el campo R/M establece 32 diferentes modos de direccionamiento posibles a utilizar; 8 de estos modos son para registros y los 24 restantes para direccionamiento de memoria. Si mod = 00b entonces no hay campo de desplazamiento fijo. Si mod = 01b existe el campo de desplazamiento fijo y tiene tamao de 1 byte. Si mod = 10b existe el campo de desplazamiento fijo y tiene tamao de 2 byte (16 bits). Si mod = 11b existe el campo de desplazamiento fijo y tiene tamao de 4 byte (32 bits). El campo Reg/Opcode indica un nmero de registro sus tres bits se interpretan como informacin del cdigo de la operacin (instruccin) que se est ejecutando. El campo R/M establece un nmero de registro se un modo de direccionamiento de memoria dependiendo del valor que tenga el campo mod de este mismo byte. El byte SIB se utiliza en ciertos modos de direccionamiento, en particular en aquellos que utilizan las combinaciones de base-ms-ndice e ndice escalado para la construccin de la direccin efectiva en modos de compatibilidad de 32 bits. Este byte tambin esta compuestos por tres campos internos, el campo de scale, el campo index y el campo base. El campo scale indica el factor de escala por el cual se multiplicar el registro especificado en el campo index. Los valores que puede asumir son 00 para multiplicador 1, 01 para multiplicador de 2, 10 para multiplicador de 4 y 11 para multiplicador de 8. El campo index especifica el nmero del registro ndice que se utilizar. El campo base especifica el nmero del registro base que se utilizar. d. Campos de Desplazamiento y dato Inmediato: estos campos aparecern en la instruccin codificada nicamente si la instruccin en cuestin posee un desplazamiento fijo y/o un dato inmediato. De aparecen un desplazamiento fijo este puede ser de 8 bits, 16 bits o 32 bits y aparecer inmediatamente despus del campo ModR/M. Si la instruccin posee un dato inmediato, este aparecer despus de campo de Desplazamiento fijo del campo ModR/M (si no existe el campo de Desplazamiento) y puede tener una tamao de 8 bits, 16 bits o 32 bits. 8.2. Instrucciones de transferencia de datos a. Carga de direcciones efectivas LEA LDS, LSS, LES, LFS y LGS b. Transferencia de cadenas Generalidades LODS STOS MOVS INS OUTS c. Otras varias: entre las instrucciones de transferencia existen algunas menos utilizadas pero que puede resultar tiles dependiendo de los problemas que se estn resolviendo. De inmediato se describen algunas de estas instrucciones. IN/OUT: son instrucciones utilizadas para la transferencia de informacin entre el registro acumulador y un dispositivo de entrada/salida (E/S) dado por un valor fijo (a lo que llamaremos de ahora en adelante p8-puerto de 8 bits) por un valor variable almacenado en el registro DX ( puerto variable de 16 bits). La instruccin IN copia un dato de 1, 2 4 bytes desde un dispositivo de entrada hasta el registro acumulador (AL, AX EAX), mientras que la instruccin OUT copia 1, 2 4 bytes desde el registro acumulador hasta el dispositivo de salida especificado. Ejemplos: IN AL,34H ;copia un byte desde el puerto p8=34H al registro AL IN AX,DX ;copia dos bytes del puerto variable dado por DX al registro AX IN EAX,9BH ;copia cuatro bytes del puerto p8=9BH al registro EAX OUT DX,AL ;copia un byte del registro AL al puerto variable dado por DX OUT 45H,AX ;copia dos bytes del registro AX al puerto p8=45H OUT DX,EAX ;copia cuatro bytes del registro EAX al puerto variable dado por DX MOVSX y MOVZX: estas instrucciones transfieren datos de 8 16 bits de memoria o registro a datos del doble del tamao (16 32 bits respectivamente) en un registro. Esto es, el destino siempre debe ser un registro de 16 32 bits. MOVSX realizada esta transferencia extendiendo rellenando con el bit de signo (el bit ms significativo) hasta alcanzar el tamao deseado, mientras que MOVZX rellena con ceros hasta obtener el tamao deseado. Ejemplos: MOVSX DX,CL ;copia el contenido de CL a la parte baja de DX y rellena los bits ms ;significativos de DX con el bit de signo de CL (bit 7) Elaborado por: Ing. David Fernndez 50/59

Arquitectura de Computadores: Electrnica Digital II MOVSX EBP,TABLA MOVZX AX,BH MOVZX EDX,SP

16/06/06

;copia dos bytes a partir de la etiqueta de memoria TABLA en la parte baja ;de EBP y rellena los bits ms significativos de EBP con el bit de signo de ;dicho dato (el bit 7 de TABLA[1]) ;copia un byte del registro BH a la parte baja del registro AX y rellena con ;ceros los bits ms significativos de AX ;copia dos bytes de SP a la parte baja de EDX y el resto de los bits de EDX ;los rellena con 0

XCHG: esta instruccin intercambia los datos contenidos en los dos operandos que utiliza. Los datos intercambiados pueden ser de uno, dos o cuatro bytes. Adicionalmente, nunca se pueden intercambiar datos de diferentes tamaos, ni de un registro segmento a otro, ni de una localidad de memoria a otra. Ejemplos: XCHG DEST,DEST ;forma de uso XCHG AL,CH ;intercambia los contenidos de AL y CH (un byte) XCHG BX,[1234H] ;intercambia los contenidos de BX y la direccin de memoria del ;segmento de datos con desplazamiento de 1234H (dos bytes) XCHG TABLA,ECX ;intercambia los cuatro bytes de ECX con cuatro bytes ;almacenados a partir de la etiqueta de memoria TABLA XLAT: suma el valor del registro AL con el del registro BX EBX y guarda el dato de un byte ubicado en DS:[BX+AL] en el registro AL. Esta instruccin es la nica que suma un registro de 8 bits con uno de 16 32 bits. Se utiliza escribiendo XLATB XLAT y una direccin de memoria definida por bytes. BSWAP: esta instruccin invierte el orden de los bytes en un registro de 32 bits. El byte 0 lo intercambia con el 3 y el bye 1 los intercambia con el 2. Esta instruccin es til para cambiar el formato de almacenamiento de datos de little endian a big endian cuando se desee comunicar informacin entre microprocesadores de arquitecturas diferentes. Ejemplo: BSWAP EAX ;suponiendo que EAX = 12345678H antes de la instruccin, el nuevo valor de EAX ;ser EAX' = 78563412H CMOV: instruccin de transferencia condicional de datos desde un registro localidad de memoria fuente de 16 32 bits a un registro destino de 16 32 bits. Siempre se acompaa de una o dos letras adicionales que establecen que condicin se realizar y si al ejecutarse la condicin es verdadera entonces se transfiere la informacin de lo contrario no ocurre nada y se ejecuta la prxima instruccin. Las letras A (Above-sobre), AE (Above or Equal-sobre o igual), B (Bellow-por debajo) BE (Bellow or Equal-por debajo o igual) se utilizan cuando se realizan comparaciones entre nmeros sin signo. Las letras L (), LE (), G () GE () se utilizan cuando se realizan comparaciones entre nmeros con signo. Finalmente, las letras C NC (aCarreo CF=1, No aCarreo CF=0), O NO (sObreflujo OF=1, No sObreflujo OF=0), P NP (Paridad PF=1, No Paridad PF=0), S NS (Signo SF=1, No Signo SF=0), Z NZ (Cero ZF=1, No Cero ZF=0) y E NE (Igual Z=1, No Igual ZF=0) se utilizan cuando la condicin evala los bits bandera. Existen otras variaciones que no se mencionan pero pueden consultar en [VOL-2,Intel IA-32]***. Ejemplos: CMOVA BX,CX ;transfiere el valor del registro CX al registro BX si CF=0 y ZF=0 CMOVNS EDX,TABLA ;transfiere el valor de memoria de 4 bytes dado por TABLA a EDX si SF=0 CBW CWDE CDQE 8.3. Instrucciones aritmticas y lgicas Son instrucciones que como bien lo indica su nombre sirven para realizar operaciones aritmtico-lgicas y tienen la particularidad de que siempre afectan algunos de los bits del registro bandera. La mayora de estas instrucciones poseen un operando fuente y un operando destino, como se explic para las instrucciones de transferencia de datos, y adems utilizan las distintos modos de direccionamiento de memoria de datos ya explicados. Cabe destacar que, tambin estn sujetas a las mismas limitaciones que las instrucciones de transferencia de datos en lo referente a los tipos de operandos que se pueden utilizan. En adicin, ninguna de las instrucciones aritmtico-lgicas trabaja con registros segmentos. Entre las instrucciones aritmticas estas las de suma (ADD, ADC y INC), las de resta (SUB, SBB y DEC), las de multiplicacin (MUL e IMUL) y las de divisin (DIV e IDIV). Mientras que entre las operaciones lgicas se encuentran las conjuncin (AND), el or inclusivo (OR), el or exclusivo (XOR) y la negacin lgica (NOT) y aritmtica (NEG). A continuacin se explican cada una de estas instrucciones. a. Instrucciones de Suma ADD: suma el operando fuente con el destino y almacena la suma en el operando destino. Tanto el operando fuente como el destino pueden ser de tipo registro memoria (los dos no pueden ser memoria a la vez), pero slo el operando fuente puede ser dato inmediato. La suma se puede realizar en operandos de 8, 16 y 32 bits. Ejemplos: ADD Op. Destino,Op. Fuente Elaborado por: Ing. David Fernndez 51/59

Arquitectura de Computadores: Electrnica Digital II ADD ADD ADD ADD AL,BH CX,DATO DATO[4],EDX BP,54H ;almacena ;almacena ;almacena ;almacena el AL = AL+BH en CX = CX+DS:DATO en la memoria DS:DATO[4] = EDX+DS:DATO[4] en BP = BP + 54H

16/06/06

ADC: suma el valor de operando fuente con el valor del operando destino y el valor del bit bandera de acarreo (CF) y el resultado lo almacena en el operando destino. Posee las mismas restricciones que la operacin ADD. Se utiliza cuando se desea suma dos nmeros que no caben en los operandos disponibles (normalmente los registros) para tomar en cuenta el acarreo que se produce entre los registros que contiene los valores a sumar. Ejemplos: imagine que se desea sumar el valor 1111F000H con el valor 22221111H y solamente dispone de registros de 16 bits. La seccin de cdigo que se coloca a continuacin realiza esta operacin. MOV AX,0F000H MOV BX,1111H MOV CX,1111H MOV DX,2222H ADD AX,CX ADC BX,DX ;almacena la parte baja del primer dato ;almacena la parte alta del primer dato ;almacena la parte baja del segundo dato ;almacena la parte alta del segundo dato ;suma la parte baja del primero y segundo dato y lo almacena en AX ;suma la parte alta del primero y segundo dato y lo almacena en BX ;el resultado de la suma se almacenada en los registros BX-AX

Observe como el primer dato se almacena en los registros BX-AX (la parte alta en BX y la parte baja en AX) y como se almacena el segundo dato en los registros DX-CX. Posteriormente para sumar los dos valores, se suman las partes menos significativas de cada nmero (en este caso las contenidas en AX y CX) y el acarreo se almacena automticamente en el CF. Por ltimo, se suman las partes ms significativas de estos dos nmeros (contenidos en BX y DX respectivamente) ms el bit CF para tomar en cuenta cualquier acarreo que pueda haber ocurrido. INC: esta operacin incrementa el valor del operando destino en 1. Esta instruccin posee un nico operando que puede ser memoria o registro, nunca dato inmediato. Ejemplos: INC BH ;almacena en BH = BH + 1 INC AX ;almacena en AX = AX + 1 INC DWORD PTR DATO1 ;almacena en DS:DATO1 = DS:DATO1 + 1 b. Instrucciones de Resta SUB: resta el operando fuente del operando destino y almacena la diferencia en el operando destino. Aplican los mismos modos de direccionamientos que para las instrucciones de suma. Todas las instrucciones de resta modifican los mismos bits bandera que modifican las instrucciones de suma. Ejemplos: SUB OP. DEST,OP. FUENTE ;copia en OP. FUENTE = OP. DESTINO - OP. FUENTE SUB CH,8 ;almacena en CH = CH - 8 SUB DX,BX ;almacena en DX = DX - BX SUB DATO1,ECX ;almacena en DS:DATO1 = DS:DATO1 - ECX SBB: realiza la operacin de resta con prstamo. Resta el operando fuente y el bit bandera de acarreo (CF) del operando destino. El resultado se almacena en el operando destino. Esta instruccin es til cuando se realicen restas de nmeros ms grandes que los operandos disponibles para tomar en cuenta prestamos al realizar la resta. Ejemplos: imagine que se desea retar el valor ABCD0000H con el valor 11111000H y solamente dispone de registros de 16 bits. La seccin de cdigo que se coloca a continuacin realiza esta operacin. MOV AX,0000H MOV BX,0ABCDH MOV CX,1000H MOV DX,1111H SUB AX,CX SBB BX,DX ;almacena la parte baja del primer dato ;almacena la parte alta del primer dato ;almacena la parte baja del segundo dato ;almacena la parte alta del segundo dato ;suma la parte baja del primero y segundo dato y lo almacena en AX ;suma la parte alta del primero y segundo dato y lo almacena en BX ;el resultado de la suma se almacenada en los registros BX-AX

Observe como el primer dato se almacena en los registros BX-AX (la parte alta en BX y la parte baja en AX) y como se almacena el segundo dato en los registros DX-CX. Posteriormente para restar los dos valores, se restan las partes menos significativas de cada nmero (en este caso las contenidas en AX y CX) y el prstamo se almacena automticamente en el CF. Por ltimo, se restan las partes ms significativas de estos dos nmeros (contenidos en BX y DX respectivamente) ms el bit CF para tomar en cuenta cualquier prstamo que pueda haber ocurrido. DEC: esta operacin decrementa el valor del operando destino en 1. Esta instruccin posee un nico operando que puede ser memoria o registro, nunca dato inmediato. Ejemplos: DEC CL ;almacena en CL = CL -1

Elaborado por: Ing. David Fernndez

52/59

Arquitectura de Computadores: Electrnica Digital II DEC DX DEC DWORD PTR TABLA ;almacena en DX = DX -1 ;almacena en DS:TABLA = DS:TABLA - 1

16/06/06

CMP: esta instruccin resta el operando fuente del operando destino y no almacena la diferencia en ningn lugar, pero cambia el valor de los bits bandera para reflejar el estado actual de la operacin. Al igual que la resta, la comparacin se puede realizar sobre datos de tamao de 8, 16 32 bits. Se utiliza normalmente antes de un salto condicional para establecer los bits bandera que evaluar la instruccin de salto. Ejemplos: CMP CH,[DX] ;resta CH - DS:[DX] y modifica los bits bandera CMP TABLA[BX],AX ;resta DS:TABLA[BX] - AX y modifica los bits bandera CMP ECX,203476ABH ;resta ECX - 203476ABH y modifica los bits bandera c. Instrucciones de Multiplicacin Existen dos instrucciones para la multiplicacin MUL (para enteros positivos) e IMUL (para enteros con signo). Estas instrucciones multiplican operandos de 8, 16 y 32 bits para obtener siempre un producto del doble del tamao (esto es, de 16, 32 y 64 bits respectivamente). Las instrucciones de multiplicacin utilizan dos operandos, como operando fuente utilizan siempre al registro acumulador y como operando destino utilizan cualquier otro registro de propsito general o una dato en memoria. Las instrucciones de multiplicacin modifican de forma predecible los bits bandera CF y OF, y de forma impredecible los bits bandera SF, PF, ZF y AF. A continuacin se describen las operaciones de multiplicacin para cada uno de los tamaos posibles. -Multiplicacin de 8 bits: multiplica al registro AL con otro registro de 8 bits o una localidad de memoria de 8 bits. El producto de 16 bits se almacena en AX. Se modifican los bits bandera CF y OF para indicar si el resultado es de 8 16 bits. Si los bits bandera CF y OF valen cero (0) es porque el producto es de 8 bits (con cero en los bits ms significativos de AX) y si CF y OF valen 1 es porque el producto es de 16 bits. Ejemplos: MUL BH ;se almacena en AX = AL * BH MUL BYTE PTR[CX] ;se almacena en AX = AL * DS:[CX] IMUL DL ;se almacena en AX = AL * DL -Multiplicacin de 16 bits: multiplica al registro AX con otro registro de 16 bits o una localidad de memoria de 16 bits. El producto de 32 bits se almacena en los registros DX-AX (la parte baja en AX y la parte alta en DX). Se modifican los bits bandera CF y OF para indicar si el resultado es de 16 32 bits. Si los bits bandera CF y OF valen cero (0) es porque el producto es de 16 bits (con cero en los bits ms significativos de AX) y si CF y OF valen 1 es porque el producto es de 32 bits. Ejemplos: MUL BX ;se almacena en DX-AX = AX * BX IMUL WORD PTR DATO[CX] ;se almacena en DX-AX = AX * DS:DATO[CX] MUL BP ;se almacena en DX-AX = AX * BP -Multiplicacin de 32 bits: multiplica al registro EAX con otro registro de 32 bits o una localidad de memoria de 32 bits. El producto de 64 bits se almacena en los registros EDX-EAX (la parte baja en EAX y la parte alta en EDX). Se modifican los bits bandera CF y OF para indicar si el resultado es de 32 64 bits. Si los bits bandera CF y OF valen cero (0) es porque el producto es de 32 bits (con cero en los bits ms significativos de AX) y si CF y OF valen 1 es porque el producto es de 64 bits. Ejemplos: MUL ESP ;se almacena en EDX-EAX = EAX * ESP IMUL DWORD PTR [EBP] ;se almacena en EDX-EAX = EAX * SS:[EBP] MUL EDI ;se almacena en EDX-EAX = EAX * EDI d. Instrucciones de Divisin Existen dos instrucciones para la divisin DIV (para enteros positivos) e IDIV (para enteros con signo). Estas instrucciones realizan divisiones de 8, 16 y 32 bits. Utilizan dos operandos, como operando destino utilizan siempre al registro acumulador y al registro EDX, y como operando destino utilizan cualquier otro registro de propsito general o una dato en memoria. Las instrucciones de divisin modifican de forma impredecible los bits bandera SF, PF, ZF, AF, CF y OF. A continuacin se describen las operaciones de divisin para cada uno de los tamaos posibles. -Divisin de 8 bits: divide al registro AX con otro registro de 8 bits o una localidad de memoria de 8 bits. El cociente de 8 bits se almacena en AL y el residuo en AH. Ejemplos: DIV CL ;se almacena en AL el cociente de AX/CL y en AH al residuo IDIV BYTE PTR DATO ;se almacena en AL el cociente de AX/DS:DATO y en AH el residuo DIV DL ;se almacena en AL el cociente de AX/DL y en AH el residuo - Divisin de 16 bits: divide el dato en los registros DX-AX con otro registro de 16 bits o una localidad de memoria de 16 bits. El cociente de 16 bits se almacena en el registro AX y el residuo en el registro DX. Ejemplos: IDIV BP ;se almacena en AX el cociente de DX-AX/BP y en DX el residuo DIV WORD PTR TON ;se almacena en AX el cociente de DX-AX/DS:TON y en DX el residuo

Elaborado por: Ing. David Fernndez

53/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

DIV DI ;se almacena en AX el cociente de DX-AX/DI y en DX el residuo -Divisin de 32 bits: divide el dato en los registros EDX-EAX con otro registro de 32 bits o una localidad de memoria de 32 bits. El cociente de 32 bits se almacena en el registro EAX y el residuo en EDX. Ejemplos: IDIV ECX ;se almacena en EAX el cociente de EDX-EAX/ECX y el residuo en EDX IDIV DWORD PTR [ESP] ;se almacena en EAX el cociente de EDX-EAX/SS:[ESP] y el residuo en EDX DIV EDX ;se almacena en EAX el cociente de EDX-EAX/EDX y el residuo en EDX e. Instrucciones Lgicas Son instrucciones que realizan operaciones lgicas sobre datos de tamao de bytes, palabras palabras dobles. Los operandos destino de estas instrucciones pueden ser registros o direcciones de memoria, en adicin, los operandos fuente pueden ser datos inmediatos. A continuacin se describen estas instrucciones. AND: realiza la funcin lgica AND a nivel de bits entre el operando fuente y el operando destino, y almacena el resultado en el operando destino. Los bits bandera OF y CF se limpian y los bis PF, SF, ZF se modifican para reflejar el resultado (el bit bandera AF se modifica pero de forma impredecible). Ejemplos: AND CH,BL ;realiza el AND entre los bits de CH y BL, y almacena el resultado en CH AND DX,SP ;realiza el AND entre los bits de DX y SP, y almacena el resultado en DX AND EAX,0FF00FF00H ;realiza el AND entre EAX y el dato inmediato mostrado, y almacenada ;el resultado en EAX La instruccin AND permite hacer enmascaramientos sobre los bits de un dato particular. El enmascaramiento mediante la instruccin AND consiste en hacer ceros los bits del dato original o dejarlos intactos. El programador deber construir un patrn de bits con ceros y unos para denominado Mscara para lograr el efecto que deseado. El patrn tendr bits con valor 1 cuando se desee dejar intactos los bits (en las posiciones de los 1's) y colocar bits con valor 0 cuando desee borrar los bits (en las posiciones de los 0's) en el dato original. De inmediato se muestra un ejemplo que ilustra el uso del enmascaramiento de un dato contenido en el registro AL de manera tal que solamente se preserve los 4 bits menos significativos del dato original y los cuatro bits ms significativos se borren. Ejemplo: MOV AL,DATO ;copia un valor de 8 bits de la memoria en DS:DATO al registro AL AND AL,00001111b ;hace el AND entre AL y la mscara definida, almacenando ;el resultado en AL Suponiendo que el valor cargado en AL desde la etiqueta DATO es 4AH, el resultado almacenado en AL despus del AND ser 0AH. Como se puede observar, se han borrado los cuatro bits ms significativos de este dato y se han preservado los menos significativos. OR: realiza la funcin lgica OR a nivel de bits entre el operando fuente y el operando destino, y almacena el resultado en el operando destino. Los bits bandera OF y CF se limpian y los bis PF, SF, ZF se modifican para reflejar el resultado (el bit bandera AF se modifica pero de forma impredecible). Ejemplos: OR BYTE PTR TABLA,88H ;realiza el OR entre los bits de DS:TABLA y el dato inmediato, ;y almacena el resultado en DS:TABLA OR BX,BP ;realiza el OR entre los bits de BX y BP, y almacena el resultado en BX OR ECX,EDX ;realiza el OR entre ECX y EDX, y almacenada el resultado en ECX La instruccin OR, al igual que el AND, permite hacer enmascaramientos sobre los bits de un dato. El enmascaramiento mediante el OR consiste en hacer unos en los bits del dato original o dejarlos intactos. La mscara utilizada tendr bits con valor 1 cuando se desee colocar en 1 los bits (en las posiciones de los 1's) en el dato original, y colocar bits con valor 0 cuando desee dejar intactos los bits (en las posiciones de los 0's) en el dato original. Ejemplo: MOV AL,DATO ;copia un valor de 8 bits de la memoria en DS:DATO al registro AL OR AL,00001111b ;hace el OR entre AL y la mscara definida, almacenando ;el resultado en AL Suponiendo que el valor cargado en AL desde la etiqueta DATO es 4AH, el resultado almacenado en AL despus del OR ser 4FH. Observe que esta vez se preservaron los bits que estaban en las mismas posiciones que los ceros de la mscara y se colocaron en 1 los bits que estaban en las posiciones de los unos de la mscara. XOR: realiza la funcin lgica XOR a nivel de bits entre el operando fuente y el operando destino, y almacena el resultado en el operando destino. Los bits bandera OF y CF se limpian y los bis PF, SF, ZF se modifican para reflejar el resultado (el bit bandera AF se modifica pero de forma impredecible). Ejemplos: XOR DL,6FH ;realiza el XOR entre los bits de DL y el dato inmediato, ;y almacena el resultado en DL XOR DI,CX ;realiza el XOR entre los bits de DI y CX, y almacena el resultado en DI XOR EAX,ESI ;realiza el XOR entre ECX y EDX, y almacenada el resultado en ECX La instruccin XOR, al igual que el AND y la OR, permite hacer enmascaramientos sobre los bits de un dato. El

Elaborado por: Ing. David Fernndez

54/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

enmascaramiento mediante el XOR consiste en negar los bits del dato original o dejarlos intactos. La mscara utilizada tendr bits con valor 1 cuando se desee negar los bits (en las posiciones de los 1's) en el dato original, y colocar bits con valor 0 cuando desee dejar intactos los bits (en las posiciones de los 0's) en el dato original. Ejemplo: MOV AL,DATO ;copia un valor de 8 bits de la memoria en DS:DATO al registro AL XOR AL,00001111b ;hace el XOR entre AL y la mscara definida, almacenando ;el resultado en AL Suponiendo que el valor cargado en AL desde la etiqueta DATO es 4AH, el resultado almacenado en AL despus del XOR ser 45H. Observe que esta vez se preservaron los bits que estaban en las mismas posiciones que los ceros de la mscara y se invirtieron los bits que estaban en las posiciones de los unos de la mscara. NOT: opera sobre un solo dato y realiza el complemento a uno (el inverso de cada bit- inversin lgica) con su valor. El resultado se almacena en el mismo operando de la instruccin. Los operandos que se pueden utilizar pueden ser registros o localidades de memoria, nunca datos inmediatos. Esta instruccin no afecta ningn bit bandera. Ejemplo: NOT CL ;realiza el complemento a 1 de CL y los almacena en CL NOT AX ;realiza el complemento a 1 de AX y los almacena en AX NOT DWORD PRT DATO3 ;realiza el complemento a 1 del dato de 4 bytes ubicado a partir de ;DS:DATO3 y lo almacena en DS:DATO3 NEG: opera sobre un solo dato y realiza el complemento a dos (el inverso de cada bit ms uno-inversin aritmtica) con su valor. El resultado se almacena en el mismo operando de la instruccin. Los operandos que se pueden utilizar pueden ser registros o localidades de memoria, nunca datos inmediatos. Esta instruccin coloca en 0 el bit bandera CF si el operando era 0 antes de la operacin o en 1 en caso contrario. Los bits bandera SF, PF, AF, OF y ZF se modifican para reflejar el estado del resultado. Ejemplo: NEG CL ;realiza el complemento a 2 de CL y los almacena en CL NEG AX ;realiza el complemento a 2 de AX y los almacena en AX NEG DWORD PRT DATO3 ;realiza el complemento a 2 del dato de 4 bytes ubicado a partir de ;DS:DATO3 y lo almacena en DS:DATO3 TEST: es la misma operacin AND slo que el resultado no se almacena en el operando destino. Se utiliza normalmente para evaluar los bits de un dato que se encuentren en las posiciones de los unos del otro dato especificado (que casi siempre este segundo operando es una mscara). Ejemplo: en el cdigo que sigue se muestra como se evala el estado del bit menos significativo de un dato, si el valor es uno entonces se saltar a la etiqueta A de lo contrario se saltar a la etiqueta B. MOV CH,DATO ;copia el dato a evaluar a CH TEST CH,00000001b ;evala le bit menos significativo de CH sin afectar el valor de CH JNZ A ;salta a la etiqueta A si el resultado del AND fue 1, es decir, si el bit ;menos significativo de CH era igual a 1 sin importar el valor ;de los dems bits JMP B ;sino se produjo el salto anterior es porque el bit menos significativo de CH ;es 0 por cuanto se realiza el salto incondicional a la etiqueta B Nota: se puede evaluar el estado de ms de un bit, lo que se debe hacer es crear una mscara con bits en 1 en las posiciones de los bits que se deseen evaluar. f. Desplazamientos y rotaciones 8.4. Instrucciones de control de flujo de programa a. Saltos incondicionales: los saltos incondicionales cambian el valor del registro apuntador de instruccin para ejecutar una instruccin en el segmento de cdigo ubicada por una etiqueta o un desplazamiento. La instruccin de salto incondicional por excelencia es JMP y siempre se acompaa de un operando. El operando indica la direccin a la que se saltar, este puede ser una etiqueta de memoria, un registro (con el nuevo valor de EIP) una localidad de memoria que contiene una direccin de salto (el nuevo valor de EIP y de CS si el salto es lejano). Siempre que la instruccin de salto incondicional se acompae de un operando de tipo etiqueta se realizara un salto corto, cercano lejano. Los saltos cortos son saltos de 8 bits, esto es, se suma un valor con signo de 8 bits al registro EIP. Los saltos cercanos pueden ser de 16 bits 32 bits y tambin le suman un valor al registro EIP. La suma de los dos tipos anteriores es algebraica, por eso esto saltos se denominan saltos relativos. Por ltimo, existen los saltos lejanos que cambian el valor del EIP y el CS; se llaman lejanos porque cambian el segmento de cdigo que se est utilizando. El otro nombre que se le da a los saltos lejanos es el de saltos directos, ya que cambian por completo el valor del registro IEP y CS, desechando los valores anteriores. Los saltos cortos y cercanos tambin se denominan intra-segmento, ya que ocurren dentro de un mismo segmento de cdigo, mientras que los saltos lejanos se denominan inter-segmento, puesto que pueden cambiar el segmento de cdigo. En todo caso el programador no se debe preocupar mucho por el tipo de salto que se est utilizando, ya que el

Elaborado por: Ing. David Fernndez

55/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

compilador siempre escoge el tipo de salto ms conveniente. Ejemplos: JMP UNO ;salta a la instruccin dentro del segmento de cdigo apuntada ;por la etiqueta UNO, escogiendo el tipo de salto ms ;conveniente (corto, cercano lejano) JMP SHOR INICIO ;realiza un salto corto a la instruccin apuntada por la etiqueta INICIO JMP NEAR ARRIBA ;realiza un salto cercano a la instruccin apuntada por la etiqueta ARRIBA JMO FAR ABAJO ;realiza un salto lejano a la instruccin apuntada por la etiqueta ABAJO Cuando la instruccin de salto utiliza un operando de tipo registro o una direccin de memoria ubicada en un segmento de datos, se dice que el salto es indirecto. Estos saltos sustituyen el valor de EIP y si son lejanos el de CS tambin. Ejemplos: JMP AX ;copia el valor de AX en IP JMP SALTO[DI] ;salto a la direccin de salto almacenada en el segmento de datos ;con desplazamiento dado por DI b. Saltos condicionales: son saltos que evalan el estado de uno o dos bits bandera (PF, ZF, CF, SF OF) y/o del registro ECX. Siempre son saltos cortos o cercanos. A continuacin se presentan ejemplos de algunos saltos condicionales. Ejemplos: JA ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado mayor ;(para nmeros sin signo) JAE ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado ;mayor o igual (para nmeros sin signo) JB ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado menor ;(para nmeros sin signo) JBE ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado ;menor o igual (para nmeros sin signo) JE ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado igual ;(para nmeros con o sin signo) JNE ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado distinto ;(para nmeros con o sin signo) JL ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado menor ;(para nmeros con signo) JLE ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado ;menor o igual (para nmeros con signo) JG ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado mayor ;(para nmeros con signo) JGE ETIQUETA ;salta a ETIQUETA si la comparacin previo dio como resultado ;mayor o igual (para nmeros con signo) JZ ETIQUETA ;salta a ETIQUETA si ZF = 1 JNZ ETIQUETA ;salta a ETIQUETA si ZF = 0 JP ETIQUETA ;salta a ETIQUETA si PF = 1 JNP ETIQUETA ;salta a ETIQUETA si PF = 0 JO ETIQUETA ;salta a ETIQUETA si OF = 1 JCXZ ETIQUETA ;salta a ETIQUETA si ZF = 1 CX es 0 9. Lenguaje ensamblador 9.1. Consideraciones bsicas para programar en ensamblador 9.2. Definicin de datos 9.3. Definicin de segmentos y procedimientos 10. Interfaces de microprocesadores 11. Memoria 12. Dispositivos de E/S 13. Interrupciones y Acceso directo a memoria X. Memoria Virtual y Paginacin

Elaborado por: Ing. David Fernndez

56/59

Arquitectura de Computadores: Electrnica Digital II

16/06/06

Memoria La informacin de trabajo de los computadores se almacena en chips especiales denominados chips de memoria. Los chips de memoria conforman la memoria principal con la que trabajan los microprocesadores y muchos otros dispositivos. Existen diferentes tipos de chips de memoria, todos los cuales pueden agruparse en dos categoras generales, chips de memoria ROM y RAM. Los chips de ROM por sus siglas en ingls Read Only Memory Memoria de slo lectura retienen la informacin que tiene grabada an cuando se les deja de alimentar. Normalmente, slo se pueden realizar operaciones de lectura de este tipo de memoria, sin embargo, existen variedades de chips de memoria ROM que pueden ser reprogramados para cambiar la informacin que se almacena en ellos. Entre los principales tipos de memoria ROM se encuentran: Masked ROM: PROM (ROM programable): son memorias ROM que pueden programarse en campo mediante programadores especiales para este propsito que queman diodos internos al chip escribiendo as ceros y unos en la diferentes localidades de la memoria. Una vez grabada la informacin en estos chips no puede ser borrada por ningn medio. EPROM (ROM programable y borrable): este tipo de memoria ROM admite grabaciones posteriores a las hechas en una primera instancia, slo que para realizar una nueva grabacin es necesario antes borrar la memoria sometindola a luz ultravioleta por perodos de tiempo definidos por el fabricante. EEPROM Common RAM Types SRAM Static random access memory uses multiple transistors, typically four to six, for each memory cell but doesn't have a capacitor in each cell. It is used primarily for cache. DRAM Dynamic random access memory has memory cells with a paired transistor and capacitor requiring constant refreshing. FPM DRAM Fast page mode dynamic random access memory was the original form of DRAM. It waits through the entire process of locating a bit of data by column and row and then reading the bit before it starts on the next bit. Maximum transfer rate to L2 cache is approximately 176 megabytes per second. EDO DRAM Extended data-out dynamic random access memory does not wait for all of the processing of the first bit before continuing to the next one. As soon as the address of the first bit is located, EDO DRAM begins looking for the next bit. It is about five percent faster than FPM. Maximum transfer rate to L2 cache is approximately 264 megabytes per second. SDRAM Synchronous dynamic random access memory takes advantage of the burst mode concept to greatly improve performance. It does this by staying on the row containing the requested bit and moving rapidly through the columns, reading each bit as it goes. The idea is that most of the time the data needed by the CPU will be in sequence. SDRAM is about five percent faster than EDO RAM and is the most common form in desktops today. Maximum transfer rate to L2 cache is approximately 528 megabytes per second. RDRAM Rambus dynamic random access memory is a radical departure from the previous DRAM architecture. Designed by Rambus, RDRAM uses a Rambus in-line memory module (RIMM), which is similar in size and pin configuration to a standard DIMM. What makes RDRAM so different is its use of a special high-speed data bus called the Rambus channel. RDRAM memory chips work in parallel to achieve a data rate of 800 MHz. Credit Card Memory Credit card memory is a proprietary self-contained DRAM memory module that plugs into a special slot for use in notebook computers. PCMCIA Memory Card Another self-contained DRAM module for notebooks, cards of this type are not proprietary and should work with any notebook computer whose system bus matches the memory card's configuration. FlashRAM FlashRAM is a generic term for the small amount of memory used by devices like TVs, VCRs and car radios to maintain custom information. Even when these items are turned off, they draw a tiny amount of power to refresh the contents of their memory. This is why every time the power flickers, the VCR blinks 12:00. It's also why you lose all presets on your radio when your car battery dies! Your computer has FlashRAM to remember things like hard disk settings -- see this

Elaborado por: Ing. David Fernndez

57/59

Arquitectura de Computadores: Electrnica Digital II Question of the Day for details.

16/06/06

VRAM VideoRAM, also known as multiport dynamic random access memory (MPDRAM), is a type of RAM used specifically for video adapters or 3-D accelerators. The "multiport" part comes from the fact that VRAM normally has both random access memory and serial access memory. VRAM is located on the graphics card and comes in a variety of formats, many of which are proprietary. The amount of VRAM is a determining factor in the resolution and color depth of the display. VRAM is also used to hold graphics-specific information such as 3-D geometry data and texture maps.

La memoria de la computadora personal. La memoria de los computadores personales estuvo basada originalmente en la del microprocesador 8088 (de 16 bits) que era capaz de direccionar 1MB. A este bloque de 1MB de memoria se le llam memoria real y no se pudo extender sino hasta la creacin de un sistema de memoria ampliada (EMS, enhanced memory system) ideado por Lotus-IntelMicrosoft, que permita acceder a una cantidad prcticamente ilimitada de bloques de memoria de 64KB ubicados por arriba del primer 1MB de memoria. La memoria real se divida en dos partes la primera de 640KB denominada rea de programa transitoria, en la que se carga el sistema operativo las subrutinas de servicio del sistema operativo y los programas de usuario. El bloque restante de la memoria de 384KB est reservado para cargar el BIOS (sistema bsico de entrada y salida, Basic Input/Output System) para controlar los dispositivos del sistema, espacio para memoria de video y algunas zonas abiertas en las que se puede alojar un marco de pgina de EMS. Por encima de esta memoria est la memoria ampliada. El advenimiento de los procesadores de 32-bits, que podan direccionar mayores cantidades de memoria, permiti rebasar el lmite de 1MB definido por sus predecesores, sin embargo, para poder acceder a una memoria con mayores dimensiones se requera de otra estructura de memoria, crendose as el sistema de memoria extendida XMS (eXtended Memory System). El XMS era capaz de direccionar hasta 4095MB en los procesadores ms modernos 80386DX, 80486 y la familia Pentium; 31MB en el 80386SL y 15MB en el 80286 y el 80386SX.

Elaborado por: Ing. David Fernndez

58/59

Arquitectura de Computadores: Electrnica Digital II Referencias Bibliogrficas

16/06/06

[1] TANENBAUM Andrew. Organizacin de computadoras: un enfoque estructurado. Mxico. Prentice Hall. 2000. Pp. 688. [2] Intel. Microprocessor quick reference guide. Direccin:http://www.intel.com/pressroom/kits/quickreffam.htm#i486. Intel. 14/03/2006. [3] BREY Barry. Los microprocesadores INTEL. Mxico. Quina Edicin. Pearson Educacin. 2001.976 pp.

Elaborado por: Ing. David Fernndez

59/59