Sie sind auf Seite 1von 45

UNIVERSIDAD NACIONAL DE SAN AGUSTN AREQUIPA FACULTAD DE INGENIERA DE PRODUCCIN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERA ELECTRNICA

LABORATORIO #04 Ensamblador 8088/8086, direccionamiento y programacin, juego de instrucciones manual INTEL (Windows y Linux Ubuntu)

CURSO AUTORES

: :

Arquitectura de Computadoras Jaita Aguilar, Jos H. Mamani Musaja, Marco A. Miranda Quispe, Kenyo M. 20090992 20083359 20084099

TURNO

Jueves 7:00-8:30 am

Arequipa-Per 18-10-12

Ensamblador 8088/8086 NDICE

EPIE - UNSA

NDICE .................................................................................................................................1 1. 2. 3. 4. INTRODUCCIN ............................................................................................................2 TAMAO DE LOS DATOS ...............................................................................................2 ALMACENAMIENTO DE DATOS......................................................................................2 REGISTROS ...................................................................................................................3 4.1. REGISTROS DE PROPSITO GENERAL ............................................................................. 4 4.2. REGISTROS NDICE .......................................................................................................... 4 4.3. REGISTROS APUNTADORES ............................................................................................ 4 4.4. REGISTROS DE BANDERAS .............................................................................................. 5 4.5. REGISTROS DE SEGMENTO ............................................................................................. 6 4.6. REGISTRO APUNTADOR DE INSTRUCCIONES .................................................................. 6 ACCESO A MEMORIA Y A PUERTOS ...............................................................................7 SEGMENTACIN ...........................................................................................................7 MODOS DE DIRECCIONAMIENTO ..................................................................................9 7.1. DIRECCIONAMIENTO INMEDIATO ................................................................................ 11 7.2. DIRECCIONAMIENTO A REGISTRO ................................................................................ 11 CONJUNTO DE INSTRUCCIONES DEL 8086/08088DE INTEL............................................ 15 BIBLIOGRAFA............................................................................................................. 44

5. 6. 7.

8. 9.

Arquitectura de Computadoras

#1

Ensamblador 8088/8086

EPIE - UNSA

ENSAMBLADOR 8088/8086, DIRECCIONAMIENTO Y PROGRAMACIN, JUEGO DE INSTRUCCIONES MANUAL INTEL (WINDOWS Y LINUX UBUNTU) 1. INTRODUCCIN El lenguaje Ensamblador como cualquier lenguaje de programacin es un conjunto de palabras que le indican al ordenador lo que tiene que hacer. Sin embargo la diferencia fundamental es que cada instruccin escrito en el lenguaje ensamblador tiene una correspondencia exacta con una operacin del procesador. Por lo que son operaciones muy sencillas tales como: Cargar 32 en el registro BX o transferir el contenido del registro CL al CH. As pues, las palabras del lenguaje ensamblador son nemotcnicos que representan el cdigo maquina lenguaje que entiendo el procesador. 2. TAMAO DE LOS DATOS En el 8086/88 se definen los siguientes tamaos de datos: 4 bits :nibble 8 bits :byte 16 bits : word 32 bits : dword 3. ALMACENAMIENTO DE DATOS El 8086/88 usa el formato de almacenamiento denominado little endian, esto quiere decir que el byte menos significativa (LSB) del dato es guardada en la parte baja de la memoria. Por ejemplo el dato 0x1122 ser almacenado en memoria:

Es importante tener esto en cuanta a la hora de acceder a los datos para operar con ellos.

Arquitectura de Computadoras

#2

Ensamblador 8088/8086 4. REGISTROS

