LAB_ARQUI #04

58
UNIVERSIDAD NACIONAL DE SAN AGUSTÍN AREQUIPA FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICA LABORATORIO #04 ‘Ensamblador 8088/8086, direccionamiento y programación, juego de instrucciones manual INTEL (Windows y Linux Ubuntu)’ CURSO : Arquitectura de Computadoras AUTORES : Jaita Aguilar, José H. 20090992 Mamani Musaja, Marco A. 20083359 Miranda Quispe, Kenyo M. 20084099 TURNO : Jueves 7:00-8:30 am

Transcript of LAB_ARQUI #04

Ensamblador 8088/8086 EPIE - UNSA

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:Arquitectura de ComputadorasAUTORES: Jaita Aguilar, Jos H. 20090992Mamani Musaja, Marco A. 20083359Miranda Quispe, Kenyo M. 20084099

TURNO:Jueves 7:00-8:30 am

Arequipa-Per18-10-12NDICE

NDICE11.INTRODUCCIN22.TAMAO DE LOS DATOS23.ALMACENAMIENTO DE DATOS24.REGISTROS34.1.REGISTROS DE PROPSITO GENERAL44.2.REGISTROS NDICE44.3.REGISTROS APUNTADORES44.4.REGISTROS DE BANDERAS54.5.REGISTROS DE SEGMENTO64.6.REGISTRO APUNTADOR DE INSTRUCCIONES65.ACCESO A MEMORIA Y A PUERTOS76.SEGMENTACIN77.MODOS DE DIRECCIONAMIENTO97.1.DIRECCIONAMIENTO INMEDIATO117.2.DIRECCIONAMIENTO A REGISTRO118.CONJUNTO DE INSTRUCCIONES DEL 8086/08088DE INTEL149.BIBLIOGRAFA44

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.

4. REGISTROSLos 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.

4.1. REGISTROS DE PROPSITO GENERALLos 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 AX4.2. REGISTROS NDICELos 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 APUNTADORESLos 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.4.4. REGISTROS DE BANDERASEs 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.----OFDFIFTFSFZF-AF-PF-CF

Los bits de las banderas son las siguientes: OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera. DF (direccin): Controla la seleccin de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD. IF (interrupcin): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones). La interrupcin no enmascarable es la nica que no puede ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones STI y CLI. TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso) SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo). ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero). AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD. PF (paridad): Indica si el nmero de bits 1, del byte menos significativos de una operacin, es par (0=nmero de bits 1 es impar; 1=nmero de bits 1 es par). CF (acarreo): Contiene el acarreo del bit de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de desplazamiento o de rotacin.4.5. REGISTROS DE SEGMENTODefinen 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 INSTRUCCIONESEl 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.

5. ACCESO A MEMORIA Y A PUERTOSAmbos 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 x86Haba 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 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.Portando software viejoLos 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:0Los 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 + IPPor ejemplo: Si los registros CS e IP contienen los valores:CS = 1000HIP = 0414 HLa direccin de 20 bits es:1610 * 1000H + 0414H = 10000H + 0414H = 10414HEsta 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 MOVTransfiere un byte desde el operando fuente al operando destino. Tiene el siguiente formato:MOVdestino, fuente

7.1. DIRECCIONAMIENTO INMEDIATOEl operando fuente aparece en la instruccin. Un ejemplo, es el que mueve un valor constante a un registro interno.MOV AX, 5687.2. DIRECCIONAMIENTO A REGISTROIndica 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 bitsEjemplos:MOV AX, BX; AX BXMOV AL, BL; AL BLCuando usamos direccionamiento a registro, el CPU realiza las operaciones internamente, es decir, no se genera direccin de 20 bits para especificar el operando fuente7.2.1. DIRECCIONAMIENTO DE REGISTRO DIRECTOEspecifica 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, COUNTEl valor de COUNT es una constante. Es usada como el valor offset en el clculo de la direccin de 20 bitsEl 8086/8088 siempre usa un registro de segmento cuando calcula una direccin fsica. Cul registro se debe usar para esta instruccin? Respuesta: DSEn la Figura B, se muestra el clculo de la direccin desde la cual se tomar el dato que se carga en CX.

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: COUNTUso del segmento de datos y una constante para desplazamientoEste 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 INDIRECTOCon 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 registroBX, BP, SI o DI.

Ejemplo:MOV AX, [SI]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 DESPLAZAMIENTOEste 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), don-de COUNT ha sido previamente definido, el nemotcnico para esta construccin es:MOV AX, COUNT [DI]Si:COUNT =0378HDI =04FAH0872HEntonces, la direccin offset de 16 bits es 0872HDIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN REGISTRO BASE Y UN REGISTRO NDICEEste 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.Ejemplos:MOV[BP] [DI], AX; el offset es BP + DIMOVAX, [BX] [SI]; el offset es BX + SIEste 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 =0367HBX =7890HCOUNT =0012H 7C09HDIRECCIONAMIENTO 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 + 7C09HSi el DS contiene 3000H, la direccin completa de 20 bits es: 3000H + 7C09H = 37C09H

