Está en la página 1de 29

Intel 8086 y 8088

El Intel 8086 y el Intel 8088 (i8086, llamados oficialmente iAPX 86, y i8088) son los primeros microprocesadores de 16 bits diseados por Intel. Fueron el inicio y los primeros miembros de la arquitectura x86, actualmente usada en la mayora de los computadores. El 8086 y el 8088 ejecutan el mismo conjunto de instrucciones. Internamente son idnticos, excepto que el 8086 tiene una cola de 6 bytes para instrucciones y el 8088 de slo 4. Exteriormente se diferencian en que el 8086 tiene un bus de datos de 16 bits y el del 8088 es de slo 8 bits, por ello, el 8086 era ms rpido. Por otro lado, el 8088 poda usar menor cantidad, y ms econmicos, circuitos lgicos de soporte, lo que permita la fabricacin de sistemas ms econmicos. Estructura interna

La Unidad de Interfaz del Bus y la Unidad de ejecucin El 8086 y el 8088 tienen internamente dos componentes, la Unidad de Interfaz del Bus y la Unidad de ejecucin (Bus Interface Unit (BIU) y Execution Unit (EU)).

La Unidad de Ejecucin procesa las instrucciones del CPU. Est conformada por los registros
generales, los registros ndice y apuntadores, los flags, la unidad aritmtico lgica, y la lgica de control que maneja todo el proceso para ejecutar las instrucciones. La Unidad de Interfaz del Bus maneja la lectura y escritura desde y hacia la memoria y los puertos de entrada/salida. Est conformada por los registros de segmento, una cola de 4 bytes para

instrucciones en el 8088 y de 6 en el 8086, y lgica para controlar los buses externos del microprocesador. En la figura de la derecha, la Unidad de Ejecucin se encuentra en la parte de abajo y la Unidad de Interfaz del Bus est en la parte superior. Las dos estn interconectadas mediante un bus interno.

Registros de propsito general AH AL AX (Acumulador) BH BL BX (Base) CH CL CX (Contador) DH DL DX (Datos) Registros ndices SI Source Index (ndice origen) DI Destination Index (ndice Destino) BP Base Pointer (Puntero Base) SP Stack Pointer (Puntero de Pila) Registro de Bandera - - - - O D I T S Z - A - P - C Flags (Banderas) Registros de Segmentos CS Code Segment (Segmento de Cdigo) DS Data Segment (Segmento de Datos) ES ExtraSegment (Segmento Extra) SS Stack Segment (Segmento de Pila) Registro apuntador de instrucciones IP Instruction Pointer

Registros Los registros del i8086 e i8088 se basaron en el diseo del Intel 8080 y el Intel 8085, y de hecho son compatibles a nivel de lenguaje ensamblador con el i8080. El conjunto de registros tambin es similar al del i8080, pero ampliados a 16 bits. Tanto el i8086 como el i8088 tienen cuatro registros de propsito general de 16 bits, que tambin pueden ser accedidos como ocho registros de 8 bits, y tienen cuatro registros ndicede 16 bits (incluyendo el puntero de pila). Los registros de datos se usan a veces de forma implcita por las instrucciones, haciendo ms difcil la organizacin de los registros para emplearlos con valores temporales. Los registros del procesador, se usan para contener los datos con que se est trabajando puesto que el acceso a los registros es mucho ms rpido que los accesos a memoria. Se pueden realizar operaciones aritmticas y lgicas, comparaciones, entre otras. Se pueden hacer estas operaciones con todos los registros excepto los de segmento, el IP, y los flags.

Registros de Propsito General


Los registros de propsito general son el AX, BX, CX, y DX, de 16 bits. Cada uno de ellos se divide en dos registros de 8 bits, llamados AH y AL, BH y BL, CH y CL, y, DH y DL, H significando Hight (alto) y L significando Low (bajo), indicando la parte alta o la parte baja del registro correspondiente de 16 bits (ver

esquema). Un programa poda usar tanto los registros de 16 bits como los registros de 8 bits. Aparte del uso general de los registros para hacer clculos aritmticos y lgicos, existen instrucciones que usan estos registros con un uso particular especializado, como se indica a continuacin: Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida, y multiplicacin y divisin (estas dos ltimas en conjunto con el registro DX) Registro BX: El registro BX es el registro base, y es el nico registro de propsito general que puede ser un ndice para direccionamiento indexado Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este registro el nmero de puerto de entrada/salida, y en las operaciones de multiplicacin y divisin de 16 bits se utiliza junto con el acumulador AX

Registros ndice
Los registros SI y DI estn disponibles para direccionamiento indexado y para operaciones de cadenas de caracteres. Registro SI: El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. El SI est asociado con el segmento DS. Registro DI: El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. El DI est asociado con el segmento ES.

Registros Apuntadores
Los registros SP (apuntador de pila) y BP (apuntador base) estn asociados con el registro SS y permiten al sistema acceder a datos en el segmento de la pila. Registro SP: El apuntador de pila de 16 bits est asociado con el segmento SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que est siendo procesada en la pila. El sistema maneja de manera automtica este registro, aunque el programa puede hacer ciertas manipulaciones con l. Registro BP: El apuntador base de 16 bits facilita la referencia de parmetros dentro de la pila.

Registros de Banderas
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). Lainterrupcin 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.

Registros de Segmento
Definen reas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas reas pueden solaparse total o parcialmente. No es posible acceder a una posicin de memoria no definida por algn segmento: si es preciso, habr de moverse alguno. Registro CS: El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, ms un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Para propsitos de programacin normal, no se necesita referenciar el registro CS. Registro DS: La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. Esta direccin, ms un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un byte especfico en el segmento de datos. Registro SS: El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento para manejar el direccionamiento de memoria. El registro ES est asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada.

Registro Apuntador de Instrucciones


El registro IP de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se est ejecutando actualmente en la memoria.

Acceso a memoria y a puertos


Ambos microprocesadores tienen un rango de 65536 direcciones de entrada/salida que se pueden acceder como puertos de 8 16 bits. En la parte baja de la memoria hay 256 vectores de interrupcin. Estos procesadores usaban 20 bits de direccin que les permita acceder hasta 1 MB de memoria. Sus registros internos eran de slo 16 bits, por lo que se desarroll un mecanismo usando registros de segmento para poder acceder al megabyte de memoria. El 8086 y el 8088 tenan cuatro registros de segmento de 16 bits (CS, DS, ES y SS). En lugar de suministrar los 4 bits faltantes para direccionar los 20 bits, como la mayora de los procesadores segmentados, el 8086 y el 8088 desplazan el contenido del registro de segmento 4 bitshacia la izquierda y lo suman a una direccin de memoria de 16 bits proveniente de registros ndice (BX, SI, DI, BP, SP, IP) y opcionalmente una constante, siendo el resultado la direccin efectiva. Esto suele ser considerado como un mal diseo, aunque puede ser aceptable, e incluso til en el lenguaje ensamblador. Por el contrario, provoca confusin cuando se hace un uso extensivo de lospunteros (como en el lenguaje C), debido a que es posible que dos punteros con diferentes valores apunten a la misma direccin de memoria. Este esquema de segmentos se cambi en el Intel 80286 y luego en el Intel 80386.

Segmentacin

Clculo de la direccin efectiva mediante el uso de un segmento y un offset. El segmento (de 16 bits) se desplaza 4 bits a la izquierda (se multiplica por 16), y se le suma el registro de direccionamiento (de 16 bits), dando por resultado una direccin lineal de 20 bits.