EPIE - UNSA

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 ndices de 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 ya que el acceso a los registros es mucho mas 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 AH BH CH DH SI DI BP SP Registro de Bandera - - - - O D I T S Z - A - P - C Flags (Banderas) Registros de Segmentos CS Code Segment de Cdigo) DS Data Segment de Datos) ES ExtraSegment Extra) SS Stack Segment de Pila) Registro apuntador de instrucciones IP (Segmento (Segmento (Segmento (Segmento AL BL CL DL AX (Acumulador) BX (Base) CX (Contador) DX (Datos) Source Index (ndice origen) Destination Index (ndice Destino) Base Pointer (Puntero Base) Stack Pointer (Puntero de Pila)

Registros ndices

Instruction Pointer

Arquitectura de Computadoras

#3

Ensamblador 8088/8086 4.1. REGISTROS DE PROPSITO GENERAL

EPIE - UNSA

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

4.2.

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.

4.3.

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

Arquitectura de Computadoras

#4

Ensamblador 8088/8086

EPIE - UNSA

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.

4.4.

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). 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;

Arquitectura de Computadoras

#5

Ensamblador 8088/8086

EPIE - UNSA

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.

4.5.

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.

4.6.

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.

Arquitectura de Computadoras

#6

Ensamblador 8088/8086 5. ACCESO A MEMORIA Y A PUERTOS

EPIE - UNSA

Ambos microprocesadores tienen un rango de 65536 direcciones de entrada/salida que se pueden accesar 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 accesar hasta 1 MB de memoria. Sus registros internos eran de solo 16 bits, por lo que se desarroll un mecanismo usando registros de segmento para poder accesar el 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 bits hacia 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 los punteros (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. 6. 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 solo 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

Arquitectura de Computadoras

#7

Ensamblador 8088/8086

EPIE - UNSA

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

Arquitectura de Computadoras

#8

Ensamblador 8088/8086 Portando software viejo

EPIE - UNSA

Los pequeos programas podan ignorar la segmentacin y solo 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. Los microprocesadores de la lnea x86 han heredado esta direccin de memoria (FFFF:0) para la primera instruccin ejecutable. 7. MODOS DE DIRECCIONAMIENTO Generacin de la direccin de la instruccin: Todos los registros internos del 8086/8088 son de 16 bits. El bus de direccin es de 20 bits, por lo que se usa ms de un registro interno para generar la direccin de 20 bits. Los 2 registros usados para la direccin de la instruccin son el IP y el CS. Se combinan en una forma especial para generar la direccin de 20 bits. direccin de 20 bits = 1610 * CS + IP Por ejemplo: Si los registros CS e IP contienen los valores: CS = 1000H

Arquitectura de Computadoras

#9

Ensamblador 8088/8086 IP = 0414 H La direccin de 20 bits es: 1610 * 1000H + 0414H = 10000H + 0414H = 10414H

EPIE - UNSA

Esta es la direccin en memoria desde la cual la nueva instruccin debe buscarse. Al registro IP se le refiere como offset, el registro CS * 1610 apunta a la direccin de inicio o segmento en memoria desde el cual se calcula el offset. La Figura A muestra grficamente cmo se calcula la direccin de 20 bits.

Cada direccin generada por el 8086/8088 usa uno de los 4 registros de segmento. Este registro de segmento es recorrido 4 bits hacia la izquierda antes de ser sumado al offset. La instruccin del CPU especfica cules registros internos se usa para generar el offset. Vamos a ver los diferentes modos de direccionamiento tomando como ejemplo la instruccin MOV. Instruccin MOV Transfiere un byte desde el operando fuente al operando destino. Tiene el siguiente formato: MOVdestino, fuente

Arquitectura de Computadoras

#10

Ensamblador 8088/8086 7.1. DIRECCIONAMIENTO INMEDIATO

EPIE - UNSA

El operando fuente aparece en la instruccin. Un ejemplo, es el que mueve un valor constante a un registro interno. MOV AX, 568 7.2. DIRECCIONAMIENTO A REGISTRO Indica que el operando a ser usado est contenido en uno de los registros internos de propsito general del CPU. En el caso de los registros AX, BX, CX o DX los registros pueden ser de 8 a 16 bits

Ejemplos: MOV AX, BX MOV AL, BL ; AX BX ; AL BL

Cuando usamos direccionamiento a registro, el CPU realiza las operaciones internamente, es decir, no se genera direccin de 20 bits para especificar el operando fuente 7.2.1. DIRECCIONAMIENTO DE REGISTRO DIRECTO Especifica en la instruccin la localidad de memoria que contiene al operando. En este tipo de direccionamiento, se forma una direccin de 20 bits. Ejemplo: MOV CX, COUNT El valor de COUNT es una constante. Es usada como el valor offset en el clculo de la direccin de 20 bits El 8086/8088 siempre usa un registro de segmento cuando calcula una direccin fsica. Cul registro se debe usar para esta instruccin? Respuesta: DS En la Figura B, se muestra el clculo de la direccin desde la cual se tomar el dato que se carga en CX. Arquitectura de Computadoras #11

Ensamblador 8088/8086

EPIE - UNSA

Cuando accedamos datos, el registro DS se usa con un offfset para calcular la direccin de 20 bits, ste es el segmento por omisin. Puede ser invalidado por usar un prefijo de segmento en la instruccin. Ejemplo: MOV CX, ES: COUNT Uso del segmento de datos y una constante para desplazamiento Este es el segmento por omisin que se usa. Sin embargo, cualquiera de los 4 segmentos puede usarse. Esto se efecta especificando el registro apropiado en la instruccin. Por ejemplo, suponga que deseamos usar el registro ES en lugar del DS: MOV CX, ES: COUNT

7.2.2.

DIRECCIONAMIENTO DE REGISTRO INDIRECTO Con el modo de direccionamiento de registro ndice, la direccin offset de 16 bits est contenida en un registro base o registro ndice. Esto es, la direccin reside en el registro BX, BP, SI o DI.

Arquitectura de Computadoras

#12

Ensamblador 8088/8086 Ejemplo: MOV AX, [SI]

EPIE - UNSA

El valor de 16 bits contenido en el registro SI debe ser el offset usado para calcular la direccin de 20 bits. Otra vez, debe usarse un registro de segmento para generar la direccin final. El valor de 16 bits en SI se combina con el segmento apropiado para generar la direccin. DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON DESPLAZAMIENTO Este tipo de direccionamiento incluye a los dos modos de direccionamiento anteriores. La direccin offset de 16 bits se calcula sumando el valor de 16 bits especificado en un registro interno y una constante. Por ejemplo, si usamos el registro interno DI y el valor constante (desplazamiento), donde COUNT ha sido previamente definido, el nemotcnico para esta construccin es: MOV AX, COUNT [DI] Si: COUNT = DI = 0872H Entonces, la direccin offset de 16 bits es 0872H DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN REGISTRO BASE Y UN REGISTRO NDICE Este modo de direccionamiento usa la suma de dos registros internos para obtener la direccin offset de 16 bits a usarse en el clculo de la direccin de 20 bits. 0378H 04FAH

Arquitectura de Computadoras

#13

Ensamblador 8088/8086 Ejemplos: MOV MOV

EPIE - UNSA

[BP] [DI], AX ; el offset es BP + DI AX, [BX] [SI] ; el offset es BX + SI

Este es el modo de direccionamiento ms complejo. Es idntico al modo de direccionamiento anterior, excepto que se suma una constante. Ejemplo: Suponga que tenemos los siguientes valores en los registros: DI = BX = 0367H 7890H

COUNT = 0012H 7C09H DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN REGISTRO BASE Y UN REGISTRO NDICE Y UN REGISTRO CONSTANTE. Este modo de direccionamiento indica que el offset especificado por la suma de DI + BX + COUNT sea usado para mover el dato en memoria en el registro AX. MOV AX, COUNT [BX] [DI] La direccin offset de 16 bits es 7C09H. La direccin completa en 20 bits se calcula de la expresin: 1610*DS + 7C09H Si el DS contiene 3000H, la direccin completa de 20 bits es: 3000H + 7C09H = 37C09H

Arquitectura de Computadoras

#14

Ensamblador 8088/8086 8. CONJUNTO DE INSTRUCCIONES DEL 8086/08088DE INTEL

EPIE - UNSA

Las instrucciones presentadas en esta seccin funcionan como se describe en el 8086/8088, el 80286 y el 80386. AAA Aritmtica ASCII Adjust for Addition (Ajuste ASCII para suma): AAA cambia el contenido de AL a un nmero decimal no empacado valido con el nibble de alto orden en ceros. Banderas afectadas AF, CF, OF(no definida), SF(no definida), ZF(no definida), PF(no definida). AAD Aritmtica ASCII Adjust for Divisin (Ajuste ASCII para divisin): AAD multiplica el contenido de AH por 10, aade el resultado al contenido del AL y ubica dicho resultado en AL. Luego, la instruccin pone AH en 0. Esta instruccin se usa antes de dividir nmeros decimales no empacados. Banderas afectadas: SF, ZF, PF, OF(no definida), AF(no definida), CF(no definida). AAM Aritmtica ASCII Adjust for Multiplication (Ajuste ASCII para multiplicacin): Despus de multiplicar dos nmeros decimales no empacados, se utiliza AAM a fin de corregir el resultado para un nmero decimal no empacado. Para que la instruccin trabaje adecuadamente, los nibbles de alto orden de cada nmero multiplicado deben ponerse en 0. Banderas afectadas SF, ZF, PF, OF(no definida), AF (no definida), CF (no definida). AAS Aritmtica ASCII Adjust for Subtraction (Ajuste ASCII para resta): AAS corrige el resultado de una resta decimal no empacada anterior, de tal forma que el valor en AL es un verdadero nmero decimal no empacado. Banderas afectadas AF, CF, OF(no definida), SF(no definida), ZF(no definida), PF(no definida).

Arquitectura de Computadoras

#15

Ensamblador 8088/8086 ADC Aritmtica Add with carry

EPIE - UNSA

(Sumar con acarreo): ADC suma el contenido del operando fuente al operando de destino (y almacena el resultado en este ultimo). Si la bandera de acarreo esta activada, el resultado cambia en incrementos de l. En esta rutina se supone que los valores que se estn aadiendo son binarios. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin ADC AX, BX ;AX=AX+BX+CF ADC AX, TEMP ;AX=AX+TEMP+CF ADC SUM, BX ;SUM=SUM+BX+CF ADC CL,10 ;CL=CL+ 10+CF ADC AX, TEMP [BX] ;Direcc. indirecta ADD Aritmtica Add: (Sumar):ADD aade el contenido del operando fuente al operando de destino (y almacena el resultado en este ultimo). En esta rutina se supone que los valores que estn aadiendo son binarios. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin ADD AX, BX ;AX=AX+BX ADD AX, TEMP ;AX=AX+TEMP ADD SUM, BX ;SUM=SUM+BX ADD CL,10 ;CL=CL+10 ADD AX, TEMP [BX] ;Direcc. indirecta AND Manipulacin de bits Logical AND on Bits (Y lgico sobre bits): Esta instruccin realiza un Y lgico de los operandos y almacena el resultado en el operando de destino. Cada bit del byte o palabra resultante se pone en 1 solo si el bit correspondiente de cada operando se pone en 1. Banderas afectadas OF, SF, ZF, PF, CF, AF(no definida) Ejemplos de codificacin AND AX, BX ; AND AX, TEMP ;TEMP debe ser una palabra AND SUM, BX ;SUM debe ser una palabra Arquitectura de Computadoras #16

Ensamblador 8088/8086 AND Cl,OOOOllllb AND AX, TEMP[BX] ;Nibble alto en cero ;Direccin indirecta

EPIE - UNSA

CALL Transferencia de control Perform Subroutine (Ejecutar una subrutina): CALL hace lo siguiente: 1)mete la direccin de desplazamiento de la siguiente instruccin en la pila; 2)si el procedimiento llamado se declara como far (lejano),mete la direccin de segmento de la siguiente instruccin en la pila; 3)carga IP (apuntador a instruccin) con la direccin de desplazamiento del procedimiento llamado; y 4)si el procedimiento llamado se declara como far, carga CS (segmento de cdigo) con la direccin de segmento del procedimiento llamado. La ejecucin continua entonces en la recin cargada direccin CS:IP hasta que se encuentre RET. Ejemplos de codificacin CALL WHIZ BANG ; CALL [BX) ;Subrutina en direccin en [BX) CALL AX ;Direccin en AX CBW Aritmtica Convert byte to Word (Convertir el byte en palabra): CBW convierte el valor de byte en AL a un valor de palabra en AX extendiendo el valor de bit de alto orden de AL a travs de todos los bits de AH. CLC Control de banderas y procesador Clear Carry Flag (Limpiar la bandera de acarreo): CLC limpia la bandera de acarreo del registro de banderas poniendo la bandera en 0. Bandera afectada CF CLD Control de banderas y procesador Clear Direction Flag (Limpiar la bandera de direccin): CLD limpia la bandera de direccin del registro de banderas poniendo la bandera en 0. Bandera afectada DF CLI Arquitectura de Computadoras #17