8. CONJUNTO DE INSTRUCCIONES DEL 8086/08088DE INTEL

Las instrucciones presentadas en esta seccin funcionan como se describe en el 8086/8088, el 80286 y el 80386.

AAAAritmtica

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 afectadasAF, CF, OF(no definida), SF(no definida), ZF(no definida), PF(no definida).AADAritmtica

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

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 afectadasSF, ZF, PF, OF(no definida),AF (no definida),CF (no definida).AASAritmtica 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 afectadasAF, CF, OF(no definida), SF(no definida), ZF(no definida), PF(no definida).ADCAritmtica Add with carry

(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 afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinADC AX, BX ;AX=AX+BX+CFADC AX, TEMP ;AX=AX+TEMP+CFADC SUM, BX ;SUM=SUM+BX+CFADC CL,10 ;CL=CL+ 10+CFADC AX, TEMP [BX] ;Direcc. indirectaADDAritmtica

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 afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinADD AX, BX ;AX=AX+BXADD AX, TEMP ;AX=AX+TEMPADD SUM, BX ;SUM=SUM+BXADD CL,10 ;CL=CL+10ADD AX, TEMP [BX] ;Direcc. indirectaANDManipulacin 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 afectadasOF, SF, ZF, PF, CF, AF(no definida)Ejemplos de codificacinAND AX, BX ;AND AX, TEMP ;TEMP debe ser una palabraAND SUM, BX ;SUM debe ser una palabraAND Cl,OOOOllllb ;Nibble alto en ceroAND AX, TEMP[BX] ;Direccin indirectaCALLTransferencia 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 codificacinCALL WHIZ BANG ;CALL [BX) ;Subrutina en direccin en [BX)CALL AX ;Direccin en AXCBWAritmtica

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.CLCControl 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 afectadaCF

CLDControl 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 afectadaDF

CLIControl de banderas y procesador

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 afectadaIF

CMCControl 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 afectadaCFCMPAritmtica

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 afectadasOF, SF, ZF, AF, PF, GFEjemplos de codificacinCMP AX, BX ;CMP AX, TEMP ;TEMP debe ser una palabraCMP SUM, BX ;SUM debe ser una palabraCMP CL, 3 ;Comparar con una constanteCMP AX,TEMP[BX) ;Direccin indirecta

CMPSBManipulacin 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.Banderas afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinCMPSB ;Comparar cadenasREPE CMPSB ;RepetirCMPSWManipulacin de cadenas

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 afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacin:CMPSW ;Comparar cadenasREPE CMPSW ;Repetir el cicloCWDAritmtica

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

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 afectadasSF, ZF, AF, PF, CF, OF(no definida)DASAritmtica

Decimal Adjust for Subtraction(Ajuste decimal para resta): DAS corrige el resultado (AL) de una operacin anterior de resta decimal codificada en binario (BCD).Banderas afectadasSF, ZF, AF, PF, CF, OF(no definida)DECAritmtica

Decrement(Disminuir): DEC cambia, en decrementos de 1, el contenido del operando. Se supone que el operando es un valor binario sin signo.Banderas afectadasOF, SF, ZF, AF, PFEjemplos de codificacinDEC AXDEC SUMDEC CLDEC 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 afectadasOF(no definida), SF(no definida), ZF(no definida), AF(no definida),PF(no definida), CF(no definida).Ejemplos de codificacinDIV BX ;AX=DX:AX/BXDIV WRDTMP ;AX=DX:AX/WRDTMPDIV BYTE SUM ;AL=AX/BYTE SUMESCControl 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 codificacinESC 6, TEMPESC 15, CLHLTControl de banderas y procesador

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

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 afectadasOF(no definida), SF[no definida), ZF(no definida), AF(no definida), PF(no definida), CF(no definida)Ejemplos de codificacinIDIV BX ;AX=DX:AX/BXIDIV WRDTMP ;AX=DX:AX/WRDTMPiDIV BYTE SUM ;AL=AX/BYTE_SUMIDIV WORDTBL[BX] ;Direccin indirectaIMULAritmtica

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 afectadasOF, CF, SF(no definida), ZF(no definida), AF(no definida), PF(no definida).Ejemplos de codificacinIMUL BX ;DX:AX=AX*BXIMUL WRDTMP ;DX:AX=AX*WKDTMPIMUL BYTE_SUM ;AX=AL*BYTE_SUMIMUL WORDTBL[BX] ;Direccin indirectaINTransferencia de datos

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 codificacinIN AL, 64hIN AX, DXINCAritmtica

Increment(Incrementar): INC cambia, mediante incrementos de l , el contenido del operando. Se supone que el operando es un valor binario sin signo.Banderas afectadasOF, SF, ZF, AF, PFEjemplos de codificacinINC AXINC SUMINC CLINC TEMP [SI]INTTransferencia 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 afectadasIF, TFEjemplos de codificacinINT lOhINT 13h

INTOTransferencia de control Interrupt on Overflow(Interrumpir en sobreflujo): Si la bandera de sobreflujo (OF) esta activada, INTO 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.IRETTransferencia 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 afectadasOF, DF, IF, TF, SF, ZF, AF, PF, CFJATransferencia 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)JAETransferencia 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)JBTransferencia 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)JBETransferencia de control

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 lade cero. Esta instruccin es funcionalmente igual que JNA.Ejemplo de codificacin JBE NEXT_STEP(JBE SIGUIENTE PASO)JCTransferencia 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)JCXZTransferencia 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)JETransferencia 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)JGTransferencia de control