Segmentacin de memoria del x86. Haba tambin cuatro registros de 16 bits de segmento que permitan al 8086 y 8088 tener acceso a un megabyte de memoria de una manera inusual. En vez de concatenar el registro de segmento con el registro de direccin, como en la mayora de los procesadores cuyo espacio de direccin exceda su tamao de registro, el 8086 y el 8088 desplazaban el segmento de 16 bits slo cuatro bits hacia la izquierda antes de sumarlo un offset de 16 bits (16segmento + offset), produciendo una direccin externa (efectiva o fsica) de 20 bits a partir del par segmento:offset de 32 bits. Consecuentemente, cada direccin externa poda ser referida por 212 = 4096 diferentes pares segmento:offset. La separacin de 16 bytes entre las bases del segmento (debido al desplazamiento de 4 bits) fue llamada un prrafo. Aunque fue considerado complicado e incmodo por muchos programadores, este esquema tambin tena ventajas; un pequeo programa (menos de 64 KB) poda ser cargado comenzando en un offset fijo (como 0) en su propio segmento, evitando la necesidad de relocalizacin, con a lo ms 15 bytes de alineacin desperdiciados. Los compiladores para la familia 8086 comnmente soportaban dos tipos de punteros, cerca y lejos (near y far). Los punteros near eran offset de 16 bits implcitamente asociados con el segmento del cdigo y/o de datos del programa y as podan ser usados slo dentro de partes de un programa suficientemente pequeo para caber en un segmento. Los punteros far eran pares segmento:offset de 32 bits que se resolvan en direcciones externas de 20 bits. Algunos compiladores tambin soportaban punteros enormes (huge), que eran como los punteros far salvo que la aritmtica de puntero en un puntero huge lo trataba como un puntero lineal de 20 bits, mientras que la aritmtica de puntero en un puntero huge daba vueltas (wrapped around) dentro de su offset de 16 bits sin tocar la parte del segmento de la direccin. Para evitar la necesidad de especificar near y far en numerosos punteros, estructuras de datos, y funciones, los compiladores tambin soportan los "modelos de memoria" que especifican tamaos de puntero por defecto. Los modelos minsculo (tiny) (64K mximo), pequeo (small) (128K mximo), compacto (compact) (datos > 64K), medio (medium) (cdigo > 64K), grande (large) (cdigo y datos > 64K), y enorme (huge) (arreglos individuales > 64K), cubran las combinaciones de punteros near. far y enorme para cdigo y datos. El modelo tiny significaba que el cdigo y los datos estaban compartidos en un slo segmento, justo como en la mayora de los procesadores basados en 8 bits, y poda ser usado para construir archivos .com por ejemplo. Las bibliotecas precompiladas vinieron a menudo en varias versiones compiladas para diversos modelos de memoria. Segn Morse y otros, los diseadores comtemplaban realmente usar un desplazamiento de 8 bits (en vez de 4 bits), para crear un espacio de direccin fsica de 16 MB. Sin embargo, pues que esto habra forzado a los segmentos comenzar lmites de 256 bytes, y, alrededor de 1976, 1 MB era considerado muy grande para un microprocesador, la idea fue descartada. Tambin, no haba suficientes pines disponibles en un paquete barato de 40 pines.11 En principio, el espacio de direccin de la serie x86 pudo haberse extendido en procesadores posteriores, aumentando el valor del desplazamiento, mientras las aplicaciones obtuvieran sus segmentos del sistema operativo y no hicieran asunciones sobre la equivalencia de diferentes pares segmento:offset.12 En la prctica el uso de punteros huge y de mecanismos similares era amplio

y la direccin plana de 32 bits se hizo posible, con los registros de offset de 32 bits en el 80386, eventualmente extender el lmite del rango de direcciones en una forma ms general.
Portando software viejo

Los pequeos programas podan ignorar la segmentacin y slo usar la direccin plana de 16 bits. Este permita al software de 8 bits ser portado con bastante facilidad al 8086 y 8088. Los autores del MS-DOS tomaron ventaja de esto proporcionando una Interface de programacin de aplicaciones muy similar a la del CP/M as como incluyendo el simple formato de archivo ejecutable .com, idntico al del CP/M. Esto era importante cuando el 8086/8088 y el MS-DOS eran nuevos, porque permiti que muchas aplicaciones existentes de CP/M (y otros) hacerse rpidamente disponibles, facilitando grandemente la aceptacin de la nueva plataforma.
Direccin de la primera instruccin ejecutable: FFFF:0

Los procesadores 8088 y 8086, por diseo de su hardware, ejecutaban su primera instruccin en la direccin FFFF:0 (16 bytes por abajo del tope de su capacidad de memoria de 1 MB con sus 20 bits de direccionamiento). En esta rea debe haber una ROM para poder ejecutar sus instrucciones al encender o reiniciar el computador (o dispositivo). En el caso del IBM PC, en esa rea estaba el IBM PC ROM BIOS, y la primera instruccin que ste ejecutaba era un salto (JMP) al inicio del cdigo del Power On Self Test (POST), donde haba cdigo para revisar el CPU y revisar e inicializar los diferentes componentes del hardware y el propio BIOS del computador, y al final se ejecutaba Boot Strap Loader, que iniciaba el Bootstrap.13 Los microprocesadores de la lnea x86 han heredado esta direccin de memoria (FFFF:0) para la primera instruccin ejecutable.

Modos de direccionamiento
Los procesadores 8086 y 8088 tenan los siguientes modos de direccionamiento: Implcito. El dato est implcito en la propia instruciin. Ej. STC, STD y STI, (Set Carry, Set Direcction y Set Interrupts) encienden el flag correspondiente indicado en la propia instruccin. CBW (Convert Byte to Word) extiende el bit del signo del registro AL a AX. Ni el AL ni el AX son especificados, puesto que la instruccin CBW implcitamente trabaja sobre ellos. Inmediato. El dato a operar est inmediatamente despus del opcode de la instruccin. Ej, MOV AX, 5 Registro. El dato est en un segundo registro. Ej. MOV AX, BX. Aqu, el dato est en el registro BX Directo. La direccin del dato est en el campo de la direccin del opcode. Ej. MOV AX, [100h]. Aqu se mueve (copia) el contenido de las direcciones 100h y 101h al registro AX. En este caso se mueven dos bytes puesto que AX es de 16 bits. Si fueraMOV BL, [100h] se movera slo un byte pues BL es un registro de 8 bits Indirecto. El dato es especificado mediante una combinacin de registros ndice y base, y puede haber un desplazamiento Base. Un registro base (BX o BP) tienen la direccin de donde se tomar el dato. Ej. MOV AX, [BX] ndice. Un registro ndice (SI o DI) tienen la direccin de donde se tomar el dato. Ej. MOV AX, [SI] Base + Desplazamiento. El dato se tomar de la direccin apuntada por la suma de un registro base ms un desplazamiento. Ej.MOV AX, [BP + 7] ndice + Desplazamiento. El dato se tomar de la direccin apuntada por la suma de un registro ndice ms un desplazamiento. Ej. MOV AX, [DI + 7] Base + ndice. El dato se tomar de la direccin apuntada por la suma de un registro base ms un registro ndice. Ej. MOV AX, [BX + SI] Base + ndice + Desplazamiento. El dato se tomar de la direccin apuntada por la

suma de un registro base, ms un registro ndice, ms un desplazamiento. Ej. MOV AX, [BX + SI + 9]

