lab 3 arquitectura de computadoras

download lab 3 arquitectura de computadoras

of 31

description

lab 3 arquitectura de computadoras

Transcript of lab 3 arquitectura de computadoras

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA ARQUITECTURA DE COMPUTADORASUniversidad Nacional de San AgustnFacultad de Ingeniera de Produccin y ServiciosEscuela Profesional de Ingeniera Electrnica

Curso: Arquitectura De Computadoras LABORATORIO N 3Ensamblador 8088/8086, direccionamiento y programacin, juego de instrucciones manual INTEL (Windows y Linux Ubuntu) y las dems con pantaln negro y blusa.Todos son bienvenidos!!!!

Integrantes: Champi Gutierrez Luis Miguel 20101147 Mendoza Lima Juan Carlos 20100686 Salinas Castillo Howard 20102181GRUPO: 4Fecha de Entrega: 5 de Octubre del 2015AREQUIPA - PERU2015ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA ARQUITECTURA DE COMPUTADORAS

Contenido:1Introduccin32Tamao De Los Datos33Almacenamiento De Datos34Registros34.1Registros De Propsito General54.2Registros ndice54.3Registros Apuntadores54.4Registros De Banderas64.5Registros De Segmento74.6Registro Apuntador De Instrucciones75Acceso A Memoria Y A Puertos86Segmentacin87Modos De Direccionamiento107.1Direccionamiento Inmediato127.2Direccionamiento A Registro127.2.1Direccionamiento De Registro Directo127.2.2Direccionamiento De Registro Indirecto14DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON DESPLAZAMIENTO14DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN REGISTRO BASE Y UN REGISTRO NDICE15DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN REGISTRO BASE Y UN REGISTRO NDICE Y UN REGISTRO CONSTANTE.158Instrucciones168.1Instrucciones De Transferencia De Datos (No Afectan Flags)168.2Instrucciones Aritmeticas (Afectan los flags AF, CF, OF, PF, SF, ZF)178.3Instrucciones Logicas (Afectan AF, CF, OF, PF, SF, ZF)198.4Instrucciones De Manipulacion De Cadenas:208.5Instrucciones De Transferencia De Control (No afectan los flags):228.6Instrucciones De Control Del Procesador259Bibliografia26

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

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.

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

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

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, fuenteDireccionamiento InmediatoEl operando fuente aparece en la instruccin. Un ejemplo, es el que mueve un valor constante a un registro interno.MOV AX, 568Direccionamiento 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 fuenteDireccionamiento 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

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 = 37C09HInstruccionesInstrucciones De Transferencia De Datos (No Afectan Flags)MOVdest,srcCopia el contenido del operando fuente (src) en el destino (dest).Operacin:dest