Jump if Greater(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)JGETransferencia 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)JLTransferencia 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)JLETransferencia 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)

JMPTransferencia 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.Ejemplos de codificacin JMP EXIT CODE(JMP CODIGO SALIDA)JMP [BX] ;Direccin en [BX]JMP AX ;Direccin en AXJNATransferencia de control

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)JNBTransferencia 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 PASOJNBETransferencia de control

Jump if Not Below or Equal(Saltar si no es abajo o igual): JNBE 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 JA.Ejemplo de codificacin JNBE NEXT_STEP(JNBE SIGUIENTE_PASO)JNCTransferencia 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. Estainstruccin es funcionalmente igual que JAE o JNB.Ejemplo de codificacin JNC NEXT_STEP(JNC SIGUIENTE_PASO)JNETransferencia 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)JNGTransferencia 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)JNGETransferencia 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 JNGE NEXT_STEP(JNGE SIGUIENTE_PASO)JNLTransferencia de control

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)JNLETransferencia 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)JNOTransferencia 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)JNPTransferencia 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)JNSTransferencia de control

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)JNZTransferencia 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)JOTransferencia 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)JPTransferencia 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)JPETransferencia 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 instruccin es funcionalmente igual que JP.Ejemplo de codificacin JPE NEXT_STEP(JPE SIGUIENTE_PASO)JPOTransferencia de control

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)JSTransferencia 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)JZTransferencia 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)LAHFTransferencia 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.LDSTransferencia de datos

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)LEATransferencia 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)LESTransferencia 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)LOCKControl 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 codificacinLOCK XLATLODSBManipulacin 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, 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).LODSWManipulacin 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).LOOPTransferencia 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)LOOPETransferencia 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.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)LOOPZTransferencia 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)MOVTransferencia 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 codificacinMOV AX,BX ;AX=BXMOV AX,WRDTMP ;AX=WRDTMPMOV WRDSUM,BX ;WRDSUM=BXMOV CL,57 ;CL=57MOV DEC,10 ;DEC=10MOV AX,TEMP[BX] ;Direccin indirectaMOVSBManipulacin de cadenas

Move String, Byte-by-Byte(Transferir una cadena, byte por byte): MOVSB transfiere cadenas, byte por byte. Los valores de SI yDI 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 codificacinMOVSBREP MOSVB ;Repetir un ciclo de transferenciaMOVSWManipulacin 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 codificacinMOVSWREP MOVSW ;Repetir un ciclo de transferenciaMUL 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 afectadasOF, CF, SF (no definida),ZF (no definida), AF (no definida),PF (no definida).Ejemplos de codificacinMUL BX ;DX:AX=AX*BXMUL WORD_TEMP ;DX:AX=AX*WORD TEMPMUL BYTE_SUM ;AX=AL*BYTE SUMMUL WORLD_TBL[BX] ;Direccin indirectaORManipulacin de bits

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 afectadasOF, SF, ZF, PF, CF,AF (no definida)Ejemplos de codificacinOR AL, BLOR AL, l0000000bOR DX, TEMPOR AX, CXOUTTransferencia 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 codificacinOUT AL, 64hOUT AX, DXPOPTransferencia 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)POPFTransferencia de datos

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 afectadasOF, DF, IF, TF, SF, ZF, AF, PF, CF PUSHTransferencia 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)

PUSHFTransferencia de datos

Place Flags on stack(Colocar banderas en la pila): PUSHF coloca en la pila una copia del registro de banderas.RCLManipulacin 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 afectadasOF, CFEjemplos de codificacinRCL AX,1RCL BL,3RCL TEMP,CLRCRManipulacin de bits