Ensamblador 8088/8086 Control de banderas y procesador

EPIE - UNSA

Clear Interrupt Flag (Limpiar la bandera de interrupcin): CLI limpia la bandera de interrupcin del registro de banderas poniendo la en 0. Mientras la bandera de interrupcin este en cero, la UCP no reconocer interrupciones enmascarables. Bandera afectada IF CMC Control de banderas y procesador Complement Carry Flag (Complementar la bandera de acarreo): CMC conmuta la bandera de acarreo del registro de banderas a lo opuesto de la disposicin actual de la bandera. Bandera afectada CF CMP Aritmtica Compare (Comparar): CMP se considera una instruccin aritmtica debido a que el operando fuente se sustrae del operando de destino. Sin embargo, el resultado se emplea para activar las banderas; no se almacena en ningn lugar. Se puede hacer una prueba posterior de las banderas para el control del programa. Banderas afectadas OF, SF, ZF, AF, PF, GF Ejemplos de codificacin CMP AX, BX ; CMP AX, TEMP ;TEMP debe ser una palabra CMP SUM, BX ;SUM debe ser una palabra CMP CL, 3 ;Comparar con una constante CMP AX,TEMP[BX) ;Direccin indirecta CMPSB Manipulacin de cadenas Compare Strings, Byte for Byte (Comparar cadenas, byte por byte): CMPSB compara cadenas, byte por byte. DI(ndice de destino)y SI(ndice de fuente) cambian en incrementos o decrementos de 1, dependiendo de la disposicin de la bandera de direccin. Normalmente, esta instruccin se usa con las instrucciones REPE, REPNE, REPNZ o REPZ a fin de repetir la comparacin para un mximo de CX nmero bytes. Intel lista este mandato como CMPS, pero diversos ensambladores hacen las distinciones de byte (CMPSB) y palabra (CMPSW). Esta instruccin afecta solo las banderas; no se hace ningn cambio a los operandos. Arquitectura de Computadoras #18

Ensamblador 8088/8086 Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin CMPSB ;Comparar cadenas REPE CMPSB ;Repetir CMPSW Manipulacin de cadenas

EPIE - UNSA

Compare Strings, Word for Word (Comparar cadenas, palabra por palabra): CMPSW compara cadenas, palabra por palabra. DI y SI cambian en incrementos o decrementos de 2, dependiendo de la disposicin de la bandera de direccin. Normalmente, esta instruccin se usa junto con las instrucciones REPE, REPNE, REPNZ o REPZ a fin de repetir la comparacin para un mximo de CX palabras. Intel lista este mandato como CMPS, pero diversos ensambladores hacen las distinciones de byte (CMPSB) y palabra (CMPSW). Esta instruccin solo afecta las banderas; no se hace ningn cambio a los operandos. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin: CMPSW ;Comparar cadenas REPE CMPSW ;Repetir el ciclo CWD Aritmtica Convert Word to Doubleword (Convertir una palabra en palabra doble): CWD convierte el valor de palabra en AX a un valor de palabra doble en DX:AX extendiendo el valor de bit de alto orden de AX a travs de todos los bits de DX. DAA Aritmtica Decimal Adjust for Addition (Ajuste decimal para suma): DAA corrige el resultado (AL) de una operacin anterior de suma decimal codificada en binario (BCD). Banderas afectadas SF, ZF, AF, PF, CF, OF(no definida) DAS Aritmtica Decimal Adjust for Subtraction (Ajuste decimal para resta): DAS corrige el resultado (AL) de una operacin anterior de resta decimal codificada en binario (BCD). Arquitectura de Computadoras #19

Ensamblador 8088/8086 Banderas afectadas SF, ZF, AF, PF, CF, OF(no definida) DEC Aritmtica

EPIE - UNSA

Decrement (Disminuir): DEC cambia, en decrementos de 1, el contenido del operando. Se supone que el operando es un valor binario sin signo. Banderas afectadas OF, SF, ZF, AF, PF Ejemplos de codificacin DEC AX DEC SUM DEC CL DEC TEMP [SI] DIV Aritmtica Divide (Dividir): Si el operando es un valor de byte, DIV divide el contenido de AX entre el contenido del operando y luego almacena el resultado en AL y el residuo en AH. Si el operando es un valor de palabra, DIV divide el contenido de DX:AX entre el contenido del operando y luego almacena el resultado en AX y el residuo en DX. Esta instruccin trata los nmeros como valores binarios sin signo. Banderas afectadas OF(no definida), SF(no definida), ZF(no definida), AF(no definida), PF(no definida), CF(no definida). Ejemplos de codificacin DIV BX ;AX=DX:AX/BX DIV WRDTMP ;AX=DX:AX/WRDTMP DIV BYTE SUM ;AL=AX/BYTE SUM ESC Control de banderas y procesador Escape (Escapar): Esta instruccin proporciona un medio para que los coprocesadores (como el 8087 u otros coprocesadores numricos) tengan acceso a datos en el flujo de datos del microprocesador. Cuando se encuentra, esta instruccin ocasiona que el microprocesador coloque el operando en el canal de datos y ejecute un NOP internamente. Ejemplos de codificacin ESC 6, TEMP ESC 15, CL

Arquitectura de Computadoras

#20

Ensamblador 8088/8086 HLT Control de banderas y procesador

EPIE - UNSA