Patillaje
Pines del 8086 y del 8088. La lneas del bus de direcciones se ven en rojo, las del bus de datos en azul y las del bus de control en verde. Las lneas del bus de energa se ven en negro. Estos procesadores multiplexan en tiempo el bus de direcciones, con el bus de datos y control. En el 8086 se ven los pines del 2 al 16 y los pines 35 al 39 con doble funcionalidad, en un momento determinado transporta la direccin y en otro momento entran o salen los datos (o sale informacin de algunas lneas del bus de control). En el 8088 se comparten los pines 9 al 16 entre el bus de direcciones y de datos, y los pines 35 al 38 entre el bus de direcciones y el de control.
Pines del 8086
GND <-> D14 <-> D13 <-> D12 <-> D11 <-> D10 <-> D9 <-> D8 <-> D7 <-> D6 <-> D5 <-> D4 <-> D3 <-> D2 <-> D1 <-> D0 --> NMI -->INTR --> CLK GND +--\/--+ 1| |40 2| |39 3| |38 4| |37 5| |36 6| |35 7| |34 8| |33 9| Intel|32 10| 8086 |31 11| |30 12| |29 13| |28 14| |27 15| |26 16| |25 17| |24 18| |23 19| |22 20| |21 +------+ Vcc (+5V) A15 --> D15 <-> A16 --> S3 --> A17 --> S4 --> A18 --> S5 --> A19 --> S6 --> !BHE/S7 --> MN/!MX <-!RD --> HOLD, !RQ/!GTO HLDA, !RQ/!GT1 !WR, !LOCK M/!IO, !S2 DT/!R, !S1 !DEN, !S0 ALE, QS0 !INTA, QS1 !TEST <-READY <-RESET <--

<-<-<-<-<-<-<-<-<-<-<-<-<-<-<--

A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

<-> <-> --> --> --> --> --> -->

Pines del 8088

Adems del bus externo de datos, que se reduce a 8 bits, la diferencia con el 8086 es mnima)
GND <-- A14 <-- A13 <-- A12 <-- A11 <-- A10 <-- A9 <-- A8 <-- A7 <-- A6 <-- A5 <-- A4 <-- A3 <-- A2 <-- A1 <-- A0 --> NMI -->INTR +--\_/--+ 1| |40 2| |39 3| |38 4| |37 5| |36 6| |35 7| |34 8| |33 9| Intel |32 10| 8088 |31 11| |30 12| |29 13| |28 14| |27 15| |26 16| |25 17| |24 18| |23 Vcc (+5V) A15 --> A16 --> S3 --> A17 --> S4 --> A18 --> S5 --> A19 --> S6 --> !SSO....HIGH, MN/!MX !RD HOLD....!RQ/!GTO HLDA....!RQ/!GT1 !WR.....!LOOK M/!IO...!S2 DT/!R...!S1 !DEN....!S0 ALE.....QS0 !INTA...QS1 !TEST

<-> <-> <-> <-> <-> <-> <-> <->

D7 D6 D5 D4 D3 D2 D1 D0

--> <---> <-> <-> --> --> --> --> --> --> <--

--> CLK 19| |22 READY GND 20| |21 RESET +-------+

<-<--

Desempeo
Aunque fue opacado en parte por otras opciones de diseo en este particular chip, el bus multiplexado limitaba el desempeo ligeramente; las transferencias de cantidades de 16 bits o de 8 bits fueron hechas en ciclos de acceso a memoria de cuatro ciclos del reloj, que comparado a los tpicos CPU contemporneos de 8 bits, era ms rpido cantidades de 16 bits, aunque ms lento en cantidades de 8 bits. Como las instrucciones variaban de uno a seis bytes, la lectura (fetch) y la ejecucin fueron hechos concurrentemente (tal y como sigue siendo en los procesadores x86 de hoy): La Unidad de Interface del Bus aliment el flujo de instrucciones a la Unidad de Ejecucin a travs de una cola prefetch de 6 bytes para el 8086 y 4 bytes para el 8088 (una forma dbilmente acoplada de pipeline), acelerando operaciones en los registros y con los operandos inmediatos, mientras que las operaciones de memoria desafortunadamente llegaron a ser ms lentas; cuatro aos ms tarde, este problema de desempeo fue corregido con el 80186, 80188, y el 80286. Sin embargo, el 8086 y el 8088 vinieron con una completa arquitectura de 16 bits, con una ALU de ancho completo, significando que las instrucciones aritmticas de 16 bits ahora podan ser realizadas en un simple ciclo del ALU, en vez de los dos ciclos usando acarreo usadas por el 8080 y el 8085, acelerando tales instrucciones considerablemente. Igualmente se tena un mejor desempeo con las operaciones lgicas de 16 bits. Combinado con la ortogonalizacin de las operaciones versus los tipos de operandos y modos de direccionamiento, as como con otras mejoras, hizo bastante significativo el aumento del desempeo sobre el 8080 o el 8085, a pesar de los casos donde los chips ms viejos podan ser ms rpidas.

Tiempos de ejecucin para las instrucciones tpicas (en ciclos de reloj) Registro Instruccin Registro-Registro Inmediato Registro-Memoria Memoria-Registro Memoria-Inmediato MOV 2 4 8+EA 9+EA 10+EA ALU 3 4 9+EA, 16+EA, 17+EA JMP Registro => 11 ; Etiqueta => 15 ; Condicin, Etiqueta=> 16 Multiplicacin 70~160 (dependiendo del operando dato como del tamao) ms EA entera Divisin entera 80~190 (dependiendo del operando dato como del tamao) ms EA con signo
EA = tiempo para computar la direccin efectiva (Effective Address (EA)), extendindose de 5 a 12 ciclos en el 8086 y hasta 19 en el 8088. Los tiempos son el mejor caso, dependiendo de estado del prefetch, la alineacin de la instruccin, y de otros factores. Como puede verse de estas tablas, las operaciones en los registros y los operandos inmediatos eran rpidas (entre 2 y 4 ciclos), mientras que las instrucciones con operandos en memoria y los JMP (salto incondicional) eran absolutamente lentas; los saltos tomaron ms ciclos que en los simples 8080 y 8085. El 8088 (utilizado en el IBM PC) fue adicionalmente obstaculizado por su ms estrecho bus de datos de 8 bits. Las razones por las que la mayora de las instrucciones relacionadas con la memoria eran lentas eran triples: Las unidades de lectura (fetch) y de ejecucin dbilmente acopladas son eficientes para el prefetch de la instruccin, pero no para los saltos (JMP) y el acceso de datos al azar (sin usar medidas especiales).

No se ofreci un sumador dedicado para el clculo de las direcciones; las rutinas


de microcdigo tuvieron que usar el ALU principal para esto (aunque haba un sumador dedicado para el segmento + offset). Los buses de direccin y datos estaban multiplexados, forzando un ciclo de bus levemente ms largo (33~50%) que en los tpicos procesadores de 8 bits contemporneos. Sin embargo, el desempeo del acceso a la memoria fue drsticamente mejorado con los chips de la siguiente generacin de Intel. El80186, 80188, y 80286 tenan hardware dedicado para de clculo de direcciones, ahorrando muchos ciclos, y el 80286 tambin tena adicionalmente buses de direccin y datos separados (no-multiplexados).

Anexo:Listados de instrucciones x86


El conjunto de instrucciones x86 ha sido extendido varias veces, introduciendo registros ms amplios y tipos de datos y/o nueva funcionalidad.

Instrucciones con enteros


Este es el conjunto de instrucciones completo del 8086/8088, pero la mayora de estas instrucciones, si no todas, estn disponibles en el modo de 32 bits, ellas simplemente operaran en registros y valores de 32 bits (EAX, EBX, etc) en vez de sus contrapartes de 16 bits (AX, BX, etc). Ver lenguaje ensamblador x86 para un tutorial rpido para esta familia de procesadores. El conjunto de instrucciones actualizado tambin est agrupado de acuerdo a la arquitectura (i386, i486, i686) y ms generalmente est referido como x86_32 y x86_64 (tambin conocido como AMD64).

Representacin de nmeros enteros