Rotate Right through Carry(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 afectadasOF, CFEjemplos de codificacinRCR AX,1RCR BL,3RCR TEMP,CLREPManipulacin de cadenas

Repeat(Repetir): REP ocasiona que las instrucciones de manipulacin de cadenas se repitan tantas veces como se indique en CX.Ejemplo de codificacinREP MOVSBREPEManipulacin 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 codificacinREPE CMPSWREPNE 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 codificacinREPNE CMPSWREPNZManipulacin de cadenas

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 usacon 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 codificacinREPNZ 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 codificacinREPZ CMPSWRETTransferencia 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 codificacinRETROLManipulacin 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 afectadasOF, CFEjemplos de codificacinROL AX,1ROL BL,3ROL TEMP,CLRORManipulacin de bits

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 afectadasOF, CFEjemplos de codificacinROR AX, lROR BL, 3ROR TEMP, CLSAHFTransferencia 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 afectadasSF, ZF, AF, PF, CFSALManipulacin 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 afectadasOF, SF, ZF, PF, CF,AF (no definida)Ejemplos de codificacinSAL AX,1SAL BL,3SAL TEMP,CLSARManipulacin de bits

Arithmetic Shift Right (Desplazamiento aritmtico a la derecha): SAR 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 mientras que los de alto orden adquieren el valor del bit de alto orden existente.Banderas afectadasOF, SF, ZF, PF, CF,AF (no definida)Ejemplos de codificacinSAR AX,1SAR BL,3SAR TEMP,CLSBBAritmtica

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 afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinSBB AX,BX ;AX=AX-AX-CFSBB AX,TEMP ;AX=AX-TEMP-CFSBB SUM,BX ;SUM=SUM-BX-CFSBB CL,l0 ;CL=CL-l0-CFSBB AX,TEMP(BX) ;Direccin indirectaSCASBManipulacin 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 elexmen 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 ypalabra.Banderas afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinSCASBREPNZ SCASB SCASWManipulacin 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 elexamen 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 ypalabra.Banderas afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinSCASWREPNZ SCASW SHLManipulacin 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 afectadasOF, SF, ZF, PF, CF,AF (no definida)Ejemplos de codificacinSHL AX,1SHL BL,3SHL TEMP,CL

SHRManipulacin 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 afectadasOF, SF, ZF, PF, CF,AF (no definida)Ejemplos de codificacinSHR AX,lSHR BL,3SHR TEMP,CL

STCControl de banderas y procesador

Set Carry Flag(Activar la bandera de acarreo): STC activa la bandera de acarreo sin importar la condicin presente de esta.Bandera afectadaCFSTDControl 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 afectadaDFSTIControl 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 afectadaIFSTOSBManipulacin 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.STOSWManipulacin de cadenzas

Store Word in AX at String(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.SUBAritmtica

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 afectadasOF, SF, ZF, AF, PF, CFEjemplos de codificacinSUB AX,BX ;AX=AX-AXSUB AX,TEMP ;AX=AX-TEMPSUB SUM,BS ;SUM=SUM-BXSUB CL,10 ;CL=CL-10SUB AX,TEMP[BX] ;Direccin indirectaTESTManipulacin 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 afectadasOF, SF, ZF, PF, CF,AF (no definida)Ejemplos de codificacinTEST AX,BX ;TEST AX,TEMP ;TEMP debe ser una palabraTEST SUM,BX ;SUM debe ser una palabraTEST CL,OOOOllllb ;TEST AX,TEMP[BX] ;Direccin indirectaWAITControl de banderas y procesador

Wait(Esperar): WAIT ocasiona que la UCP espere una interrupcin externa en la lnea de TEST antes de continuar.XCHGTransferencia de datos

Exchange(Intercambiar): XCHG intercambia el contenido de los operandos fuente y de destino.Ejemplos de codificacinXCHG AX,BX ;Intercambiar AX con BXXCHG CL,CH ;Intercambiar CL con CHXCHG AC,TEMP ;Intercambiar AX con TEMPXLATTransferencia 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.XORManipulacin 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 afectadasOF, SF, ZF, PF, CF, AF (no definida)Ejemplos de codificacinXOR AX,BX ;XOR AX,TEMP ;TEMP debe ser una palabraXOR SUM,BX ;SUM debe ser una palabraXOR CL,OOOllllb ;XOR AX,TEMP[BX] ;Direccin indirecta9. BIBLIOGRAFA

http://www.wikipedia.org http://www.intel.com http://www.slideshare.net http://www.rincondelvago.com http://www.monografias.com

Arquitectura de Computadoras#1