Halt (Parar): HLT ocasiona que el microprocesador detenga la ejecucin y deje los registros CS:IP apuntando a la instruccin que sigue a HLT. Esta condicin de parar se termina solo despus de que el sistema recibe una interrupcin o se activa la lnea de RESET. IDIV Aritmtica Integer Divide (Divisin de enteros): Si el operando es un valor de byte, IDIV divide el contenido de AX entre el contenido del operando; luego almacena el resultado en AL y el residuo en AH. Si el operando es un valor de palabra, IDIV divide el contenido de DX:AX entre el contenido del operando y luego almacena el resultado en AX y el residuo en DX. Esta instruccin trata los nmeros como valores binarios sin signo. Banderas afectadas OF(no definida), SF[no definida), ZF(no definida), AF(no definida), PF(no definida), CF(no definida) Ejemplos de codificacin IDIV BX ;AX=DX:AX/BX IDIV WRDTMP ;AX=DX:AX/WRDTMP iDIV BYTE SUM ;AL=AX/BYTE_SUM IDIV WORDTBL[BX] ;Direccin indirecta IMUL Aritmtica Integer Multiply (Multiplicacin de enteros): Si el operando es un valor de byte, IMUL multiplica AL por el contenido del operando y almacena el resultado en AX. Si el operando es un valor de palabra, IMUL multiplica el contenido de AX por el contenido del operando y almacena al resultado en DX:AX.Esta instruccin trata los nmeros como valores binarios con signo. Banderas afectadas OF, CF, SF(no definida), ZF(no definida), AF(no definida), PF(no definida). Ejemplos de codificacin IMUL BX ;DX:AX=AX*BX IMUL WRDTMP ;DX:AX=AX*WKDTMP IMUL BYTE_SUM ;AX=AL*BYTE_SUM IMUL WORDTBL[BX] ;Direccin indirecta IN Transferencia de datos

Arquitectura de Computadoras

#21

Ensamblador 8088/8086

EPIE - UNSA

Input from Port (Entrada desde un puerto): IN carga un byte o una palabra de la direccin especifica del puerto de E/S de hardware a AL o AX, respectivamente. Un nmero de puerto inferior a 256 puede especificarse como una constante o una variable en el registro DX, pero un nmero de puerto superior a 255 debe especificarse en el registro DX. Ejemplos de codificacin IN AL, 64h IN AX, DX INC Aritmtica Increment (Incrementar): INC cambia, mediante incrementos de l , el contenido del operando. Se supone que el operando es un valor binario sin signo. Banderas afectadas OF, SF, ZF, AF, PF Ejemplos de codificacin INC AX INC SUM INC CL INC TEMP [SI] INT Transferencia de control Software Interrupt (Interrupcin por software): INT inicia una interrupcin de software de la UCP y hace lo siguiente: 1)mete las banderas en la pila; 2)limpia las banderas TF e IF; 3)mete el valor de CS en la pila; 4)Carga CS Con la direccin de segmento de la interrupcin invocada (que se encontr en la direccin calculada en la tabla vectorial de interrupciones); 5)mete el valor de IP en la pila; y 6)carga IP con la direccin de desplazamiento de la interrupcin invocada (que se encontr en la direccin calculada en la tabla vectorial de interrupciones). Despus, la ejecucin continua en la direccin CS:IP recin cargada hasta que se encuentre una instruccin IRET. Banderas afectadas IF, TF Ejemplos de codificacin INT lOh INT 13h INTO Transferencia de control Interrupt on Overflow (Interrumpir en sobreflujo): Si la bandera de sobreflujo (OF) esta activada, INTO Arquitectura de Computadoras #22

Ensamblador 8088/8086

EPIE - UNSA

ejecuta una interrupcin 4 y el control procede como si se hubiera emitido una INT 4. Hay que tener en cuenta que, en este Caso, el registro de banderas se ve afectado como se describe para la instruccin INT. IRET Transferencia de control Return from Interrupt (Regresar de una interrupcin): IRET ocasiona la terminacin de un procedimiento de interrupcin y (sacando los valores de IF, CS y el registro de banderas de la pila) regresa el control al punto en el que ocurri la interrupcin. Banderas afectadas OF, DF, IF, TF, SF, ZF, AF, PF, CF JA Transferencia de control Jump if Above (Saltar si es arriba): JA ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si tanto la bandera de acarreo como la de cero estn limpias. Esta instruccin es funcionalmente igual que JNBE. Ejemplo de codificacin JA NEXT_STEP (JA SIGUIENTE_PASO) JAE Transferencia de control Jump if Above or Equal (Saltar si es arriba o igual): JAE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de acarreo esta limpia. Esta instruccin es funcionalmente igual que JNB o JNC. Ejemplo de codificacin JAE NEXT_STEP (JAE SIGUIENTE PASO) JB Transferencia de control Jump if Below (Saltar si es abajo): JB ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de acarreo esta activada. Esta instruccin es funcionalmente igual que JC o JNAE. Ejemplo de codificacin JB NEXT_STEP (JB SIGUIENTE PASO)

Arquitectura de Computadoras

#23

Ensamblador 8088/8086 JBE Transferencia de control

EPIE - UNSA

Jump if Below or Equal (Saltar si es abajo o igual): JBE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si esta activada la bandera de acarreo o la de cero. Esta instruccin es funcionalmente igual que JNA. Ejemplo de codificacin JBE NEXT_STEP (JBE SIGUIENTE PASO) JC Transferencia de control Jump on Carry (Saltar en acarreo): JC ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de acarreo esta activada. Esta instruccin es funcionalmente igual que JB o JNAE. Ejemplo de codificacin JC NEXT_STEP (JC SIGUIENTE_PASO) JCXZ Transferencia de control Jump if CX=O (Saltar si CX=0): JCXZ ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si el valor de CX es 0. Ejemplo de codificacin JCXZ SKIP LOOP (JCXZ SALTAR CICLO) JE Transferencia de control Jump if Equal (Saltar si es igual): JE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de cero esta activada. Esta instruccin es funcionalmente igual que JZ. Ejemplo de codificacin JE NEXT_STEP (JE SIGUIENTE PASO) JG Transferencia de control Jump if Greater Arquitectura de Computadoras #24

Ensamblador 8088/8086

EPIE - UNSA

(Saltar si es mayor) : JG ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo es igual a la de sobreflujo o si la bandera de cero esta limpia. Esta instruccin es funcionalmente igual que JNLE. Ejemplo de codificacin JG NEXT_STEP (JG SIGUIENTE PASO) JGE Transferencia de control Jump if Greater or Equal (Saltar si es mayor o igual): JGE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo es igual a la de sobreflujo. Esta instruccin es funcionalmente igual que JNL. Ejemplo de codificacin JGE NEXT_STEP (JGE SIGUIENTE PASO) JL Transferencia de control Jump if Less Than (Saltar si es menor que): JL ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo no es igual a la de sobreflujo. Esta instruccin es funcionalmente igual que JNGE. Ejemplo de codificacin JL NEXT_STEP (JL SIGUIENTE_PASO) JLE Transferencia de control Jump if Less Than or Equal (Saltar si es menor que o igual a): JLE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo no es igual a la de sobreflujo o si la bandera de cero esta activada. Esta instruccin es funcionalmente igual que JNG. Ejemplo de codificacin JLE NEXT_STEP (JLE SIGUIENTE PASO) JMP Transferencia de control Jump (Saltar): JMP ocasiona que la ejecucin de un programa comience en la direccin del operando designado. JMP afecta los registros CS e IP segn sea necesario para producir esta ramificacin incondicional. Arquitectura de Computadoras #25