Los nmeros en los registros pueden representarse de dos maneras. La primera es una representacin de entero positivo sin signo, cuyo rango ser desde 0 hasta 2n, donde n es 8, 16, 32 64 bits dependiendo del tamao del registro. La segunda es una representacin de entero con signo (complemento a dos, con un rango entre -2n-1 hasta 2n-1 - 1, donde n es, al igual que en la anterior, el ancho de bits del registro, (8, 16, 32 64 bits). Rango de los nmeros de acuerdo al tamao de los registros y su representacin como entero con signo y sin signo: Tamao del registro 8 bits 16 bits 32 bits Enteros sin signo Enteros con signo (complemento a dos)

0 a 255 -128 a 127 0 a 65.535 -32.768 a 32.767 0 a 4.294.967.295 -2.147.483.648 a 2.147.483.647 0a -9.223.372.036.854.775.808 a 64 bits 18.446.744.073.709.551.615 9.223.372.036.854.775.807 Las operaciones aritmticas del procesador trabajan, generalmente, indistintamente con cualquiera de las dos representaciones. La misma instruccin, (el mismo opcode), para una suma, por ejemplo, puede sumar dos valores en representacin como enteros positivos sin signo o dos valores en representacin de enteros con signo. Para el procesador es lo mismo, y es el programador (o el compilador) el que trata o piensa en los nmeros como estando en una representacin u otra. Hay, sin embargo, algunas instrucciones, como la multiplicacin y la divisin, por ejemplo, donde son necesarios dos opcodes diferentes , uno para cuando se realizan operaciones con enteros positivos sin signo, y otro para cuando se realizan operaciones con enteros con signo, ya que se necesita un tratamiento especial para cada caso. Existen las instrucciones MUL y DIV para trabajar con enteros positivos sin signo, y las IMUL e IDIV para trabajar con enteros con signo. Lo mismo sucede con las instrucciones de SHIFT (desplazamiento), que tienen versiones para manejar nmeros en representacin entera sin signo (SHL y SHR) y con signo (SAL y SAR).

El CPU tambin puede trabajar con operaciones con nmeros en representacin BCD, pero como no hay instrucciones especficas para BCD, se usan las operaciones aritmticas convencionales, pero hay que hacer un ajuste adicional, usando instrucciones especializadas, para obtener el resultado correcto en representacin BCD.

Instrucciones x86
Abajo una tabla con las instrucciones x86. La columna CPU indica el primer CPU que tuvo la instruccin, comenzando con el Intel 8086 y el Intel 8088, que fueron los primeros CPU de la serie x86
Mueve y copia datos
Mueve y copia datos

CPU Instruccin Opcode 8086/8 MOV 8 80386 MOVZX 80386 MOVSX 8086/8 XCHG 8 8086/8 XLAT 8
Operaciones de stack

Movimiento de datos Significado Traduccin Move Move with zero-extend Mueve

Notas En realidad es una copia, ya que en el destino se copia lo que est en el origen sin alterar este ltimo

Mueve con extensin de cero Mueve con Move with extensin de sign-extend signo Intercambia Exchange data datos Traslacin de Table look-up 11010111 bsqueda en translation tabla Operaciones de stack

CPU Instruccin Opcode Significado Traduccin 8086/8 Push data Apila dato PUSH 8 onto stack en el stack Desapila 8086/8 Pop data POP 0x0F dato desde 8 from stack el stack Apila 8086/8 Push flags PUSHF 10011100 bandera en 8 onto stack el stack Desapila dato desde 8086/8 Pop data into el stack POPF 10011101 8 flags register hacia los registros de bandera 80186/ PUSHA Push all Apila todos 188 general los registros purpose de propsito registers general

Not

POP CS (opcode 0x0F) solo trabaja en el 8086/8088 para nuevas instrucciones

Equivalente a
PUSH AX, CX, DX, BX, SP, BP, SI, DI

onto stack Pop all general purpose registers from stack Push all double-word (32-bit) registers onto stack Pop all double-word (32-bit) registers from stack Push EFLAGS register onto stack

80186/ POPA 188

hacia el stack Desapila todos los Equivalente a registros de propsito POP DI, SI, BP, SP, BX, DX, CX, AX general desde el stack Apila todos los registros de 32 bits en el stack

80386 PUSHAD

80386 POPAD

80386 PUSHFD

80386 POPFD

Desapila todos los registros de No desapila el registro ESP 32 bits en el stack Apila el registro EFLAGS en el stack Desapila dato al Pop data into registro EFLAGS EFLAGS register desde el stack Equivalente a Enter stack frame Entra un marco de stack
PUSH BP MOV BP, SP SUB SP, n ; ; ; ; ; ; ;

80186/ ENTER 188

salva BP guarda el valor original de abre un espacio en el stack Ahora, con BP se pueden refe de la funcin, que vienen en y las variables locales de l en el espacio reservado aqu

80186/ LEAVE 188


Entrada y salida por puertos

Sale del Leave stack marco de frame stack

Equivalente a
MOV SP, BP POP BP ; Restaura SP ; Restaura BP

Entrada/salida de puertos CPU Instruccin Opcode Significado Traduccin Notas 8086/88 IN Input from port Entrada desde un puerto 8086/88 OUT Output to port Salida a un puerto
Conversiones

CPU Instruccin Opcode

Conversiones Significado Traduccin

Notas

8086/8 CBW 8 8086/8 CWD 8

Convierte byte a word Convierte Convert word 10011001 palabra a to doubleword doblepalabra 10011000 Sign-extends EAX into EDX, forming the quad-word Convierte Convert EDX:EAX. Since (I)DIV uses doblepalabra a double-word EDX:EAX as its input, CDQ must palabra to quad-word be called after setting EAX if EDX cudruple is not manually initialized (as in 64/32 division) before (I)DIV Convert word Convierte Unlike CWD, CWDE sign-extends to doublepalabra a AX to EAX instead of AX to word doblepalabra DX:AX Convierte Little endian a big Intercambio de Byte Swap endian (y viceversa). Solo trabaja bytes en registros de 32 bits

Convert byte to word

80386 CDQ

80386 CWDE

80486 BSWAP

Operaciones aritmticas y lgicas


Operaciones aritmticas

Aritmticas CPU Instruccin Opcode Significado Traduccin Notas 8086/8 ADD Add Suma 8 8086/8 Add with destino = destino + origen + flag ADC Suma con acarreo 8 carry de acarreo Exchange and Intercambia y 80486 XADD Add suma 8086/8 SUB Subtraction Resta 8 8086/8 Subtraction Resta con acarreo SBB 8 with borrow ("toma prestado") 8086/8 Increment by INC Incremento por 1 8 1 8086/8 Decrement by DEC Decrementa por 1 8 1 Cambio de signo. til para nmeros en representacin con Two's Negacin 8086/8 signo (no con representacin de NEG complement delcomplemento a 8 enteros sin signo). Es equivalente negation dos a invertir los bits con NOT, y luego sumar 1 8086/8 Unsigned Multiplicacin sin MUL 8 multiply signo 8086/8 Signed Multiplicacin con IMUL 8 multiply signo 8086/8 Unsigned DIV Divisin sin signo 8 divide

8086/8 IDIV 8
Operaciones BDC y ASCII

Signed divide Divisin con signo Operaciones BDC y ASCII Significado Traduccin Notas Decimal adjust Ajuste decimal AL after de AL despus Usado en BCD addition de la suma Decimal adjust Ajuste decimal AL after despus de Usado en BCD subtraction sustraccin ASCII adjust Ajuste ASCII AL after de AL despus Usado en BCD Addition de la suma Ajuste ASCII ASCII adjust de AL despus AL after de la subtraction sustraccin rowspan=2 | Solo la versin de base 10 est documentada. La hoja de datos (datasheet) del 8086/8088 solo documenta la versin de base 10 de la instruccin AAD (opcode 0xD5 0x0A), pero cualquier base Ajuste ASCII ASCII adjust trabajar (como 0xD5 0x02 para de AX despus AX after binario, por ejemplo). La de la multiplication documentacin posterior de Intel multiplicacin tambin tiene la forma genrica. Los procesadore NEC V20 y V30 (y posiblemente otros CPU NEC serie V) siempre usan base 10, ignorando el argumento, causando un nmero de incompatiblidades ASCII adjust Ajuste ASCII AX before de AX antes de division la divisin

CPU Instruccin Opcode 8086/ DAA 88 8086/ DAS 88 8086/ AAA 88 8086/ AAS 88 00100111

00101111

00110111

00111111

8086/ AAM 88

8086/ AAD 88
Operaciones lgicas (bitwise)

Lgicas (bitwise) CPU Instruccin Opcode Significado Traduccin Notas 8086/88 AND Logical AND Y lgica 8086/88 OR Logical OR O lgico 8086/88 XOR Exclusive OR O exclusivo (XOR) 8086/88 NOT Logical NOT NO lgico Rotacin de bits CPU Instruccin Opcode Significado Traduccin 8086/88 ROL Rotate left Rota hacia la izquierda 8086/88 ROR Rotate right Rota hacia la derecha 8086/88 RCL Rotate left (with carry) Rota hacia la izquierda con

Notas

acarreo 8086/88 RCR Rotate right (with carry) Rota a la derecha con acarreo Desplazamiento de bits CPU Instruccin Opcode Significado Traduccin Notas Los bits se desplazan a la izquierda, el bit de la derecha se Shift left 8086/8 Desplazamiento a le asigna cero, el bit de la SHL (unsigned shift 8 la izquierda izquierda desaparece del left) operando pero queda guardado en el flag del acarreo Los bits se desplazan a la derecha, el bit de la izquierda se Shift right 8086/8 Desplazamiento le asigna cero, el bit de la SHR (unsigned shift 8 hacia la derecha derecha desaparece del operando right) pero queda guardado en el flag del acarreo Shift left 80386 SHLD double-word Shift right 80386 SHRD double-word Desplazamiento de bits (nmeros con representacin de signo (complemento a dos)) CPU Instruccin Opcode Significado Traduccin Notas Desplaza los bits del operando Shift hacia la izquierda sin tocar el Desplaza 8086/ Arithmetically bit ms significativo del SAL aritmticamente 88 left (signed shift operando (bit del signo). Esto hacia la izquierda left) permite multiplicar por 2 un operando con signo Desplaza los bits del operando hacia la derecha. El bit del Shift Desplaza signo no se desplaza y adems 8086/ Arithmetically SAR aritmticamente se copia en el bit 88 right (signed hacia la derecha inmediatamente a la derecha. shift right) Esto permite dividir entre dos un operando con signo
Operaciones con bits

Operaciones con bits CPU Instruccin Opcode Significado Traduccin Notas 80386 BT Bit test Prueba de bit 80386 BTR Bit test and reset Prueba de bit y pone a cero 80386 BTS Bit test and set Prueba de bit y pone a 1 80386 BTC Bit test and complement Prueba de bit y complementa 80386 BSF Bit scan forward Busca bit hacia alante 80386 BSR Bit scan reverse Busca bit hacia atrs
Operaciones con los flags (banderas)

Flags CPU Instruccin Opcode Significado Traduccin Notas

8086/8 8 8086/8 8 8086/8 8 8086/8 8 8086/8 8 8086/8 8 8086/8 8 8086/8 8

CMC CLC STC CLI STI CLD STD LAHF

11110101 11111000 11111001 11111010 11111011 11111100 11111101 10011111 10011110

Complement carry flag

Complementa el flag del acarreo Aclara el flag del Clear carry flag acarreo Enciende el flag del Set carry flag acarreo Clear interrupt Aclara el flag de las flag interrupciones Enciende el flag de Set interrupt flag las interrupciones Clear direction Aclara el flag de la flag direccin Enciende el flag de la Set direction flag direccin Load flags into Carga los flags al AH register registro AH Store AH into flags Almacena AH en el registro de flags usado para poner varios valores especficos en los flgs

8086/8 SAHF 8

Operaciones de string

Carga el registro AL, AX o EAX CPU Instruccin Opcode Significado Traduccin Notas Carga el 8086/8 Load string siguiente LODSB 8 byte byte de un string Carga la siguiente 8086/8 LODSW string word palabra (16 8 bits) de un string Carga la siguiente doble 80386 LODSD Load string can be prefixed with REP palabra (32 bits) de un string Guarda en contenido del registro AL, AX o EAX CPU Instruccin Opcode Significado Traduccin Notas Guarda un 8086/8 Store byte in STOSB byte de 8 string string Guarda una 8086/8 Store word STOSW palabra de 8 in string string 80386 STOSx Store string Guarda una doble palabra de

string Mueve bytes, words o doublewords CPU Instruccin Opcode Significado Traduccin Notas Move byte Mueve byte 8086/8 MOVSB from string de strin a 8 to string string Move word Mueve 8086/8 MOVSW from string palabra de 8 to string strin a string Move data Mueve datos MOVSW, 80386 from string desde string MOVSD to string a string Compara bytes, words o doublewords CPU Instruccin Opcode Significado Traduccin Notas Compare Compara 8086/8 CMPSB bytes in bytes en 8 memory memoria Compare Compara 8086/8 CMPSW words in palabras en 8 memory memoria Compare Compara 80386 CMPSD string string de Compares ES:[(E)DI] with DS:[SI] double-word doblepalabra Busca bytes, words o doublewords CPU Instruccin Opcode Significado Traduccin Notas 8086/8 Compare Busca byte SCASB 8 byte string en string Busca 8086/8 Compare SCASW palabra en 8 word string string Scan string Busca doble 80386 SCASD data double- palabra en word string Operaciones de string (con puertos de entrada/salida) 80186/ Instruccin Opcode Significado Traduccin Notas 188 Equivalente a Entrada 80186/ Input from desde un INS ; Lee el puerto de entrad 188 port to string puerto hacia IN AX, DX MOV ES:[DI], AX ; Guarda el contenido del un string ; Ajusta DI de acuerdo al tamao del operan 80186/ OUTS 188 80386 INSB, INSW, INSD

Equivalente a Salida de Output string string por un MOV AX, DS:[SI] ; Lee un dato desde DS:[SI to port OUT DX, AX ; Enva el dato al puerto puerto Input from Entrada de port to string un tamao with explicit especfico same as INS

; Ajusta SI de acuerdo al tamao del operan

size

desde un puerto a un string

Prefijo de repeticin CPU Instruccin Opcode Significado Traduccin Notas Repeat Repite 8086/8 MOVS/STO MOVS/STO REPxx (REP, REPE, REPNE, REPNZ, REPZ) 8 S/CMPS/LO S/CMPS/LO DS/SCAS DS/SCAS
Control del flujo del programa
Saltos incondicionales

Salto incondicional CPU Instruccin Opcode Significado Traduccin Notas 8086/8 Salto La ejecucin del programa salta a la JMP Jump 8 (incondicional) direccin apuntada por JMP
Comparaciones

Comparaciones CPU Instruccin Opcode Significado Traduccin Compare Compara 8086/88 CMP operands operandos CoMPare and Compara e 80486 CMPXCHG eXCHanGe intercambia CoMPare and Compara e Pentium CMPXCHG8B eXCHanGe 8 intercambia 8 bytes bytes Logical Comparacin 8086/88 TEST compare lgica (Y) (AND)

Notas

80386

SETx

Set byte to one on condition

Compara dos operandos y ajusta los flags. No se alteran los operandos (SETA, SETAE, SETB, SETBE, SETC, SETE, SETG, SETGE, SETL, SETLE, SETNA, Ajusta byte de SETNAE, SETNB, SETNBE, acuerdo a una SETNC, SETNE, SETNG, condicin SETNGE, SETNL, SETNLE, SETNO, SETNP, SETNS, SETNZ, SETO, SETP, SETPE, SETPO, SETS, SETZ)

Saltos condicionales

CPU Instruccin Opcode

8086/8 Jxx 8

80386 JCXZ, JECXZ

Notas (JA, JAE, JB, JBE, JC, JCXZ, JE, JG, JGE, JL, JLE, JNA, JNAE, Jump if Salta en caso de JNB, JNBE, JNC, JNE, JNG, condition una condicin JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ) Jump if register Salta si el (E)CX is zero registro (E)CX

Saltos condicionales Significado Traduccin

es cero
Loops (bucles)

CPU Instruccin 8086/8 LOOP/LOOPx 8 80386 LOOPW, LOOPD LOOPEW, LOOPED LOOPZW, 80386 LOOPZD LOOPNEW, 80386 LOOPNED LOOPNZW, 80386 LOOPNZD 80386
Llamadas a subrutinas

Opcode

Notas (LOOPE, LOOPNE, Loop control Control de bucles LOOPNZ, LOOPZ) Bucle; (E)CX es el Loop Bucle registro contador Loop while Loop mientras equal igual Loop mientras Loop while zero cero Loop while not Loop mientras no equal igual Loop while not Loop mientras no zero cero

Loops (bucles) Significado Traduccin

Llamadas a subrutinas CPU Instruccin Opcode Significado Traduccin 8086/88 CALL Call procedure LLamada a procedimiento 8086/88 RET Return from procedure Retorno desde un procedimiento Return from near Retorno desde un procedimiento 8086/88 RETN procedure cercano Return from far Retorno desde un procedimiento 8086/88 RETF procedure lejano
Interruptiones

Notas

CPU Instruccin Opcode 8086/8 INT 8 8086/8 INTO 8

Llamadas de interrupcin Significado Traduccin Call to interrupt Llama una interrupcin

Notas Ejecuta, mediante software, una rutina apuntada por un vector de interrupcin

Call to Llama a 11001110 interrupt if interrupcin en overflow caso de overflow Retornos de interrupcin CPU Instruccin Opcode Significado Traduccin 8086/8 Return from Retorna de una IRET 11001111 8 interrupt interrupcin Interrupt return Retorno de una interrupcin

Notas

80386 IRETx
Detener el procesador

D suffix means 32-bit return, F suffix means do not generate epilogue code (i.e. LEAVE instruction), Use IRETD rather than IRET in 32-bit situations

CPU

Detener el procesador Instruccin Opcode Significado

Traduccin

Notas

8086/88 HLT

11110100 Enter halt state Entra en el estado de parada

Operaciones con registros de segmento

Operaciones con registros de segmento CPU Instruccin Opcode Significado Traduccin 8086/88 LDS Load DS with pointer Carga DS con un puntero 8086/88 LES Load ES with pointer Carga ES con un puntero Load Effective Carga direccin efectiva a un 8086/88 LEA Address registro
Operaciones de sincronizacin entre procesadores

Notas

Operaciones de sincronizacin entre procesadores 8086/ Instruccin Opcode 88 8086/ ESC 88 8086/ LOCK 88 8086/ WAIT 88 11110000 Significado Used with floating-point unit Assert BUS LOCK# signal Wait until not busy Traduccin Notas

10011011

Usado con la unidad de coma flotante Enciende la seal del bus Para multiprocesamiento LOCK# Espera hasta que la seal dl pin Espera hasta de BUSY# se vuelva inactivo que no se est (usado con la unidad de coma ocupado flotante

[editar]Verificacin de lmites de arreglos

CPU

Verificacin de lmites de arreglos Instruccin Opcode Significado Traduccin

80186/1 BOUND 88

Notas Eleva una interrupcin 5 Check array index Chequea el ndice de de software si la prueba against bounds un arreglo con lmites falla

Carga y guarda el registro de tareas

Carga y guarda el registro de tareas CPU Instruccin Opcode Significado Traduccin Notas 80286 LTR Load task register Carga registro de tareas 80286 STR Store task register Guarda registro de tareas
Carga y guarda el estado de la mquina

Carga y guarda el estado de la mquina CPU Instruccin Opcode Significado Traduccin Load machine status Carga la palabra de estatus de la 80286 LMSW word mquina Store machine status Guarda la palabra de estatus de la 80286 SMSW word mquina
Operaciones para cargar y guardar tablas de descriptor

Notas

Tablas de descriptor CPU Instruccin Opcode Significado Traduccin Load local descriptor 80286 LLDT Carga tabla de descriptores local table

Notas

80286 SLDT 80286 LGDT 80286 SGDT 80286 LIDT 80286 SIDT
Segmentos

Store local descriptor table Load global descriptor table Store global descriptor table Load interrupt descriptor table Store interrupt descriptor table

Guarda tabla de descriptores local Carga tabla de descriptores global Guarda tabla de descriptores global Carga tabla de descriptores de interrupcin Guarda tabla de descriptores de interrupcin

Segmentos CPU Instruccin Opcode Significado 80286 LSL Load segment limit Verify a segment for 80286 VERR reading Verify a segment for 80286 VERW writing
No clasificadas

Traduccin Carga lmite del segmento Verifica segmento para la lectura Verifica segmento para la escritura

Notas

CPU 80286 80286 80286

80286 80386 80386 80486 80486 80486 Pentium Pentium Pentium Pentium

No clasificadas Instruccin Opcode Significado Traduccin Notas Adjust RPL field of ARPL selector Clear task-switched CLTS flag in register CR0 Load access rights LAR byte Load all CPU registers, including Undocumented, (80)286 and 386 LOADALL internal ones such only as GDT LFS, LGS Load far pointer LSS Load stack segment Invalidate Internal INVD Caches Invalidate TLB INVLPG Entry Write Back and WBINVD Invalidate Cache This was also added to CPUID CPU IDentification later 80486 processors ReaD from ModelRDMSR Specific Register ReaD Time Stamp RDTSC Counter WRMSR WRite to Model-

Specific Register Resume from System Management Mode This was introduced by the i386SL and later and is also in the i486SL and later. Resumes from System Management Mode (SMM)

Pentium RSM [1]


Otras

Otras CPU Instruccin Opcode Significado Traduccin 8086/88 NOP 0x90

Notas opcode (0x90) equivalente a XCHG No operation No operacin AX, AX

Instrucciones de coma flotante


Instrucciones originales del 8087
Las siguientes son las instrucciones originales que vinieron con el coprocesador numrico Intel 8087, que estaba diseado para suplir funcionalidad de coma flotante a los procesadores Intel 8086 y 8088. Constantes Instruccin Significado Traduccin FLDZ Load 0.0 onto stack Carga 0.0 en el stack FLD1 Load 1.0 onto stack Carga 1.0 en el stack FLDPI Load onto stack Carga en el stack Load log2(e) onto FLDL2E Carga log2(e) en el stack stack Load ln(2) onto FLDLN2 Carha ln(2) en el stack stack Load log2(10) onto FLDL2T Carga log2(10) en el stack stack Load log10(2) onto FLDLG2 Carga log10(2) en el stack stack Operaciones aritmticas Instruccin Significado Traduccin FABS Absolute value Valor absoluto FCHS Change sign Cambio de signo FADD Add Suma FSUB Subtract Resta FSUBR Reverse subtract Resta reversa FMUL Multiply Multiplica FDIV FDIVR FIADD FISUB FISUBR FIMUL Divide Divide reversed Integer add Integer subtract Integer subtract reversed Integer multiply Divide Divide reverso Suma entera Resta entera Resta entera reversa Multiplicacin entera Notas

log2(e) = 1.44269504088896340736 ln(2) = 0.69314718055994530942 log2(10) = 3.32192809488736234787 log10(2) = 0.30102999566398119521 Notas

Ver Error de divisin del Intel Pentium

FIDIV

Integer divide Divisin entera Integer divide FIDIVR Divisin entera reversa reversed FADDP Add and pop Suma y POP FSUBP Subtract and pop Resta y POP Reverse subtract FSUBRP Resta reversa y POP and pop FMULP Multiply and pop Multiplica y POP FDIVP Divide and pop Divide y POP Divide reversed and FDIVRP Divide reverso y POP pop FSCALE Scale by factor of 2 Escala por un factor de 2 Partes de nmero Instruccin Significado Traduccin FRNDINT Round to integer Redondea a entero Extract exponent Extrae el exponente y la FXTRACT and significand parte significativa FPREM Partial remainder Resto parcial Funciones trascendentales Instruccin Significado Traduccin FSQRT Square root Raz cuadrada FPTAN Partial tangent Tangente parcial FPATAN Partial arctangent Arcotangente parcial F2XM1 FYL2X FYL2XP1 2x - 1 y * log2(x) y * log2(x+1) 2x - 1 y * log2(x) y * log2(x+1)

Notas

Notas

Ms preciso que 2x para cercano a cero Si , entonces el logaritmo base - es computado Ms preciso que est cercano a cero Notas cuando

Carga y guarda registros Instruccin Significado Traduccin FXCH Exchange registers Intercambia registros FLD Floating point load Carga coma flotante FILD Load integer Carga entero FBLD Load BCD Carga nmero en BCD FSTP Store and pop Guarda y POP FST Floating point store Guarda coma flotante FIST Store integer Guarda entero Store integer and FISTP Guarda entero y POP pop FBSTP Store BCD and pop Guarda BCD y POP Increment floating Incrementa el puntero del FINCSTP point stack pointer stack de coma flotante

FDECSTP FFREE Instruccin FTST FCOM FCOMP FCOMPP FICOM FICOMP FXAM Instruccin FNOP FWAIT

FINIT FNINIT

Instruccin FCLEX FNCLEX Instruccin

Notas Solo en el 8087, de lo contrario, FENI Enable interrupts Enciende las interrupciones FNOP Enable interrupts, Activa las interrupciones, Solo en el 8087, de lo contrario, FNENI no wait no espera FNOP Solo en el 8087, de lo contrario, FDISI Disable interrupts Desactiva las interrupciones FNOP Disable interrupts, Desactiva las Solo en el 8087, de lo contrario, FNDISI no wait interrupciones, no espera FNOP Control Instruccin Significado Traduccin Notas FLDCW Load control word Carga la palabra de control Guarda la palabra de FSTCW Store control word control

Decrement floating Decrementa el puntero del point stack pointer stack de coma flotante Free register Libera registro Comparaciones Significado Traduccin Test for zero Prueba por cero Compare Compara Compare and pop Compara y POP Compare and pop Compara y POP dos veces twice Integer compare Comparacin entera Integer compare Comparacin entera y POP and pop Examine condition Examina los flags de flags condicin Otras Significado Traduccin No operation No operacin Wait while FPU is Espera mientras el FPU est executing ejecutando Inicializacin Initialize floating Inicializa el procesador de point processor coma flotante Initialize floating Inicializa el procesador de point processor, no coma flotante, no espera wait Excepciones Significado Traduccin Clear exceptions Aclara excepciones Clear exceptions, Aclara las excepciones, no no wait espera Interrupciones Significado Traduccin

Notas

Notas

Notas

Store control word, Guarda la palabra de no wait control, no espera Estatus Instruccin Significado Traduccin FSTSW Store status word Guarda la palabra de estatus Store status word, Guarda la palabra de FNSTSW no wait estado, no espera Estado Instruccin Significado Traduccin FSAVE Save FPU state Guarda el estado del FPU Save FPU state, 16- Guarda el estado del FPU, FSAVEW bit 16 bits Guarda el estado de la Save FPU state, no FNSAVE unidad de punto flotante wait, 8-bit (FPU), no espera, 8 bits Save FPU state, no Guarda el estado del FPU, FNSAVEW wait, 16-bit no espera, 16 bits FRSTOR Restore saved state Restaura el estado salvado FNSTCW FRSTORW Restore saved state Restaura al estado salvado

Notas

Notas

Quizs no disponible realmente en el 8087 Notas

Ambiente Instruccin Significado Traduccin Load environment Carga el estado del FLDENV state ambiente Store FPU Guarda el ambiente del FSTENV environment FPU Store FPU Guarda el ambiente del FNSTENV environment, no FPU, no espera wait Store FPU Guarda el ambiente del FSTENVW environment, 16-bit FPU, 16 bits Store FPU Guarda el ambiente del FNSTENVW environment, no FPU, no espera, 16 bits wait, 16-bit FLDENVW

x86-64
x86-64 es una arquitectura basada en la extensin del conjunto de instrucciones x86 para manejar direcciones de 64 bits. Adems de una simple extensin contempla mejoras adicionales como duplicar el nmero y el tamao de los registros de uso general y de instruccionesSSE. Se trata de una arquitectura desarrollada por AMD e implementada bajo el nombre de AMD64. El primer procesador (para computadoras personales) con soporte para este conjunto de instrucciones fue el Opteron, lanzado en abril de 2003. Posteriormente ha sido implementado en mltiples variantes del Athlon 64 y posteriores; y del Pentium 4 y posteriores de Intel, en ste ltimo caso bajo una versin de Intel llamada Intel 64 (antes EM64T).

Descripcin de la arquitectura
El conjunto de instrucciones del AMD x86-64 (renombrado posteriormente como AMD64) es una extensin directa de la arquitectura del x86 a una arquitectura de 64 bits, motivado por el hecho de que los 4GB de memoria que son direccionables directamente por una CPU de 32 bits ya no es suficiente para todas las aplicaciones. Algunos de los cambios:

Nuevos registros. El nmero de registros de propsito general se ha incrementado de 8 en los


procesadores x86-32 a 16, y el tamao de todos estos registros se ha incrementado de 32 bits a 64 bits. Adicionalmente, el nmero de registros MMX de 128 bits (usados para las instrucciones extendidas SIMD) se ha incrementado de 8 a 16. Los registros adicionales incrementan el rendimiento. Registros MMX (SSE) adicionales: Igualmente el nmero de registros de 128 bits (usados para las instrucciones SSE) han aumentado de 8 a 16. Espacio de direcciones mayor. Debido a la arquitectura de 64 bits, la arquitectura AMD64 puede direccionar hasta 16 exabytes de memoria. Las implementaciones futuras de la arquitectura del AMD64 puede proporcionar hasta 2 exabytes de memoria disponible. Si la paginacin de memoria se utiliza correctamente, los sistemas operativos de 32 bits podran tener acceso a algunas de las extensiones de direccin fsicas sin tener que realizar la ejecucin en modo largo (long).

Instruccin de acceso a datos relativa al puntero: Las instrucciones ahora pueden hacer
referencias relativas al puntero de instrucciones (registro RIP). Esto permite crear cdigo independiente de la posicin que permite un cdigo mucho ms eficiente en bibliotecas dinmicas y cdigo cargado en tiempo de ejecucin. Llamadas al sistema ms rpidas. Debido a que la segmentacin no est soportada en el modo de 64 bits, las llamadas al sistema no tienen las latencias asociadas con almacenar y recuperar la informacin de segmentacin ni tienen que realizar las comprobaciones necesarias de proteccin a nivel de segmentacin. Por lo tanto, AMD ha introducido una nueva interfaz de llamadas al sistema, al que se accede utilizando solamente la instruccin "SYSCALL". Aunque los sistemas operativos todava pueden utilizar el sistema de interrupciones para las llamadas al sistema, en el modo de 64 bits utilizar "SYSCALL" es ms rpido. Instrucciones SSE. La arquitectura AMD 64 incluye las extensiones de Intel SSE y SSE2, las ltimas cpus incluyen las instrucciones SSE3 y algunos tambin las SSE4. Tambin estn soportadas las instrucciones del x86 y MMX. Bit NX. El bit NX es una caracterstica del procesador que permite al sistema operativo prohibir la ejecucin del cdigo en rea de datos, mejorando la seguridad. Esta caractersticas est disponible en los modos de 32 y 64 bits, y est soportada por Linux, Solaris,Windows XP SP2, Windows Server 2003 SP1.

Modos de funcionamiento
Tamao Es necesaria Tamao Requerido tpico del la Tamao por por Modo de por el Extensiones Registro recompilacin defecto del defecto de funcionamiento Sistema del registro de de la direccionamiento los Operativo Propsito aplicacin operandos General Modo 64 bits s 64 s 64 32 Modo SO nuevos 32 32 Modo de largo de 64 bits no no compatibilidad 16 16 16 Modo de Modo SO de 32 no 32 32 no 32 Herencia protegido bit 16 16 heredados Modo 8086 16 16 16

virtual Modo real SO de 16 bit heredados

Explicacin del modo de funcionamiento


Hay dos modos primarios de operacin para esta arquitectura:

Modo Largo
Es el utilizado por algunos BSDs, GNU/Linux (x86_64), Solaris 10, Windows XP Professional (edicin x64), Windows Vista (edicin x64) y Windows 7 (edicin 64 bits). Dado que el conjunto de instrucciones es el mismo, no hay una penalizacin importante en la ejecucin del cdigo x86. Esto no sucede en la arquitectura de Intel IA-64, donde las diferencias en el ISA subyacente implican que la ejecucin de cdigo de 32 bits equivale a utilizar un procesador completamente diferente. En todo caso, en AMD 64, las aplicaciones de 32 bits del x86 podran todava beneficiarse de una recompilacin a 64 bits. Los registros adicionales disponibles en el cdigo de 64 bits, pueden ser utilizados por uncompilador de alto nivel para la optimizacin. Usando el modo largo, un sistema operativo de 64 bits puede ejecutar aplicaciones de 32 bits y 64 bits simultneamente. Tambin un x86-64 incluye un soporte nativo para ejecutar las aplicaciones de 16 bits del x86. Microsoft ha excluido explcitamente el soporte para aplicaciones de 16 bits en la edicin x64 de Windows XP Professional debido a los problemas de conseguir que el cdigo de 16 bits del x86 pueda funcionar con su emulador WoW64.

Modo de Herencia
El modo utilizado por los sistemas operativos de 16 bits, como MS-DOS, y los sistemas operativos de 32 bits, como Windows XP. En este modo, slo se puede ejecutar cdigo de 16 bits o de 32 bits. Los sistemas operativos de 64 bits como Windows XP Professional x64 y Windows Server 2003 x64 no se ejecutarn.

AMD32
Estudio de mercado
AMD64 representa un cambio con el pasado de AMD cuyo comportamiento era seguir los estndares de Intel, aunque mantiene los comportamientos anteriores de Intel extendiendo la arquitectura del x86, desde los 16 bits 8086 hasta los 32 bits 80386, siempre sin eliminar compatibilidad hacia atrs. La arquitectura del AMD64 la arquitectura de 32 bits del x86 (IA-32) aadiendo registros de 64 bits, con modos de total compatibilidad de 32 bits y 16 bits para software ya existente. Incluso el modo de 64 bits permite compatibilidad haca atrs, facilitando a las herramientas del x86, como los compiladores ser modificados a la arquitectura AMD64 con un esfuerzo mnimo. La arquitectura del AMD64 dispone de caractersticas como el bit NX.

Ejemplo
Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de rdenes ejecutables por un microprocesador. Por ejemplo, en el lenguaje ensamblador para un procesador x86: La sentencia

MOV AL, 061h Asigna el valor hexadecimal 61 (97 decimal) al registro "AL".
El programa ensamblador lee la sentencia de arriba y produce su equivalente binario en lenguaje de mquina

Binario: 10110000 01100001 (hexadecimal: B061) El mnemnico MOV es un cdigo de operacin u "opcode". El opcode es seguido por una lista de argumentos o parmetros, completando una tpica instruccin de ensamblador. En el ejemplo, AL es un registro de 8 bits del procesador, al cual se le asignar el valor hexadecimal 61 especificado.
El cdigo de mquina generado por el ensamblador consiste de 2 bytes. El primer byte contiene empaquetado la instruccin MOV y el cdigo del registro hacia donde se va a mover el dato: 10110 000 01100001 | | | | | +---- Nmero 61h en binario | | | +--- Registro AL +-------- Instruccin MOV En el segundo byte se especifica el nmero 61h, escrito en binario como 01100001, que se asignar al registro AL, quedando la sentencia ejecutable como:

10110000 01100001 La cual puede ser entendida y ejecutada directamente por el procesador.

Ejemplo para la arquitectura x86


El siguiente es un ejemplo del programa clsico Hola mundo escrito para la arquitectura de procesador x86 (bajo el sistema operativoDOS).
; --------------------------------------------; Programa que imprime un string en la pantalla ; --------------------------------------------.model small ; modelo de memoria .stack ; segmento del stack .data ; segmento de datos Cadena1 DB 'Hola Mundo.$' ; string a imprimir (finalizado en $) .code ; segmento del cdigo ; --------------------------------------------; Inicio del programa ; --------------------------------------------programa: MOV AX, @data ; carga en AX la direccin del segmento de datos MOV DS, AX ; mueve la direccin al registro de segmento por medio de AX MOV DX, offset Cadena1 ; mueve a DX la direccin del string a imprimir MOV AH, 9 ; AH = cdigo de la funcin del MS DOS para imprimir un string en la pantalla INT 21h ; llamada al MS DOS para imprimir un string en la pantalla INT 20h ; llamada al MS DOS para finalizar el programa end programa

Ejemplo para el computador virtual (POCA)


Una seleccin de instrucciones para una computadora virtual22 ) con las correspondientes direcciones de memoria en las que se ubicarn las instrucciones. Estas direcciones NO son estticas. Cada instruccin se acompaa del cdigo en lenguaje ensamblador generado (cdigo objeto) que coincide con la arquitectura de computador virtual, o conjunto de instrucciones ISA. Dir. Etiqueta Instruccin .begin Cdigo mquina23

a_start 2048 2064 2068 2072 2076 2080 2084 2088 2092 2096 3000

.org 2048 .equ 3000 ld length,% be done 10000000 00000000 10000000 01111111 10000000 01000000 00000001 00000000 10111111 11111111 10000000 11000000 11000011 11100000 00000000 00000000 00000000 00001011

00000010 00000110 10000010 addcc %r1,-4,%r1 11111100 10001000 addcc %r1,%r2,%r4 00000010 11001010 ld %r4,%r5 00000000 00010000 ba loop 11111011 10000110 addcc %r3,%r5,%r3 00000101 10000001 done: jmpl %r15+4,%r0 00000100 00000000 length: 20 00010100 00000000 address: a_start 10111000 .org a_start a:</tt

Ejemplo para el C Intel 8051


Cdigo en lenguaje ensamblador para C Intel 80C51:
ORG 8030H SETB TR0 JNB uSEG,T05SEG CLR TR0 CPL uSEG MOV R1,DPL MOV R2,DPH CJNE R2,#07H,T05SEG CJNE R1,#78H,T05SEG MOV DPTR,#0

T05SEG: ;esta subrutina es utilizada ;para realizar una cuenta de ;0,5 segundos mediante la ;interrupcin del timer 0.

RET

Ejemplo para el Microchip PIC16F84


Cdigo en lenguaje ensamblador para el microcontrolador 16F84 de Microchip:
ORG 0 Inicio bsf clrf movlw movwf bcf Principal movf movwf STATUS,RP0 PORTB 0xFF PORTA STATUS,RP0 PORTA,W Contador

movf btfsc goto sublw btfss END

Contador,F STATUS,Z PuntoDecimal d'9' STATUS,C

También podría gustarte