21

Arquitectura de Los Microprocesadores Intel y Su Evolucion(Enviar)

Embed Size (px)

Citation preview

  • Evolucin del Microprocesador

    Intel hasta ahora es el fabricante lder de microprocesadores para la PC. Intel ha fijado con

    firmeza el estndar por el cual se miden todos los procesadores. Intel 8086 y 8088En 1978

    Intel introdujo el microprocesador 8086, el cual tena una velocidad de reloj de477 MHz.

    Una computadora con 5 MHz tiene 5 millones de ciclos de procesamiento por segundo. El

    procesador 8088 estaba empacado en un circuito integrado de paquete en lnea dual de

    40 pines. Intel 80286Para adoptar el Intel 80286 el procesador como se le conoca

    comnmente se introdujo a comienzos de 1982 con una velocidad de reloj de 6 MHz Intel

    80386, 80386DX y 80386SXEn 1995 Intel saco el 80386 de 16 MHz, comnmente llamado

    386. El microprocesador 386 fue un procesador de 32 bits ensamblado en un paquete PGA

    de 132 pines, tenia275000 transistores y su velocidad de reloj soportaba ms de 5 MIPS

    Tena un modo de 32 bits, lo que significa que poda mover datos en bytes palabras De 16

    bits, o palabras dobles de 32 bits el 386X se sac al mercado para suplir la necesidad de un

    procesador de precio reducido con la potencia del 386DX al costo de un

    286.386SLProcesador de 20 MHz. La versin SL, era semejante al 386SX, pero estaba

    diseado especficamente para computadoras porttiles Intel 80486DX y SX, Este

    procesador tena ms de 12 millones de transistores y generaba 20 MIPS. Este procesador

    tambin introdujo algunas innovaciones como la inclusin de la cache del procesador en el

    chip del procesador. Intel 80486 DX2/DX4Fue presentado en 1992 como 80486DX2. La

    designacin 2 se refera a una tcnica llamada overclocking, que permita que la

    velocidad de reloj e un procesador se duplicaran. El 486DX4 tambin era un producto de

    overclocking. A los procesadores 486 de 25 MHz y 33 MHz se les aplicaba la tcnica de

    overclocking para triplicar sus velocidades normales de reloj.

    AMD 5x 86Los procesadores AMD 5x 86 eran compatibles con las tarjetas madre del 486

    pero tena la capacidad semejante a los primeros procesadores Pentium. Cyrix 5x

    86Tambin conocido como el MISE estaba demasiado a competir con el Intel 486 con el

    cual era compatible con el zcalo Pentium Este nuevo procesador inclua muchas

    caractersticas nuevas, dentro de las que se encontraban caches independientes de 8 bits

    para datos e instrucciones y una FPU muy rpida. Pentium mantuvo el bus de direcciones

    de 32 bits del 486 paro agrego un bus de datos de 64 bits. Tecnologa MMX. La tecnologa

    MMX es un conjunto de instrucciones que utiliza la matemtica matricial, para soportar

    los algoritmos de comprensin y de comprensin de grficos y presentaciones graficas en

    3D permite que el FPU actu en varias piezas de datos simultneamente a travs de un

    proceso llamado SIMD. Procesadores Cyrix 6x86Indicaba que el procesador cyrix con ese

    nmero de modelo tenis un rendimiento equivalente al procesador Pentium de 200 MHz.

    Cyrix produjo modelos que oscilaban entre 6x86-P120 y 6x86-P200.Pentium II Se le

  • denomina comnmente est disponible con velocidades de reloj de 233 Mhz, 266y 300

    MHz. Es excelente para reproduccin de multimedia que requiera soporte para videos con

    movimiento total e imgenes 3D. Celeron Se desarroll para ser utilizado en

    computadoras de escritorio y porttiles, sus velocidades entre 333 MHz y 500 Mhz. Xeon

    Presenta un ramo de opciones de tamao cache, N2 es capaz de direccionar y atrapar,

    hasta 64 Gb de memoria con su bus de direcciones de memoria de 36 bits.

    AMD K6Fue desarrollado para competir con el Pentium MMX, el AMD K6, lo supera en

    rendimiento, velocidad y precio. Cyrix 6x86MX y Cyrix III Contiene un conjunto de

    instrucciones MMX tiene una velocidad de rendimiento P-166a P-366El cyrix III funciona a

    velocidades de reloj de 433, 466, 500 y 533 MHz Procesadores AMD K5-2 y K 6-111Se

    encuentran disponibles con velocidades de reloj entre 266 y 550 MHz. El procesador K6-III

    contiene 256 K de cache N2 y velocidades de reloj entre 400 y600 MHz. Intel Pentium III

    Contiene 9.5 millones de transistores un cache N1 de 32K y 512 K de cache N2. Se

    encuentra disponible con velocidades de reloj entre 450 MHz y 1 GHz y esta ensamblado

    en un paquete de conectores laterales de borde nico de segunda generacin

    denominada SECC2La mayora de las tarjetas madre que soportan un procesador Pentium

    II que pueden actualizarse a Pentium III; sin embargo, pueden requerir una

    actualizacin Flash BIOSAMD ATHLON Se enorgullece de contener 22 millones de

    transistores que soportan el MMX de Intel y el 3DNow de AMD y funciones FPU

    mejoradas. Tiene la capacidad de decodificar ms instrucciones simultneamente que el

    Pentium II, con 256 Kb de cache N2 y 128Kb de cache N1 en el chip. Intel Pentium

    4Disponible con velocidades de procesador de 1.3 a 1.5 Ghz. Utiliza una nueva micro-

    arquitectura llamada NET-BURST, la cual contiene un bus de sistema de 400 MHz, cache

    avanzado integrada en la tarje, matemticas mejoradas de punto flotante y soporte de

    multimedia y tecnologa de hper-canalizacin. Soporta el uso del RDRAM de canal dual.

    Arquitectura de los microprocesadores de Intel

    Si nos referimos a la familia Intel, de los 2.100 transistores del 4004 en 1970, que con solo

    46 instrucciones funcionaba a unos 800 KHz, se pas a los 29.000 transistores del 8086 en

    1979 a 14 MHz; y en 1999 a los 8.200.000 transistores del Pentium III a 2 GHz.

  • Arquitectura de los microprocesadores desde el 8086 al Pentium 4

    Registro de propsito general (general-purpose register): Son aquellos sobre los que no

    existe restriccin en cuanto a su utilizacin. Pueden ser empleados como fuente o destino

    de datos, como contador, como puntero de localidades de memoria o de elementos de

    E/S.

  • Registros apuntadores e ndice

    Registro puntero de la pila (stack pointer SP): Contiene la direccin de la memoria donde

    se almacen el ltimo dato de la PILA o STACK.

    REGISTRO NDICE (index register): Tambin contiene una direccin y es utilizado

    como puntero. El uso de este registro permite que los programas sean ms

    flexibles, ya que para acceder a distintas localidades de memoria, basta especificar

    un valor que sumado al contenido del registro ndice da la direccin real.

    Registros de segmentos

    Un registro de segmento se utiliza para alinear en un lmite de prrafo o dicho de otra

    forma codifica la direccin de inicio de cada segmento y su direccin en un registro de

    segmento supone cuatro bits 0 a su derecha.

    Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para

    direccionamientos conocidos como el segmento actual. Los registros de segmento son: CS (cdigo), DS (datos), SS (pila), ES , FS y GS.

    Registro de estado o de bandera (flag) y sus sealizadores

    Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la mquina y el resultado del procesamiento. Muchas instrucciones aritmticas y de comparacin cambian el estado de las banderas y apoyndose en ellas se pueden tomar decisiones para determinar la accin subsecuente.

    La tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas, numeradas de derecha a izquierda. La posicin 0 la encontraremos a la derecha y la posicin 15 a la izquierda.

    - - - - OF DF IF TF SF ZF - AF - PF - CF

    Los bits de las banderas son las siguientes:

  • OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera.

    DF (direccin): Controla la seleccin de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.

    IF (interrupcin): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones). La interrupcin no enmascarable es la nica que no puede ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones STI y CLI.

    TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso)

    SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo).

    ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero).

    AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD.

    PF (paridad): Indica si el nmero de bits 1, del byte menos significativos de una operacin, es par (0=nmero de bits 1 es impar; 1=nmero de bits 1 es par).

    CF (acarreo): Contiene el acarreo del bit de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de desplazamiento o de rotacin.

    Direccionamiento de la memoria en tiempo real

    El modo real (tambin llamado modo de direccin real en los manuales de Intel) es un

    modo de operacin del 80286 y posteriores CPUs compatibles de la arquitectura x86. El

    modo real est caracterizado por 20 bits de espacio de direcciones segmentado

    (significando que solamente se puede direccionar 1 MB de memoria), acceso directo del

    software a las rutinas del BIOS y el hardware perifrico, y no tiene conceptos de

    proteccin de memoria o multitarea a nivel de hardware. Todos los CPUs x86 de las series

    del 80286 y posteriores empiezan en modo real al encenderse el computador; los CPUs

    80186 y anteriores tenan solo un modo operacional, que era equivalente al modo real en

    chips posteriores. Puesto que una especificacin de diseo primaria de los

    microprocesadores x86 es que sean completamente compatibles hacia atrs con el

    software escrito para todos los chips x86 antes de ellos, el chip 286 fue hecho para

    iniciarse en modo real es decir, en un modo que tena apagadas las nuevas

  • caractersticas de proteccin de memoria, de modo que pudieran correr sistemas

    operativos escritos para microprocesadores ms viejos. Al da de hoy, incluso los ms

    recientes CPUs x86 se inician en modo real al encenderse, y pueden correr el software

    escrito para cualquier chip anterior. Bajo el modo real no existe ningn mecanismo para

    tener varias tareas ejecutndose concurrentemente, aunque si se pueden tener varios

    programas cargados en memoria al mismo tiempo, pero inactivos.

    En el modo real se puede lograr un pequeo grado de multitarea si interceptamos algunos

    de los vectores de interrupcin que se ejecutan peridicamente, como el temporizador, e

    insertamos una rutina de usuario bajo esa interrupcin. Como puede verse, este tipo de

    multitarea no tiene ni punto de comparacin con la que ofrece el modo protegido del

    80386.En el modo real no se puede controlar que un programa, por ejemplo, no pueda

    acceder a una zona especfica de memoria. Un programa en modo real puede acceder a

    cualquier direccin de memoria direccionable por el procesador, con lo que un programa

    maligno puede modificar estructuras del sistema operativo o redireccionar vectores de

    interrupcin y tener un control total sobre el sistema. Debido a esta escasa proteccin que

    se ofrece en el modo real, aparecen los temibles virus informticos y otros programas

    malignos. Tras conocer el modo protegido y haber trabajado con l, me atrevo a afirmar

    que es imposible realizar un virus para un sistema operativo que trabaje en modo

    protegido, siempre y cuando ese sistema operativo no deje ninguna puerta de entrada

    libre al usuario para controlar el sistema. Todas las interrupciones hardware y software

    son controladas por el procesador en el modo real leyendo de una tabla de interrupciones

    que se encuentran en las primeras posiciones de memoria fsica. Cuando se produce una

    interrupcin, se lee de la tabla anterior la direccin donde encontrar su rutina de

    tratamiento. Como cualquier programa pude acceder a cualquier direccin de memoria,

    pude manipular esta rea de memoria e interceptar diversos vectores de interrupcin y

    apuntarlas a rutinas propias, con lo que cualquier programa puede controlar el sistema

    segn desee.

    Direccionamiento de memoria en modo protegido.

    El direccionamiento de memoria en modo protegido (a partir del 80286 y posteriores)

    permite acceder a datos y programas localizados por encima y dentro del primer

    megabyte de memoria. Para direccionar esta seccin extendida el sistema de memoria se

    requiere un cambio en el esquema de direccionamiento de segmento ms desplazamiento

    usado en el modo real. Cuando los datos y programa se direccionan la memoria extendida,

    se sigue utilizando la direccin de desplazamiento para acceder a la informacin en el

  • segmento de memoria. Una diferencia consiste en la direccin del segmento ya que no

    existe en modo protegido. En lugar de una direccin de segmento, el registro de segmento

    contiene un SELECTOR que elige un descriptor de una tabla. El descriptor especfica la

    ubicacin del segmento en memoria, su longitud y sus derechos de acceso. Dado que el

    registro de segmento y la direccin de desplazamiento an acceden a la memoria, las

    instrucciones del modo protegido son idnticas a las de modo real. De hecho, la mayora

    de los programas escritos para funcionar en modo real funcionarn sin cambios en el

    modo protegido. La diferencia entre los dos modos es la forma en que el microprocesador

    interpreta el registro de segmento para acceder al segmento de memoria. Otra diferencia,

    en los 80386 y posteriores, es que en modo protegido la direccin de desplazamiento

    puede ser un nmero de 32 bits en vez de utilizar uno de 16 bits como en modo real. Es

    por esto que puede direccionar hasta 4 Gb de longitud.

    El SELECTOR, ubicado en el registro del segmento, elige uno de 8192 descriptores en una

    de las dos tablas de descriptores. El DESCRIPTOR especifica la ubicacin, la longitud y los

    derechos de acceso del segmento de memoria, aunque no directamente como en el modo

    real. Por ejemplo, en el modo real, si CS=0008H, el segmento de cdigo inicia en la

    localidad 00080H. En modo protegido, este nmero de segmento puede direccionar

    cualquier localidad de memoria en todo el sistema para el segmento de cdigo. Existen

    dos tablas de descriptores utilizadas con los registros de segmentos: una contiene

    descriptores globales y otra, descriptores locales. Los descriptores globales contienen las

    definiciones de los segmentos que se aplican a todos los programas, mientras que los

    descriptores locales son generalmente exclusivos de una aplicacin. Podramos llamar

    descriptor de sistema a un descriptor global, y descriptor de aplicacin a uno local. Cada

    tabla de descriptores contendr 8192 entradas, por lo tanto una aplicacin podra

    disponer en cualquier momento de 16.384 descriptores. Puesto que un descriptor

    describe un segmento de memoria, esto permite que puedan ser descriptos hasta 16.384

    segmentos de una aplicacin.

    Los registros invisibles para los programas

    Los registros invisibles para el programa no son diseccionados directamente por el

    software, motivo por el cual reciben este nombre (TR, LDTR, GDTR,IDTR)

    La parte invisible de estos registros recibe el nombre de cach ( no se debe confundir

    con los niveles 1 o 2 encontradas en el microprocesador). Cada vez que se cambia el

  • nmero en el registro de segmento, la parte del registro de segmentos invisible para el

    programa es cargada en la direccin base., el lmite y los derechos de acceso. Cuando se

    escribe un nuevo nmero en un registro, el microprocesador accede a la tabla de

    descriptores y carga el descriptor en la cach invisible para el programa de forma parte

    del registro del segmento. El descriptor se mantiene ah y es usado para acceder al

    segmento de memoria hasta que el nmero de segmento es cambiado nuevamente. Esto

    permite al microprocesador acceder repetidamente a un segmento de memoria sin

    consultar en cada ocasin la tabla de descriptores (de ah el trmino cach).

    El GDTR (registro de tabla de descriptores globales) y el IDTR (registro de tabla de

    descriptores de interrupcin) contienen la direccin base y lmite de la tabla de

    descriptores. El lmite de cada tabla de descriptores es de 16 bits debido a que la mxima

    longitud de la tabla es de 64 KB. Cuando se desea la operacin en modo protegido, la

    direccin y el lmite de la tabla de descriptores globales son cargados en el GDTR. Antes de

    usar el modo protegido, debe inicializarse tambin la tabla de descriptores de interrupcin

    y el IDTR.

    La ubicacin de la tabla de descriptores locales es seleccionada de la tabla de

    descriptores globales (uno de los descriptores se configura para direccionar la tabla de

    descriptores locales).

    Para acceder a la tabla de descriptores locales, LDTR (registro de la tabla de descriptores

    locales) es cargado con un selector, al igual que un registro de segmento es cargado con

    un selector. Este selector accede a la tabla de descriptores globales y carga la direccin de

    base, el lmite y los derechos de acceso de la tabla de descriptores hacia la parte cach del

    LDTR.

    El TR (registro de tarea) contiene un selector, el cual accede a un descriptor que define

    una tarea. Una tarea es con frecuencia un procedimiento o un programa de aplicacin. El

    descriptor para el procedimiento o programa es almacenado en la tabla de descriptores

    globales, de forma que el acceso pueda se controlado por medio de los niveles de

    privilegio. El registro de tarea permite la conmutacin de contexto o de tarea en aprox. 17

  • us. La conmutacin de tareas se efecta en lapsos razonablemente cortos y permite a los

    sistemas multitareas cambiar una tarea a otra de manera simple y ordenada.

    Diferentes modos de direccionamiento

    Diferentes arquitecturas de computadores varan mucho en cuanto al nmero de modos

    de direccionamiento que ofrecen desde el hardware. Eliminar los modos de

    direccionamiento ms complejos podra presentar una serie de beneficios, aunque podra

    requerir de instrucciones adicionales, e incluso de otro registro. Se ha comprobado que el

    diseo de CPUs segmentadas es mucho ms fcil si los nicos modos de direccionamiento

    que proporcionan son simples.

    La mayora de las mquinas RISC disponen de apenas cinco modos de direccionamiento

    simple, mientras que otras mquinas CISC tales como el DEC VAX tienen ms de una

    docena de modos de direccionamiento, algunos de ellos demasiado complejos. El

    mainframe IBM System/360 dispona nicamente de tres modos de direccionamiento;

    algunos ms fueron aadidos posteriormente para el System/390.

    Cuando existen solo unos cuantos modos, estos van codificados directamente dentro de la

    propia instruccin (Un ejemplo lo podemos encontrar en el IBM/390, y en la mayora de

    los RISC). Sin embargo, cuando hay demasiados modos, a menudo suele reservarse un

    campo especfico en la propia instruccin, para especificar dicho modo de

    direccionamiento. El DEC VAX permita mltiples operandos en memoria en la mayora de

    sus instrucciones, y reservaba los primeros bits de cada operando para indicar el modo de

    direccionamiento de ese operando en particular.

    Incluso en computadores con muchos modos de direccionamiento, algunas medidas

    realizadas a programas indican que los modos ms simples representan cerca del 90% o

    ms de todos los modos de direccionamiento utilizados. Dado que la mayora de estas

    medidas son obtenidas a partir de cdigos de alto nivel generados a partir de

    compiladores, nos da una idea de las limitaciones que presentan los compiladores que se

    utilizan.

    - Implcito

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

    Supongamos una arquitectura de pila, las operaciones aritmticas no requieren direccionamiento explcito por lo que se ponen como:

    - add

    - sub

    ...

    Por qu? Porque cuando se opera con dos datos en esta arquitectura se sabe que son los dos elementos del tope de la pila:

    Ejemplo de una pila

    1 2 3 4 5 6

  • - Directo

    El campo de operando en la instruccin contiene la direccin en memoria donde se encuentra el operando.

    En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en la memoria y su direccin es dada directamente por el campo de direccin de la instruccin. En una instruccin de tipo ramificacin el campo de direccin especifica la direccin de la rama actual.

    Con este tipo de direccionamiento, la direccin efectiva es contenida en la misma instruccin, tal como los valores de datos inmediatos que son contenidos en la instruccin. Un procesador de 16 bits suma la direccin efectiva al contenido del segmento de datos previamente desplazado en 4 bits para producir la direccin fsica del operando.

    Ejemplo: MOV A,17H

    - Indirecto

    El campo de operando contiene una direccin de memoria, en la que se encuentra la direccin efectiva del operando.

  • Ejemplo: MOV A,@17H

    - Absoluto

    El campo de operando contiene una direccin en memoria, en la que se encuentra la instruccin.

    - De registro

    Sirve para especificar operandos que estn en registros.

  • Ejemplo: MOV A, R0

    - Indirecto mediante registros

    El campo de operando de la instruccin contiene un identificador de registro en el que se

    encuentra la direccin efectiva del operando.

    En este modo el campo de la direccin de la instruccin da la direccin en donde la direccin efectiva se almacena en la memoria. El control localiza la instruccin de la memoria y utiliza su parte de direccin para accesar la memoria de nuevo para leer una direccin efectiva. Unos pocos modos de direccionamiento requieren que el campo de direccin de la instruccin sea sumado al control de un registro especificado en el procesador. La direccin efectiva en este modo se obtiene del siguiente clculo:

    Dir. Efectiva = Dir. de la parte de la instruccin + Contenido del registro del procesador

    Ejemplo: MOV A,@R0

    - De desplazamiento

    Combina el modo directo e indirecto mediante registros.

    - De pila

    Se utiliza cuando el operando est en memoria y en la cabecera de la pila.

  • Este direccionamiento se basa en las estructuras denominadas Pila(tipo LIFO), las cuales estn marcados por el fondo de la pila y el puntero de pila (*SP), El puntero de pila apunta a la ltima posicin ocupada. As, como puntero de direccionamiento usaremos el SP. El desplazamiento ms el valor del SP nos dar la direccin del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario, es mucho ms complejo que otros tipos estudiados ms arriba.

    - Respecto a un registro base

    Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parmetros apilados en la pila, valga la redundancia). Consiste, al igual que el indirecto a travs de registro, en calcular la EA (Effective Address) como la suma del contenido del registro base y un cierto desplazamiento (u offset) que siempre ser positivo. Esta tcnica permite cdigos reentrantes y acceder de forma fcil y rpida a posiciones cercanas de memoria.

    EA = RB+offset RB = registro base offset = desplazamiento -> RB se comporta como una direccin de memoria a la que se le sumar el desplazamiento.

    - Respecto a un registro ndice

    Es similar al anterior, lo nico que es el contenido del registro ndice el que indica el desplazamiento que se produce a partir de una direccin de memoria que se pasa tambin como argumento a la orden que utiliza este modo de direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se calcula como la suma del contenido del registro ndice y una direccin de memoria:

    EA = RI+DM RI = registro ndice DM = direccin de memoria -> RI se comporta como un offset

    === Indexado respecto a una base === Se trata de una combinacin de los dos anteriores y consiste en calcular la direccin efectiva como:

    EA = RI+RB+DM

    -> Las siglas significan lo mismo que en el caso anterior.

    - Respecto al contador de programa

    Consiste en direccin una posicin de memoria usando como registro base al contador de programa (PC), el funcionamiento es anlogo al direccionamiento respecto a registro base con la salvedad de que, en este caso, el offset puede ser tambin negativo.

    - Indexado con autoincremento/autodecremento

  • Es un modo de direccionamiento anlogo al indexado, explicado anteriormente.

    La nica diferencia es que permite un incremento o decremento de la direccin final o el

    registro ndice segn

    los siguientes casos:

    -> Indexado con autopreincremento: Incrementa el registro ndice primero (se incrementa un valor, segn el tamao del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado.

    -> Indexado con autoposincremento: Calcula la direccin efectiva y despus incrementa esta.

    -> Indexado con autopredecremento: Decrementa el registro ndice y despus calcula la direccin efectiva.

    -> Indexado con autoposdecremento: Calcula la direccin efectiva y despus decrementa esta.

    - Instruccin de salto con direccionamiento absoluto

    Consiste en cargar en el PC el valor que se especifica en la orden de salto, p.e:

    jmp 0xAB ----> Carga 0xAB en PC

    - Instruccin de salto con direccionamiento relativo

    Es parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC, pongamos un ejemplo:

    Supongamos que PC vale = 0x0A, si nosotros interpretamos la instruccin jr +03, saltaremos tres posiciones posteriores a PC (tambin podra ser -03 y seran posiciones anteriores). Pero, cuidado! si esa instruccin estaba en la posicin 0x0A la direccin de PC a incrementar ser la inmediatamente posterior (ya que PC se incrementa automticamente despus de leer la instruccin), por lo que quedara:

    PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E, con lo que el PC quedara como 0x0E.

    Que es el lenguaje ensamblador y como nace dentro del microprocesador

    El lenguaje ensamblador, o assembler (assembly language en ingls) es un lenguaje de

    programacin de bajo nivel para los computadores, microprocesadores,

    microcontroladores, y otros circuitos integrados programables. Implementa una

    representacin simblica de los cdigos de mquina binarios y otras constantes necesarias

    para programar una arquitectura dada de CPU y constituye la representacin ms directa

  • del cdigo mquina especfico para cada arquitectura legible por un programador. Esta

    representacin es usualmente definida por el fabricante de hardware, y est basada en los

    mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros

    del procesador, las posiciones de memoria, y otras caractersticas del lenguaje. Un

    lenguaje ensamblador es por lo tanto especfico a cierta arquitectura de computador fsica

    (o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto

    nivel, que, idealmente son portables.

    Un programa utilitario llamado ensamblador es usado para traducir sentencias del

    lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador

    realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las

    sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con

    los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a

    muchas instrucciones de mquina.

    Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el

    desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin.

    Particularmente, la mayora de los ensambladores modernos incluyen una facilidad de

    macro (descrita ms abajo), y son llamados macro ensambladores.

    Fue usado principalmente en los inicios del desarrollo de software, cuando an no se

    contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se

    utiliza con frecuencia en ambientes acadmicos y de investigacin, especialmente cuando

    se requiere la manipulacin directa de hardware, altos rendimientos, o un uso de recursos

    controlado y reducido.

    Muchos dispositivos programables (como los microcontroladores) an cuentan con el

    ensamblador como la nica manera de ser manipulados.

    Instrucciones en lenguaje ensamblador

    ACALL realiza una llamada incondicional a la subrutina situada en la direccin indicada. ACALL incrementa el PC (Program Counter) dos veces para obtener la direccin de la siguiente instruccin, luego guarda dicha direccin en la pila (el byte de menor peso en primer lugar). En consecuencia el apuntador de pila (SP o Stack Pointer) incrementa su valor en 2. Posteriormente el control del programa se transfiere a la direccin indicada en la instruccin. La direccin de salto, o nuevo valor para el PC se obtiene uniendo a los 5 bits de mayor peso del PC ya incrementado, los bits 7-5 del cdigo de operacin y el segundo byte de la instruccin.

  • ADD suma el valor del operando al valor del Acumulador, y deja el resultado en el Acumulador. El valor del operando no resulta afectado.

    El bit de acarreo (C) se pone a uno si hay llevada desde el bit 7. Es decir, si el resultado de la suma pasa de 255. En caso contrario el bit C se pone a cero.

    El bit de acarreo auxiliar (AC) se pone a uno si hay llevada desde el bit 3. Es decir si el nibble bajo del resultado pasa de 15. En caso contrario el bit AC se pone a cero.

    El bit de rebasamiento (OV) se pone a uno si hay llevada desde el bit 6, o desde el bit 7, pero no de ambos. En caso contrario se pone a cero. En otras palabras, si al sumar dos nmeros enteros, el flag OV toma valor 1, ello significa que el resultado se encuentra fuera del rango de los enteros de 8 bits, que va desde -128 hasta +127.

    ADDC suma el valor del operando, el bit de acarreo C, y el valor del Acumulador, y deja el resultado en el Acumulador. El valor del operando no resulta afectado.

    El bit de acarreo (C) se pone a uno si hay llevada desde el bit 7. Es decir, si el resultado de la suma pasa de 255. En caso contrario el bit C se pone a cero.

    El bit de acarreo auxiliar (AC) se pone a uno si hay llevada desde el bit 3. Es decir si el nibble bajo del resultado pasa de 15. En caso contrario el bit AC se pone a cero.

    El bit de rebasamiento (OV) se pone a uno si hay llevada desde el bit 6, o desde el bit 7, pero no de ambos. En caso contrario se pone a cero. En otras palabras, si al sumar dos nmeros enteros, el flag OV toma valor 1, ello significa que el resultado se encuentra fuera del rango de los enteros de 8 bits, que va desde -128 hasta +127.

    AJMP realiza un salto a la direccin indicada de la memoria de cdigo. La direccin de salto, o nuevo valor para el PC (Program Counter) se obtiene uniendo a los 5 bits de mayor peso del PC (incrementado dos veces), los bits 7-5 del cdigo de operacin y el segundo byte de la instruccin.

    Como la instruccin AJMP slo afecta a los 11 bits de menor peso del PC, la llamada siempre se produce a una direccin de memoria de cdigo situada dentro del bloque de 2K al que pertenece el primer byte de la instruccin que sigue al AJMP.

    ANL realiza la operacin "AND" bit a bit, entre operando1 yoperando2, dejando el resultado en operando1. El valor del operando2 no resulta afectado.

  • Nota: Cuando se utiliza esta instruccin para modificar un puerto de salida, el valor inicial del dato del puerto se lee del latch de salida, no de las patillas del puerto.

    CJNE compara la magnitud de operando1 y operando2 y salta si sus valores no son iguales. Si ambos operandos son iguales, el programa contina con la siguiente instruccin a CJNE. La direccin a donde saltar se obtiene sumando el offset (tercer byte de la instruccin), al PC (Program Counter) despus de que ste se haya incrementado hasta el comienzo de la siguiente instruccin. El offset representa una cantidad entera con signo, y permite saltos de hasta 127 posiciones hacia adelante, y hasta 128 posiciones hacia atrs, sobre la direccin de comienzo de la siguiente instruccin.

    La instruccin no modifica ninguno de los dos operandos.

    El flag de acarreo (C) se pone a uno si el valor del primer operando es menor que el segundo operando. En caso contrario el bit C se pone a 0.

    CLR A pone a cero el acumulador.

    CLR bit pone a cero el bit indicado. CLR puede operar con el bit C o con cualquier bit

    direccionable de forma directa.

    CPL A complementa el contenido del acumulador. Cada bit del acumulador que est a "1" se pondr a "0" y al revs.

    La instruccin DAA ajusta el contenido del acumulador a un nmero BCD. Su funcionamiento se realiza en dos fases:

    En la primera, si el bit AC vale 1, o si el nibble bajo del acumulador es mayor que 9, se aade 06H al acumulador. Esta operacin puede poner a 1 el C, pero no puede ponerlo a 0.

    Si despus de la primera fase el bit C vale 1, o si el nibble alto del acumulador es mayor que 9, se aade 60H al acumulador.

    La instruccin DAA debe utilizarse siempre despus de una suma (ADD o ADDC), y no puede emplearse despus de una resta (SUBB).

  • DEC decrementa en una unidad el valor del operando. Si el valor a decrementar es 0, entonces el resultado ser 0xFF, aunque el bit C no resulta afectado por ello.

    Nota: Cuando se utiliza esta instruccin para modificar un puerto de salida, el valor inicial del dato del puerto se lee del latch de salida, no de las patillas del puerto.

    DIV AB vide (divisin entera) el contenido del acumulador entre el contenido del registro B. El cociente se deja en el acumulador y el resto se deja en el registro B. Si inicialmente el registro B tiene valor 0, tras la divisin el contenido del acumulador y del registro B es indeterminado, y se activa el flag OV.

    El flag Carry (C) siempre se pone a 0.

    DJNZ decrementa el operando y si el nuevo valor es distinto de cero, se produce el salto. Si el valor del operando es cero, el programa contina con la siguiente instruccin a DJNZ. La direccin a donde saltar se obtiene sumando el offset (ltimo byte de la instruccin), al PC (Program Counter) despus de que ste se haya incrementado hasta el comienzo de la siguiente instruccin. El offset representa una cantidad entera con signo, y permite saltos de hasta 127 posiciones hacia adelante, y hasta 128 posiciones hacia atrs, sobre la direccin de comienzo de la siguiente instruccin.

    INC incrementa en una unidad el valor del operando. Si el valor a incrementar es 0FFH, entonces el resultado ser 0, aunque el bit C no resulta afectado por ello.

    Nota: Cuando se utiliza esta instruccin para modificar un puerto de salida, el valor inicial del dato del puerto se lee del latch de salida, no de las patillas del puerto.

    LCALL realiza una llamada incondicional a la subrutina situada en la direccin indicada. LCALL incrementa el PC (Program Counter) tres veces para obtener la direccin de la siguiente instruccin, luego guarda dicha direccin en la pila (el byte de menor peso en primer lugar). En consecuencia el apuntador de pila (SP o Stack Pointer) incrementa su valor en 2. Posteriormente el control del programa se transfiere a la direccin indicada en la instruccin.

  • LJMP realiza un salto incondicional a la direccin de 16 bits indicada en los dos ltimos bytes de la instruccin. El destino puede ser cualquier posicin de los 64 Kbytes de memoria de cdigo.

    MOV copia el valor de operando2 en operando1. El valor de operando2 no resulta afectado. Ambos operandos pertenecen a la RAM interna. Ningn flag resulta afectado, salvo que el movimiento se realice hacia el registro PSW que contiene los flags.

    Nota_1: MOV A,ACC no es una instruccin vlida. Experimentalmente se ha comprobado que se trata de una instruccin de dos bytes que se ejecuta en un solo ciclo mquina y que parece dejar siempre el contenido del acumulador a 0xFF.

    Nota_2: En el caso de "MOV direc1,direc2", los operandos se almacenan en orden inverso. As la instruccin formada por los bytes 85H, 20H, 50H indica "Mover el contenido de la direccin 20H de RAM Interna a la direccin 50H de RAM Interna.

    XCHD A,@Ri intercambia el nibble bajo (bits 3-0) del acumulador con el nibble bajo de la posicin de RAM interna cuya direccin est contenida en el registro Ri. Los nibbles altos de ambos operandos no se ven afectados.

    ?? Byte : El 8051 soporta 255 cdigos de operacin. El cdigo de operacin 0xA5 es el nico que no corresponde a ninguna funcin documentada. Como no est documentada ni definida no se recomienda su uso. Sin embargo segn nuestra experiencia con un C PCF80C552 podemos afirmar que se trata de una instruccin de dos bytes que se ejecuta en un solo ciclo mquina. Aparte de la demora introducida no se ha observado ninguna otra accin.