Ensamblador 8088/8086 Ejemplos de codificacin JMP EXIT CODE (JMP CODIGO SALIDA) JMP [BX] ;Direccin en [BX] JMP AX ;Direccin en AX JNA Transferencia de control

EPIE - UNSA

Jump if Not Above (Saltar si no es arriba): JNA ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si esta activada la bandera de acarreo o la de cero. Esta instruccin es funcionalmente igual que JBE.

Ejemplo de codificacin JNA NEXT_STEP (JNA SIGUIENTE PASO)

JNAE Transferencia de control Jump if Not Above or Equal (Saltar si no es arriba o igual): JNAE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de acarreo esta activada. Esta instruccin es funcionalmente igual que JB o JC. Ejemplo de codificacin JNAE NEXT_STEP (JNAE SIGUIENTE_PASO) JNB Transferencia de control Jump if not Below (Saltar si no es abajo): JNB ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de acarreo esta en cero. Esta instruccin es funcionalmente igual que JAE o JNC. Ejemplo de codificacin JNB NEXT_STEP (JNB SIGUIENTE PASO JNBE Transferencia de control Jump if Not Below or Equal (Saltar si no es abajo o igual): JNBE ocasiona que la ejecucin de un programa se Arquitectura de Computadoras #26

Ensamblador 8088/8086

EPIE - UNSA

ramifique hacia la direccin del operando si tanto la bandera de acarreo como la de cero estn limpias. Esta instruccin es funcionalmente igual que JA. Ejemplo de codificacin JNBE NEXT_STEP (JNBE SIGUIENTE_PASO) JNC Transferencia de control Jump on No Carry (Saltar en no acarreo): JNC ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de acarreo esta limpia. Esta instruccin es funcionalmente igual que JAE o JNB. Ejemplo de codificacin JNC NEXT_STEP (JNC SIGUIENTE_PASO) JNE Transferencia de control Jump if Not Equal (Saltar si no es igual): JNE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de cero esta limpia. Esta instruccin es funcionalmente igual que JNZ. Ejemplo de codificacin JNE NEXT_STEP (JNE SIGUIENTE_PASO) JNG Transferencia de control Jump if Not Greater Than (Saltar si no es mayor que): JNG ocasiona que la ejecucin del programa se ramifique hacia la direccin del operando si la bandera de signo no es igual a la de sobreflujo o si la bandera de cero esta activada. Esta instruccin es funcionalmente igual que JLE. Ejemplo de codificacin JNG NEXT_STEP (JNG SIGUIENTE_PASO) JNGE Transferencia de control Jump if Not Greater Than or Equal (Saltar si no es mayor que o igual a): JNGE ocasiona que la ejecucin del programa se ramifique hacia la direccin del operando si la bandera de signo no es igual a la de sobreflujo. Esta instruccin es funcionalmente igual que JL. Ejemplo de codificacin Arquitectura de Computadoras #27

Ensamblador 8088/8086 JNGE NEXT_STEP (JNGE SIGUIENTE_PASO) JNL Transferencia de control

EPIE - UNSA

Jump if Not Less Than (Saltar si no es menor que): JNL ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo es igual a la de sobreflujo. Esta instruccin es funcionalmente igual que JGE. Ejemplo de codificacin JNL NEXT_STEP (JNL SIGUIENTE_PASO) JNLE Transferencia de control Jump if Not Less Than or Equal (Saltar si no es menor que o igual a): JNLE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo es igual a la de sobreflujo o si la bandera de cero esta limpia. Esta instruccin es funcionalmente igual que JG. Ejemplo de codificacin JNLE NEXT_STEP (JNLE SIGUIENTE_PASO) JNO Transferencia de control Jump on No Overflow (Saltar en no sobreflujo): JNO ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de sobreflujo esta limpia. Ejemplo de codificacin JNO NEXT_STEP (JNO SIGUIENTE_PASO) JNP Transferencia de control Jump on No Parity (Saltar en no paridad): JNP ocasiona que la ejecucin de un programa se ramifique hacia 1a direccin del operando si la bandera de paridad esta limpia. Esta instruccin es funcionalmente igual que JPO. Ejemplo de codificacin JNP NEXT_STEP (JNP SIGUIENTE_PASO)

Arquitectura de Computadoras

#28

Ensamblador 8088/8086 JNS Transferencia de control

EPIE - UNSA

Jump on Not Sign (Saltar en no signo): JNS ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo esta limpia. Ejemplo de codificacin JNS NEXT_STEP (JNP SIGUIENTE_PASO) JNZ Transferencia de control Jump on Not Zero (Saltar en no cero): JNZ ocasiona que la ejecucin un programa se ramifique hacia la direccin del operando si la bandera de cero esta limpia. Esta instruccin es funcionalmente igual que JNE. Ejemplo de codificacin JNZ NEXT_STEP (JNZ SIGUIENTE_PASO) JO Transferencia de control Jump on Overflow (Saltar en sobreflujo): JO ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de sobreflujo esta activada. Ejemplo de codificacin JO NEXT_STEP (JO SIGUIENTE_PASO) JP Transferencia de control Jump on Parity (Saltar en paridad): JP ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de paridad esta activada. Esta instruccin es funcionalmente igual que JPE. Ejemplo de codificacin JP NEXT_STEP (JP SIGUIENTE_PASO) JPE Transferencia de control Jump on Parity Even (Saltar en paridad par): JPE ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de paridad esta activada. Esta Arquitectura de Computadoras #29

Ensamblador 8088/8086 instruccin es funcionalmente igual que JP. Ejemplo de codificacin JPE NEXT_STEP (JPE SIGUIENTE_PASO) JPO Transferencia de control

EPIE - UNSA

Jump on Parity Odd (Saltar en paridad impar): JPO ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de paridad esta limpia. Esta instruccin es funcionalmente igual que JNP. Ejemplo de codificacin JPO NEXT_STEP (JPO SIGUIENTE_PASO) JS Transferencia de control Jump on Sign (Saltar en signo): JS ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de signo esta activada. Ejemplo de codificacin JE NEXT_STEP (JS SIGUIENTE_PASO) JZ Transferencia de control Jump on Zero (Saltar en cero): JZ ocasiona que la ejecucin de un programa se ramifique hacia la direccin del operando si la bandera de cero esta activada. Esta instruccin es funcionalmente igual que JE. Ejemplo de codificacin JZ NEXT_STEP (JZ SIGUIENTE_PASO) LAHF Transferencia de datos Load AH Register with Flags (Cargar el registro AH con banderas): LAHF copia el byte de orden inferior del registro de banderas en AH. Despus de la ejecucin de esta instruccin, los bits 7, 6, 4, 2 y 1 de AH son iguales a SF, ZF, AF, PF y CF, respectivamente. LDS Transferencia de datos Arquitectura de Computadoras #30

Ensamblador 8088/8086

EPIE - UNSA

Load DS Register (Cargar el registro DS (segmento de datos): LDS realiza dos operaciones distintas: carga DS con la direccin de segmento del operando fuente, y carga el operando de destino con la direccin de desplazamiento del operando fuente. Ejemplo de codificacin LDS SI, SOURCE_BUFFER (LDS SI, BUFFER_FUENTE) LEA Transferencia de datos Load Effective Address (Cargar la direccin efectiva): LEA transfiere la direccin de desplazamiento del operando fuente al operando de destino. E1 operando de destino debe ser un registro general de palabras. Ejemplo de codificacin LEA AX, MESSAGE_l (LEA AX, MENSAJE_l) LES Transferencia de datos Load ES Register (Cargar el registro ES (segmento extra)) : LES realiza dos operaciones distintas: carga ES con la direccin de segmento del operando fuente, y carga el operando de destino con la direccin de desplazamiento del operando fuente. Ejemplo de codificacin LES DI, DEST_BUFFER (LES DI, BUFFER_DEST) LOCK Control de banderas y procesador Lock Bus (Bloquear el canal): LOCK prohibe la interferencia desde otros coprocesadores durante la ejecucin de la siguiente instruccin emitida. LOCK es un prefijo que se debe usar con otras operaciones. Ejemplo de codificacin LOCK XLAT LODSB Manipulacin de cadenas Load a Bytefrom String into AL (Cargar un byte de cadena en AL): Esta instruccin carga AL con el contenido de la direccin apuntada por SI. Despus SI cambia en incrementos o decrementos de 1, Arquitectura de Computadoras #31

Ensamblador 8088/8086

EPIE - UNSA

dependiendo de la activacin de la bandera de direccin. Intel lista este mandato como LODS; sin embargo, varios ensambladores pueden hacer la distincin entre byte (LODSB) y palabra (LODSW). LODSW Manipulacin de cadenas Load a Wordfrom String into AX (Cargar una palabra de cadena en AX): Esta instruccin carga AX con el contenido de la direccin apuntada por SI. Despus SI cambia en incrementos o decrementos de 2, dependiendo de la activacin de la bandera de direccin. Intel lista este mandato como LODS; sin embargo, varios ensambladores pueden hacer la distincin entre byte (LODSB) y palabra (LODSW). LOOP Transferencia de control Loop (Ciclo): Basndose en el contenido de CX, la ejecucin del programa se ramifica hacia la direccin del operando de destino. Si CX no es igual a 0, CX cambia en decrementos de 1 y ocurre la ramificacin. Si CX es 0, no ocurre decremento o ramificacin y la ejecucin continua en la siguiente instruccin. Ejemplo de codificacin LOOP PRINT LOOP (LOOP IMPRIMIR CICLO) LOOPE Transferencia de control Loop While Equal (Ciclo mientras es igual):Basndose en el contenido de CX y en la bandera de cero, la ejecucin del programa se ramifica hacia la direccin del operando de destino. Si CX no es igual a 0 y la bandera de cero esta activada, CX cambia en decrementos de 1 y ocurre la ramificacin. Si CX es 0 o si la bandera de cero esta limpia, no ocurre decremento o ramificacin, y la ejecucin continua en la siguiente instruccin. Esta instruccin es funcionalmente equivalente a LOOPZ. Ejemplo de codificacin LOOPE TEST LOOP (LOOPE CICLO PRUEBA) LOOPNE Transferencia de control Loop While Not Equal (Ciclo mientras no es igual): Basndose en el contenido de CX y en la bandera de cero, la ejecucin del programa se ramifica hacia la direccin del operando de destino. Arquitectura de Computadoras #32

Ensamblador 8088/8086

EPIE - UNSA

Si CX no es igual a 0 y la bandera de cero esta limpia, CX cambia en decrementos de 1 y ocurre la ramificacin. Si CX es 0 o la bandera de cero esta activada, no ocurre decremento o ramificacin, y la ejecucin continua en la siguiente instruccin. Esta instruccin es funcionalmente equivalente a LOOPNZ. Ejemplo de codificacin LOOPNE TEST LOOP (LOOPNE CICLO PRUEBA) LOOPNZ Transferencia de control Loop While Not Zero (Ciclo mientras no es cero): Basndose en el contenido de CX y en la bandera de cero, la ejecucin del programa se ramifica hacia la direccin del operando de destino. Si CX no es igual a 0 y la bandera de cero esta limpia, CX cambia en decrementos de 1 y ocurre la ramificacin. Si CX es 0 o si la bandera de cero esta activada, no ocurre decremento o ramificacin, y la ejecucin continua con la siguiente instruccin. Esta instruccin es funcionalmente equivalente a LOOPNE. Ejemplo de codificacin LOOPNZ TEST LOOP (LOOPNZ CICLO PRUEBA) LOOPZ Transferencia de control Loop While Zero (Ciclo mientras es cero): Basndose en el Contenido de CX y en la bandera de cero, la ejecucin del programa se ramifica hacia la direccin del operando de destino. Si CX no es igual a 0 y la bandera de 0 esta activada, CX cambia en decrementos de 1 y ocurre la ramificacin. Si CX es 0 o la bandera de cero esta limpia, no ocurre decremento o ramificacin, y la ejecucin continua con la siguiente instruccin. Esta instruccin es funcionalmente equivalente a LOOPE. Ejemplo de codificacin LOOPZ TEST . LOOP (LOOPZ CICLO PRUEBA) MOV Transferencia de datos Move (Transferir): MOV copia el contenido del operando fuente en el operando de destino. Ambos operandos deben tener la misma longitud. Ejemplos de codificacin MOV AX,BX ;AX=BX MOV AX,WRDTMP ;AX=WRDTMP MOV WRDSUM,BX ;WRDSUM=BX MOV CL,57 ;CL=57 Arquitectura de Computadoras #33

Ensamblador 8088/8086 MOV DEC,10 MOV AX,TEMP[BX] ;DEC=10 ;Direccin indirecta

EPIE - UNSA

MOVSB Manipulacin de cadenas Move String, Byte-by-Byte (Transferir una cadena, byte por byte): MOVSB transfiere cadenas, byte por byte. Los valores de SI y DI cambian en incrementos o decrementos de 1, dependiendo de la activacin de la bandera de direccin. Normalmente, esta instruccin se usa con la instruccin REP a fin de repetir la transferencia para un mximo de bytes de CX. Intel lista este mandato como MOVS; sin embargo, varios ensambladores hacen la distincin entre byte y palabra. Ejemplos de codificacin MOVSB REP MOSVB ;Repetir un ciclo de transferencia MOVSW Manipulacin de cadenzas Move String, Word-by-Word (Transferir una cadena, palabra por palabra) : MOVSW transfiere cadenas, palabra por palabra. Los valores de SI y DI cambian en incrementos o decrementos de 2, dependiendo de la activacin de la bandera de direccin. Normalmente, esta instruccin se usa con la instruccin REP a fin de repetir la transferencia para un mximo de palabras de CX. Intel lista este mandato como MOVS; sin embargo, varios ensambladores hacen la distincin entre byte y palabra. Ejemplos de codificacin MOVSW REP MOVSW ;Repetir un ciclo de transferencia MUL Aritmtica Multiply (Multiplicar): Si el operando es un valor de byte, MUL multiplica el contenido de AL por el contenido del operando y almacena al resultado en AX. Si el operando es un valor de palabra, MUL multiplica el contenido de AX por el contenido del operando y almacena el resultado en DX:AX. Esta instruccin trata los nmeros como valores binarios. Banderas afectadas OF, CF, SF (no definida), ZF (no definida), AF (no definida), PF (no definida). Ejemplos de codificacin Arquitectura de Computadoras #34

Ensamblador 8088/8086 MUL BX ;DX:AX=AX*BX MUL WORD_TEMP ;DX:AX=AX*WORD TEMP MUL BYTE_SUM ;AX=AL*BYTE SUM MUL WORLD_TBL[BX] ;Direccin indirecta OR Manipulacin de bits

EPIE - UNSA

Logical OR on Bits (O lgico en bits): Esta instruccin realiza un O lgico de los operandos y almacena el resultado en el operando de destino. Cada bit del byte o palabra resultante se pone en I si uno o ambos bits correspondientes a cada operando se ponen en I. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Ejemplos de codificacin OR AL, BL OR AL, l0000000b OR DX, TEMP OR AX, CX OUT Transferencia de datos Output to Port (Salir a puerto): OUT enva un byte (AL) o palabra (AX) a la direccin de puerto de E/S de hardware especificada. Un nmero de puerto menor que 256 puede especificarse como una constante o como una variable en el registro DX. Sin embargo, un nmero de puerto mayor que 255 debe especificarse en el registro DX. Ejemplos de codificacin OUT AL, 64h OUT AX, DX POP Transferencia de datos Remove Data from Stack (Quitar datos de la pila): POP quita una palabra de la pila y la sita en el operando de destino deseado. Ejemplos de codificacin POP AX POP DS POP HOLD REG (POP GUARD REG) POPF Arquitectura de Computadoras #35

Ensamblador 8088/8086 Transferencia de datos

EPIE - UNSA

Remove Flags from Stack (Quitar banderas de la pila): POPF quita una palabra de la pila y la sita en el registro de banderas. Banderas afectadas OF, DF, IF, TF, SF, ZF, AF, PF, CF PUSH Transferencia de datos Place Data on Stack (Colocar datos en la pila): PUSH coloca en la pila una copia del valor del operando. Ejemplos de codificacin PUSH AX PUSH DS PUSH HOLD REG (PUSH GUARD REG) PUSHF Transferencia de datos Place Flags on stack (Colocar banderas en la pila): PUSHF coloca en la pila una copia del registro de banderas. RCL Manipulacin de bits Rotate Left through Carry (Rotar a la izquierda a lo largo del acarreo): RCL rota todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. La rotacin se realiza a travs de la bandera de acarreo en un orden que rota el bit mas significativo del operando de destino a la bandera de acarreo, y esta al bit menos significativo del operando de destino. Banderas afectadas OF, CF Ejemplos de codificacin RCL AX,1 RCL BL,3 RCL TEMP,CL

RCR Manipulacin de bits Rotate Right through Carry Arquitectura de Computadoras #36

Ensamblador 8088/8086

EPIE - UNSA

(Rotar a la derecha a lo largo del acarreo): RCR rota todos los bits del operando de destino a la derecha tantos lugares como indique el operando fuente. La rotacin se realiza a travs de la bandera de acarreo en un orden que rota el bit menos significativo del operando de destino a la bandera de acarreo, y esta al bit mas significativo del operando de destino. Banderas afectadas OF, CF Ejemplos de codificacin RCR AX,1 RCR BL,3 RCR TEMP,CL REP Manipulacin de cadenas Repeat (Repetir): REP ocasiona que las instrucciones de manipulacin de cadenas se repitan tantas veces como se indique en CX. Ejemplo de codificacin REP MOVSB REPE Manipulacin de cadenas Repeat if Equal (Repetir si es igual): REPE ocasiona que las instrucciones de manipulacin de cadenas se repitan tantas veces como se indique en CX. Cuando se usa con CMPSB, CMPSW, SCASB o SCASW, esta instruccin causa la repeticin solo mientras la bandera de cero esta activada. Esta instruccin es funcionalmente equivalente a REPZ. Ejemplo de codificacin REPE CMPSW REPNE Manipulacin de cadenas Repeat if not Equal (Repetir si no es igual): REPNE ocasiona que las instrucciones de manipulacin de cadenas se repitan el nmero de iteraciones especificas en CX. Cuando se usa con CMPSB, CMPSW, SCASB o SCASW esta instruccin causa la repeticin solo mientras la bandera de cero vale cero. Esta instruccin es funcionalmente equivalente a REPNZ. Ejemplo de codificacin REPNE CMPSW REPNZ Manipulacin de cadenas Arquitectura de Computadoras #37

Ensamblador 8088/8086

EPIE - UNSA

Repeat if Not Zero (Repetir si no es cero): REPNZ ocasiona que instrucciones de manipulacin de cadenas se repitan el nmero de iteraciones especificadas en CX. Cuando se usa con CMPSB, CMPSW, SCASB o SCASVW, esta instruccin causa la repeticin solo cuando la bandera de cero esta limpia. Esta instruccin es funcionalmente equivalente a REPNE. Ejemplo de codificacin REPNZ CMPSW

REPZ Manipulacin de cadenas Repeat if Zero (Repetir si es cero): REPZ ocasiona que instrucciones de manipulacin de cadenas se repitan tantas veces como se indique en CX. Cuando se usa con CMPSB, CMPSW, SCASB o SCASW, esta instruccin causa la repeticin solo cuando la bandera de cero esta activada. Esta instruccin es funcionalmente equivalente a REPE. Ejemplo de codificacin REPZ CMPSW RET Transferencia de control Return from Subroutine (Volver de la subrutina): Al sacar a IP de la pila, RET transfiere el control del programa de vuelta al punto en el que se emiti un CALL. Si CALL fuera una llamada a un procedimiento far, tanto CS como IP serian sacados de la pila. Si RET tiene un valor de retorno especifico (2, en el ejemplo de codificacion), la pila se ajusta segun ese nmero de bytes. En el ejemplo de codificacin se muestra que una palabra se descarta de la pila despus de que IP o CS:IP hayan sido sacados. Ejemplos de codificacin RET ROL Manipulacin de bits Rotate Left (Rotar a la izquierda): ROL rota todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. Banderas afectadas OF, CF Ejemplos de codificacin ROL AX,1 ROL BL,3 Arquitectura de Computadoras #38

Ensamblador 8088/8086 ROL TEMP,CL ROR Manipulacin de bits

EPIE - UNSA

Rotate Right (Rotar a la derecha): ROR rota todos los bits del operando de destino a la derecha tantos lugares como indique el operando fuente. Banderas afectadas OF, CF Ejemplos de codificacin ROR AX, l ROR BL, 3 ROR TEMP, CL SAHF Transferencia de datos Store AH into Flag Register (Almacenar AH en el registro de banderas): SAHF copia el contenido de AH en el byte de orden inferior del registro de banderas. Despus de la ejecucin de esta instruccin, SF, ZF, AF, PF y CF son iguales a los bits 7, 6, 4, 2 y 1 de AH, respectivamente. Banderas afectadas SF, ZF, AF, PF, CF SAL Manipulacin de bits Arithmetic Shift Left (Desplazamiento aritmtico a la izquierda): SAL desplaza todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. Los bits de alto orden se pierden, mientras que los de orden inferior se limpian. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Ejemplos de codificacin SAL AX,1 SAL BL,3 SAL TEMP,CL SAR Manipulacin de bits Arithmetic Shift Right (Desplazamiento aritmtico a la derecha): SAR desplaza todos los bits del operando Arquitectura de Computadoras #39

Ensamblador 8088/8086

EPIE - UNSA

de destino a la derecha tantos lugares como indique el operando fuente. Los bits de orden inferior se pierden mientras que los de alto orden adquieren el valor del bit de alto orden existente. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Ejemplos de codificacin SAR AX,1 SAR BL,3 SAR TEMP,CL SBB Aritmtica Subtract with Carry (Restar con acarreo) : SBB resta el contenido del operando fuente del operando de destino (y almacena el resultado en este). Si la bandera de acarreo esta activada, el resultado cambia en decrementos de 1. En esta instruccin, se supone que los valores aadidos son binarios. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin SBB AX,BX ;AX=AX-AX-CF SBB AX,TEMP ;AX=AX-TEMP-CF SBB SUM,BX ;SUM=SUM-BX-CF SBB CL,l0 ;CL=CL-l0-CF SBB AX,TEMP(BX) ;Direccin indirecta SCASB Manipulacin de cadena Scan String for Byte (Examinar una cadena por byte): SCASB resta el byte de cadena del operando de destino (apuntado por DI)del valor de AL. No se almacena el resultado pero se actualizan las banderas. Entonces el valor de DI cambia en incrementos o decrementos de 1, dependiendo de la activacin de la bandera de direccin. Normalmente, esta instruccin se usa con las instrucciones REPE, REPNE, REPNZ o REPZ para repetir el exmen un mximo de CX bytes, o hasta que SCASB encuentre una concordancia o una diferencia. Intel lista este mandato como SCAS; sin embargo, varios ensambladores hacen las distinciones entre byte y palabra. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin SCASB REPNZ SCASB Arquitectura de Computadoras #40

Ensamblador 8088/8086

EPIE - UNSA

SCASW Manipulacin de cadenas Scan String for Word (Examinar una cadena por palabra): SCASW resta la palabra de cadena del operando de destino (apuntado por DI) del valor de AX. No se almacena el resultado pero se actualizan las banderas. Entonces el valor de DI cambia en incrementos o decrementos de 2, dependiendo de la activacin de la bandera de direccin. Normalmente, esta instruccin se usa con las instrucciones REPE, REPNE, REPNZ o REPZ para repetir el examen un mximo de CX bytes, o hasta que SCASW encuentre una concordancia o una diferencia. Intel lista este mandato como SCAS; sin embargo, varios ensambladores hacen las distinciones entre byte y palabra. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin SCASW REPNZ SCASW SHL Manipulacin de bits Shift Left (Desplazar a la izquierda): SHL desplaza todos los bits del operando de destino a la izquierda tantos lugares como indique el operando fuente. Los bits de alto orden se pierden y los de orden inferior se limpian. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Ejemplos de codificacin SHL AX,1 SHL BL,3 SHL TEMP,CL SHR Manipulacin de bits Shift Right (Desplazar a la derecha): SHR desplaza todos los bits del operando de destino a la derecha tantos lugares como indique el operando fuente. Los bits de orden inferior se pierden y los de alto orden se limpian. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Arquitectura de Computadoras #41

Ensamblador 8088/8086 Ejemplos de codificacin SHR AX,l SHR BL,3 SHR TEMP,CL STC Control de banderas y procesador

EPIE - UNSA

Set Carry Flag (Activar la bandera de acarreo): STC activa la bandera de acarreo sin importar la condicin presente de esta. Bandera afectada CF STD Control de banderas y procesador Set Direction Flag (Activar la bandera de direccin): STD activa la bandera de direccin sin importar la condicin presente de esta. Tal activacin afecta las instrucciones de cadenas. Bandera afectada DF STI Control de banderas y procesador Set Interrupt Flag (Activar la bandera de interrupcin): STI activa la bandera de interrupcin sin importar la condicin presente de esta. Mientras se activa dicha bandera, la UCP responde a interrupciones enmascarables. Bandera afectada IF STOSB Manipulacin de cadenas Store Byte in AL at String (Almacenar el byte de AL en la cadena): Esta instruccin copia el contenido de AL en la direccin de byte apuntada por DI. Entonces DI cambia en incrementos o decrementos de 1, dependiendo de la activacin de la bandera de direccin. Intel lista este mandato como STOS; sin embargo, varios ensambladores hacen las distinciones entre byte y palabra. STOSW Manipulacin de cadenzas Store Word in AX at String Arquitectura de Computadoras #42

Ensamblador 8088/8086

EPIE - UNSA

(Almacenar palabra de AX en la cadena): Esta instruccin copia el contenido en AX en la direccin de palabras apuntada por DI. Entonces DI cambia en incrementos o decrementos de 2, dependiendo de la activacin de la bandera de direccin. Intel lista este mandato como STOS; sin embargo, varios ensambladores hacen las distinciones entre byte y palabra. SUB Aritmtica Subtract (Restar): SUB resta el contenido del operando fuente del operando de destino (y almacena el resultado en este). En esta instruccin, se supone que los valores aadidos son binarios. Banderas afectadas OF, SF, ZF, AF, PF, CF Ejemplos de codificacin SUB AX,BX ;AX=AX-AX SUB AX,TEMP ;AX=AX-TEMP SUB SUM,BS ;SUM=SUM-BX SUB CL,10 ;CL=CL-10 SUB AX,TEMP[BX] ;Direccin indirecta TEST Manipulacin de bit Test Bits (Bits de prueba): TEST realiza un Y lgico de los operandos, pero no se almacena el resultado. Solo las banderas se ven afectadas. Cada bit del byte o palabra resultante se pone en 1 solo si el bit correspondiente de cada operando es 1. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Ejemplos de codificacin TEST AX,BX ; TEST AX,TEMP ;TEMP debe ser una palabra TEST SUM,BX ;SUM debe ser una palabra TEST CL,OOOOllllb ; TEST AX,TEMP[BX] ;Direccin indirecta WAIT Control de banderas y procesador Wait (Esperar): WAIT ocasiona que la UCP espere una interrupcin externa en la lnea de TEST antes de continuar.

Arquitectura de Computadoras

#43

Ensamblador 8088/8086 XCHG Transferencia de datos

EPIE - UNSA

Exchange (Intercambiar): XCHG intercambia el contenido de los operandos fuente y de destino. Ejemplos de codificacin XCHG AX,BX ;Intercambiar AX con BX XCHG CL,CH ;Intercambiar CL con CH XCHG AC,TEMP ;Intercambiar AX con TEMP XLAT Transferencia de datos Translate (Traducir): Suponiendo que la direccin de desplazamiento de una tabla de traduccin de 256 bytes esta contenida en BX, esta instruccin usa el valor en AL como un desplazamiento basado en cero dentro de la tabla, y posteriormente carga AL con el valor de byte en el desplazamiento calculado. Esta instruccin es til para tablas de traduccin. XOR Manipulacin de bits Logical Exclusive-Or on bits (O exclusivo lgico sobre bits): Esta instruccin realiza un XOR lgico de los operandos y almacena el resultado en el operando de destino. Cada bit del byte o palabra resultante se pone en 1 solo si el bit correspondiente de cada operando contiene valores opuestos. Banderas afectadas OF, SF, ZF, PF, CF, AF (no definida) Ejemplos de codificacin XOR AX,BX ; XOR AX,TEMP ;TEMP debe ser una palabra XOR SUM,BX ;SUM debe ser una palabra XOR CL,OOOllllb ; XOR AX,TEMP[BX] ;Direccin indirecta 9. BIBLIOGRAFA
http://www.wikipedia.org http://www.intel.com http://www.slideshare.net http://www.rincondelvago.com http://www.monografias.com

Arquitectura de Computadoras

#44

Das könnte Ihnen auch gefallen