You are on page 1of 14

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.

UNIDAD I. FUNDAMENTOS (Primera Parte).


1.1 Introduccin.
Antecedentes Al desarrollarse las primeras computadoras electrnicas programables, empezaron a aparecer los programas y los lenguajes de programacin. Tenga en cuenta que la primera computadora electrnica programable (ENIAC 1946) se programaba al cablear los circuitos de sta. Puesto que este mtodo se volvi demasiado fastidioso para aplicaciones prcticas, en el inicio de la evolucin de los sistemas de cmputo comenzaron a aparecer lenguajes de programacin para poder controlarlas. El primero de estos lenguajes fue, el Lenguaje Mquina, que se form utilizando claves binarias que representaban su cdigo de operacin (OPCODE) y se almacenaban en la memoria de la computadora como grupos de instrucciones llamados programas. Por ejemplo, suponga una calculadora programable simple podra asignar los cdigos de operacin: 1 = SUMAR 2 = RESTAR 3 = MULTIPLICAR 4 = DIVIDIR.

Supongamos que queremos realizar la operacin 5 * 3 + 2, en el equipo descrito al inicio. En memoria, podramos "escribir" el programa de la siguiente forma: Localidad OPCODE Significado Comentario 0 1 2 3 4 5 3 3 1 2 5 * 3 + 2 En esta localidad, tenemos el primer nmero de la frmula En esta localidad, tenemos el cdigo de operacin que representa la multiplicacin. En esta localidad, tenemos el segundo nmero de la frmula En esta localidad, tenemos el cdigo de operacin que representa la suma. En esta localidad, tenemos el ltimo nmero de la frmula

Podemos ver que con esta representacin, es simple, expresar las operaciones de las que es capaz el hardware (en este caso, nuestra calculadora imaginaria), en la memoria. La descripcin y uso de los cdigos de operacin (OPCODE) es lo que llamamos lenguaje de mquina. Es decir, la lista de cdigos que la mquina va a interpretar como instrucciones, describe las capacidades de programacin que tenemos de ella; es el lenguaje ms primitivo, depende directamente del hardware, y requiere del programador que conozca el funcionamiento de la mquina al ms bajo nivel. Este mtodo resulto ser ms eficiente que volver a cablear la mquina, pero an as era extremadamente tardado desarrollar un programa debido al gran nmero de claves necesarias. La primera persona en desarrollar un sistema que aceptaba instrucciones y las almacenaba en memoria, fue el matemtico John Von Neumann (a menudo a estos equipos se les conoca como Mquinas Von Newmann en su honor). Cuando abstraemos los cdigos de operacin y los sustituimos por una palabra que sea una clave de su significado, a la cual comnmente se le conoce como mnemnico, tenemos el concepto de lenguaje ensamblador. As, se puede definir: El lenguaje ensamblador es la primera abstraccin del lenguaje de mquina, consistente en asociar a los cdigos de operacin en palabras clave que faciliten su uso por parte del programador. Como se puede ver, el lenguaje ensamblador es directamente traducible al lenguaje de mquina, y viceversa; simplemente, es una abstraccin que facilita su uso para los seres humanos. Por otro lado, la computadora no entiende directamente al lenguaje ensamblador; es necesario traducirle a lenguaje de mquina. Originalmente, este proceso se haca a mano, usando para ello hojas donde se escriban tablas de programa similares al ejemplo de la calculadora que acabamos de ver. Pero, al ser tan directa la traduccin, pronto aparecieron los programas Ensambladores, que son traductores que convierten el cdigo fuente (en Lenguaje Ensamblador) a cdigo objeto (es decir, a Lenguaje de Mquina). A principios de los aos cincuenta, una vez que las computadoras como la UNIVAC estaban disponibles se utiliz el lenguaje ensamblador. Aunque el lenguaje ensamblador es una ayuda para la programacin, no fue hasta 1957 (cuando Grace Hopper desarroll el primer lenguaje de programacin de alto nivel llamado FLOW-MATIC) que permiti que las computadoras fueron ms fciles de programar.

Enero Junio 2011

Pg. 1 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


1.1.1. Uso y aplicaciones del Lenguaje Ensamblador. El lenguaje ensamblador es una variante (legible para el ser humano) del lenguaje mquina que usan las computadoras para ejecutar programas. Al mismo tiempo es la mejor manera que tiene el programador para comunicarse con su computadora y con el lenguaje de programacin que utilice. Este lenguaje le da la facilidad y las herramientas necesarias para que el programador tome el control de todo lo que la computadora puede realizar fsicamente. Aunque cualquier lenguaje de programacin ofrece facilidades para realizar determinadas tareas, ninguno proporciona un control absoluto sobre la computadora personal, ni informacin fundamental de lo que sucede mientras el programa se ejecuta. Si nunca ha trabajado con el ensamblador se preguntar porqu no usar BASIC, PASCAL, CLIPPER, MODULA o C. Existen varias razones que justifican el uso del ensamblador en lugar de otros lenguajes: Ayuda a conocer a detalle cmo trabaja un microprocesador. El ensamblador brinda la oportunidad de conocer ms a fondo la operacin de su computadora. Esto le permite implementar software o hardware de una manera ms consciente (comprendiendo cmo y porqu lo hace). Se conserva el control total de lo que deber hacer su computadora, siempre y cuando sta sea fsicamente capaz de hacerlo. Los programas en ensamblador son ms rpidos, ms compactos y tienen mayor capacidad que los creados en otros lenguajes. El programador puede optimizar al mximo sus programas (tanto en tamao como en velocidad de ejecucin). En el caso de otros lenguajes de programacin ya existe cdigo que se genera de manera predefinida, haciendo muy difcil su optimizacin. Desarrolla habilidades de programacin avanzadas.

A continuacin se presenta una tabla que indica los tamaos de los archivos creados por los diferentes compiladores. El programa muestra desplegar la siguiente cadena: Hola, que tal! Lenguaje BASIC CLIPPER ENSAMBLADOR Fuente 27 bytes 22 bytes 162 bytes Objeto 651 bytes 572 bytes 169 bytes Ejecutable (.EXE) 12 814 bytes 159 178 bytes 543 bytes

No se estn comparando las velocidades de ejecucin, aunque si tomamos en cuenta el tamao del programa ejecutable, es obvio que mientras ms grande sea ste, su ejecucin ser ms tardada debido al tiempo necesario para cargarlo. Ahora que se ha visto las diferencias entre los lenguajes, tambin es justo sealar los problemas de trabajar con el lenguaje ensamblador: Una instruccin mal interpretada o un error de lgica en el programa puede causar un caos, a tal grado que ser necesario apagar y encender de nuevo la computadora. La insuficiencia de conocimientos sobre el funcionamiento interno de la computadora puede causar efectos impredecibles. Es necesario ajustarse a una convencin respecto al uso de interrupciones. Se debe tener presente que un programa se puede volverse ms complejo conforme se le agregan rutinas o funciones adicionales. El programa fuente que despliega la cadena antes mencionada en lenguaje ensamblador se muestra a continuacin: .model small .stack .data mens db Hola, que tal! .code emp: mov ax,@data mov ds,ax mov dx, offset mens mov ah,09h int 21h mov ax, 4C00h int 21h end emp

Enero Junio 2011

Pg. 2 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


La mayora de las aplicaciones que se ejecutan en una computadora han sido han sido desarrolladas empleando un lenguaje de alto nivel, de los cuales existen infinidad, tales como: C, C++, Pascal, COBOL, Java, PHP, C#, Visual Basic, Perl, Python, etctera. En una gran parte de estos desarrollos la eleccin de un lenguaje u otro es casi una preferencia personal, puesto que en general comparten una funcionalidad, e incluso una sintaxis, muy similar. En contraposicin, el lenguaje ensamblador se dirige a tipos de proyectos y situaciones mucho ms concretos y especficos. En muchos casos este lenguaje se utiliza no para desarrollar una aplicacin completa, sino para mejorar la velocidad de ciertas partes de un programa o bien realizar operaciones que, desde el lenguaje de alto nivel, no estn accesibles de otra forma. En dispositivos de poca capacidad de memoria y potencia limitada, se suele recurrir al ensamblador como recurso principal para definir su programacin. As mismo la programacin en lenguaje ensamblador es un recurso, un medio ms que un fin, utilizado en temas relacionados con la informtica para acercar al estudiante a las interioridades de los microprocesadores, facilitndole el conocimiento de su arquitectura as como su funcionamiento. En este sentido la escritura de programas en ensamblador fortalece el pensamiento analtico del programador, ya que se ve forzado a dividir el problema a resolver en una multitud de operaciones sencillas, repitiendo el proceso hasta poder expresar esas operaciones mediante los cdigos de operacin con que cuente el microprocesador. El ensamblador resulta indispensable cuando se desea escribir programas que controlen la entrada/salida de la computadora, agregar nuevas interfaces de entrada/salida, escribir rutinas optimizadas de un procedimiento en especial, escribir rutinas que aprovechen y maximicen el uso del hardware, y en general realizar cualquier tarea que no puedan llevar a cabo los dems lenguajes de programacin. El ensamblador resulta ser muy til en el rea de electrnica y en el rea de sistemas computacionales y proporciona mejores oportunidades de empleo en la industria. Las aplicaciones del ensamblador, como cualquier otro lenguaje de programacin son bastas, por citar algunos ejemplos se puede encontrar en: Sistemas Embebidos: La denominacin de sistemas embebidos (embedded) refleja que son una parte integral (interna) del sistema, y en general son dispositivos utilizados para controlar o asistir la operacin de diversos equipamientos como pueden ser Impresoras, cmaras, autos, armas, juguetes, etc. Tiempo Real: Un sistema de tiempo real es aquel capaz de procesar una muestra de seal antes de que ingrese al sistema la siguiente muestra. En la industria y en la manufactura, en la adquisicin de datos y el control de robots. Transporte: Barcos, aviones, sondas espaciales, etc. Entretenimiento: Graficacin, Multimedia, Cine, Videojuegos. DSP (acrnimo de Digital Signal Processor -Procesador Digital de Seal-): Un DSP es un sistema basado en un procesador o microprocesador que posee un juego de instrucciones, un hardware y un software optimizados para aplicaciones que requieran operaciones numricas a muy alta velocidad. Procesamiento de seales, voz e imgenes. Las aplicaciones ms habituales en las que se emplean DSP son el procesado de audio y video; y cualquier otra aplicacin que requiera el procesado en tiempo real. Con estas aplicaciones se puede eliminar el eco en las lneas de comunicaciones, lograr hacer ms claras imgenes de rganos internos en los equipos de diagnstico mdico, cifrar conversaciones en telfonos celulares para mantener privacidad, analizar datos ssmicos para encontrar nuevas reservas de petrleo, hace posible las comunicaciones de las redes locales inalmbricas, el reconocimiento de voz, los reproductores digitales de audio, los mdems inalmbricos, las cmaras digitales, y una larga lista de elementos que pueden ser relacionados con el proceso de seales.

Enero Junio 2011

Pg. 3 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA. 1.2 El Microprocesador.


El microprocesador es un circuito integrado de gran complejidad; su poder radica en su capacidad para poder ejecutar miles de millones de instrucciones por segundo provenientes de un programa o software (grupo de instrucciones). El microprocesador realiza tres tareas principales para el sistema de cmputo: 1. Transferencia de datos entre l mismo y la memoria o dispositivos de Entrada/Salida. 2. Operaciones Lgicas y Aritmticas. 3. Control de flujo del programa por medio de decisiones simples. Internamente consta de varias partes: memoria cache o de almacenamiento intermedio (uno o dos niveles), unidad de recuperacin de instrucciones, cola de instrucciones, unidades de ejecucin, etc. La figura 1 muestra un esquema a bloques muy simplificado de un microprocesador y los elementos que le permiten comunicarse con la memoria a fin de recuperar instrucciones y ejecutarlas. Asumiendo que en la memoria hay un espacio que contiene un programa, recuperado de un ejecutable, los pasos que dara el procesador seran ms o menos los siguientes: La BU (Bus Unit Unidad de Bus-) recupera de la memoria las instrucciones y, en el caso de las actuales Pentium y compatibles., las va almacenando en una cola, de tal manera que se encuentren ya en el microprocesador con antelacin para acelerar la ejecucin. Las instrucciones van pasando de esa cola interna de la BU a la IU (Instruction Unit Unidad de Instruccin-), que se encarga de decodificar las instrucciones y recuperar los datos que pudieran llevar asociados. La UI conjuntamente con la BU, conforman la parte del microprocesador que se ocupa de ir recuperando y preparando las instrucciones del microprocesador. Los dos bloques que aparecen a la izquierda, en el interior del microprocesador, forman la Unidad de Ejecucin, compuesta de la CU (Control Unit Unidad de Control -) y la ALU (Arithmetic Logic Unit Unidad Lgica Aritmtica-) Observe que estas unidades comparten el acceso a los registros. Las instrucciones pasan de la IU a la CU, encargada de ejecutarlas sirvindose para ello de los datos alojados en los registros y apoyndose en la ALU. En consecuencia, se modificarn esos registros, por ejemplo el de indicadores y si es necesario se enviar de vuelta a la memoria el dato que corresponda. Para ello la CU se comunica con la BU.

Figura 1. Esquema a bloques de un microprocesador.

Enero Junio 2011

Pg. 4 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


Un ejemplo: El microprocesador 8086/8088 est constituido por dos unidades que operan de manera independiente y estas son: 1. UNIDAD DE INTERFAZ DE BUS (BIU). a) Realiza la fase de captura de la instruccin. b) La coloca en la cola de espera. (4 bytes para el 8088) (6 bytes para el 8086) c) Realiza el control del Bus. d) Contiene los registros de segmento.

2. UNIDAD DE EJECUCION. (EU) a) Extrae la primera instruccin en la cola de la BIU b) Ejecuta la instruccin. c) Contiene los registros de propsito general, registros de pila y registro ndice. En la figura 2 se muestra el diagrama del Modelo de Programacin para este microprocesador.

Figura 2. Modelo de programacin

El microprocesador tiene disponibles 20 bits de direccionamiento a memoria, es organizada en un arreglo lineal de 1'048,576 de bytes, direccionables del 00000H a 0FFFFFH. La memoria es dividida lgicamente en segmentos llamados: CODE, DATA, EXTRA DATA y STACK. Cada uno puede tener desde 16 bytes hasta 64 KB de longitud. La referencia a memoria se realiza mediante un DIRECCIONAMIENTO BASE l cual se encuentra en registros de segmento de alta velocidad. El tipo segmento se escogi de acuerdo a las necesidades de los programas. El registro de segmento es seleccionado de acuerdo a la siguiente regla: Toda la informacin con los mismos atributos es colocada en un mismo segmento; por ejemplo todo el cdigo es colocado en el segmento de cdigo (CS) y todos los datos son colocados en el segmento de datos (DS). Esta manera de hacer las cosas da como resultado programas ms rpidos, cortos y estructurados. En la figura 3 muestra la organizacin de la memoria del microprocesador.

Enero Junio 2011

Pg. 5 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.

CS SS DS ES Registros de Segmento word

Segmento de Cdigo Segmento de Stack msb. lsb byte Segmento de Datos

Segmento Extra Datos

Figura 3. Organizacin de memoria en la familia de INTEL

Hay localidades de la memoria las cuales son reservadas para operaciones especficas del microprocesador: a) De la direccin 00000H a la 003FFH son reservadas para interrupciones, lo que permite manejar hasta 256 interrupciones. Cada interrupcin usa 4 bytes: * 2 bytes para la direccin del segmento. * 2 bytes para la direccin del offset . b) De la direccin FFFF0H a la FFFFFH son reservadas para rutinas de inicializacin del sistema.

El microprocesador 8086/8088 puede manejar alrededor de 65536 puertos de Entrad/Salida. La direccin de Entrada/Salida permanece en el mismo formato en las lneas A0 a A15, las restantes lneas de direccin se mantienen en CERO en operaciones de entrada/salida. Las instrucciones de Entrada/Salida utilizan el registro DX como un apuntador, con ello se logra un acceso directo a cualquier dispositivo de Entrada/Salida. En la figura 4 se muestra el diagrama del manejo del direccionamiento del microprocesador 8088/8086.

Entrada/Salida 0FFFFh

Memoria RAM 0FFFFFh

00000h 8086/8088

Bus de Direcciones

000000h
Figura 4. Manejo de direccionamiento del microprocesador. Enero Junio 2011 Pg. 6 Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


1.2.1. Buses. Un BUS es un conjunto de conductores comunes que interconectan componentes en un sistema de cmputo. Los buses que interconectan partes de un sistema de cmputo transfieren direcciones, datos e informacin de control entre el microprocesador y sus sistemas de memoria y de entrada/salida. En el sistema de cmputo basado en el microprocesador, existen tres tipos de buses para esta transferencia de informacin: el bus de datos, el bus de direcciones y el bus de control. La figura 5 muestra cmo estos buses interconecta a varios componentes del bus del sistema, como el microprocesador, la RAM, la ROM y algunos pocos dispositivos de entrada/salida.

Figura 5. Diagrama a bloques de un sistema de cmputo que muestra los buses.

El bus de direcciones solicita a la memoria una localidad de memoria o a los dispositivos de entrada/salida una localidad de entrada/salida. Si la entrada/salida es direccionada, el bus de direcciones contiene una direccin de entrada/salida de 16 bits; si la memoria es direccionada, el bus de direcciones contiene una direccin de memoria que vara en ancho dependiendo de una versin del microprocesador a otro microprocesador. El bus de datos transfiere informacin entre el microprocesador y su espacio de direccionamiento de memoria y entrada/salida; la transferencia de datos vara tamao dependiendo del tipo de microprocesador que se trate. La ventaja de un bus ms ancho es la velocidad de las aplicaciones que utilizan formatos grandes. El bus de control contiene lneas que seleccionan ya sea a la memoria o la entrada/salida y que ocasionan que stas efecten una operacin de lectura o escritura. En la mayora de los sistemas de cmputo existen cuatro lneas del bus de control: MRDC (Control de lectura de memoria), MWTC (Control de escritura de memoria), IORC (Control de lectura de entrada/salida) e IOWC (Control de escritura de entrada/salida). Por ejemplo, si IOWC = 0, el microprocesador est escribiendo datos desde el bus de datos hacia un dispositivo de entrada/salida, cuya direccin aparece en el bus de direcciones. El microprocesador lee el contenido de una localidad de memoria enviando una direccin a travs del bus de direcciones; en seguida enva a la memoria la seal de control de lectura de memoria (MRDC) para hacer que sta proporcione datos. Por ltimo, la informacin leda de la memoria llega al microprocesador a travs del bus de datos. Cada vez que ocurra una escritura de memoria o una lectura o una escritura de entrada/salida, se repite la misma secuencia, salvo porque las seales de control son diferentes y el flujo de datos sale del microprocesador a travs de su bus de datos para una operacin de escritura.

Enero Junio 2011

Pg. 7 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


1.2.1. Registros. El cdigo de los programas, los datos con los que stos trabajan, la pila de direcciones de retorno y muchos otros elementos esenciales a la hora de programar en ensamblador se almacenan temporalmente en la memoria de la computadora. De ah tienen que pasar, en un momento u otro, al microprocesador para que ste pueda servirse de ellos y, en caso necesario, manipularlos. Con este fin, el microprocesador cuenta con pequeas zonas de memoria interna conocidas como registros. El modelo de programacin de los microprocesadores x86 al Pentium II se considera visible para el programa, ya que sus registros son utilizados durante la programacin de aplicaciones y son especificados por las instrucciones. La figura 6 ilustra el modelo de programacin de los microprocesadores x86 . Los modelos antiguos de microprocesadores poseen arquitecturas internas de 16 bits, a partir del modelo 80386 hasta el Pentium II poseen arquitecturas de 32 bits. Los antiguos modelos son completamente compatibles con los modernos.

Figura 6. Registros de propsito general en un microprocesador x86. Estos registros se han dividido en categoras dependiendo para lo que se utilizan, as pues tenemos los registros de propsito general o de propsitos mltiples, los registros de propsito especfico y los registros de segmentos.

Enero Junio 2011

Pg. 8 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.

Figura 7. Registros de uso especfico en un microprocesador x86.

Registros de Propsito General. Se cuenta con 8 registros de propsito general; los primeros cuatro registros de la tabla pueden manejarse como registros de diferentes tamaos (64,32,6,8 bits) dependiendo del tipo de microprocesador que se este utilizando. Nombre Acumulador Base Contador Datos Apuntador de Pila Apuntador Base Indice Fuente Indice Destino Uso Instrucciones aritmticas, instrucciones de ajuste de formato e instrucciones de E/S. Almacenamiento de direcciones de desplazamiento en estructuras de datos. Variables de lazo y contadores Operaciones aritmticas. Direcciona un rea de memoria llamada pila Apuntador auxiliar de la pila, transferencia de datos a memoria Instrucciones de cadena Instrucciones de cadena

Enero Junio 2011

Pg. 9 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


Registros de uso especfico. Los registros de segmento son siempre de 16 bits, en cualquier modo de trabajo, si bien la forma de utilizarlos difiere de un modo de trabajo a otro. En modo real se utilizan para almacenar la DIRECCION BASE de cada uno de los segmentos de un programa y que, en combinacin con otros registros permiten componer direcciones fsicas de memoria. Utilizando la tcnica de direccionamiento protegido lo que almacenan son SELECTORES y no una direccin fsica. Nombre Segmento de cdigo Segmento de datos Registro de 16 bits CS (CODE) DS (DATA) Uso Direccin del cdigo del programa. Automtica para todas las instrucciones en el ciclo de precaptura. Direccin de datos del programa. Referencias a datos, operaciones con cadenas o que explcitamente se enven al registro. Direccin de la pila. La mayora de los programas necesitan de una pila para poder funcionar. Para instrucciones de PUSH, POP y algunas referencias a BP. Direccin alterna de datos. Suele utilizarse como segundo recurso para el acceso a datos y ciertas operaciones con cadenas seleccionados de manera explcita. Estos registros no tienen una finalidad especfica y al igual que ES, pueden utilizarse en cualquier contexto donde se precise acceder a un segmento de memoria adicional.

Segmento de pila

SS (STACK)

Segmento extra

ES (EXTRA)

FS, GS

Por defecto ciertos registros de segmento se asocian a bloques de memoria determinados de los programas, utilizndose en combinacin con registros de propsito general o especfico concretos. Por tanto uno registro de segmentacin se usa para almacenar la DIRECCION DE SEGMENTO y el otro para almacenar el OFFSET (desplazamiento), por ello existen registros que siempre trabajan en pares. Registro de 16 bits CS:IP SS:SP DS:BX DS:SI DS:DI Uso Direccin completa del cdigo. (IP contador de programa) Direccin completa de la pila. Direccin completa de los datos. Direccin completa de los datos. Direccin completa de los datos.

Apuntador de Instrucciones (IP). Segn se acaba de mencionar el registro CS almacenar la direccin base del segmento o seccin donde se encuentra el cdigo del programa. Se necesita adems, un segundo registro que vaya indicando al microprocesador la ejecucin que debe realizar a cada paso, ya que el contenido de CS permanecer durante todo el tiempo con esa direccin base. Aqu es donde entra en juego el registro IP (Instruction Pointer) o Apuntador de Instrucciones. La pareja formada por los registros CS:IP determinarn la direccin exacta de memoria en la que se encuentra la instruccin a procesar. El contenido del apuntador de instrucciones puede ser modificado con una instruccin de salto o una llamada a una subrutina. Registros de control. Estn representados por CR0, CR1, CR2, CR3 con una tamao de 32 bits en modo protegido y de 64 en modo largo, siendo su finalidad modificar o informar sobre distintos aspectos del funcionamiento del microprocesador. Una aplicacin raramente tendr la necesidad de acceder a estos registros, por lo que no se tratar con mayor profundidad. El ltimo conjunto de registros mostrados en la figura 7 es el de los que incorporan la FPU (Floting Point Unit), parte de la ALU que se encarga de los clculos en coma flotante, y la unidad encargada de las instrucciones MMX/SSE/3DNow

Enero Junio 2011

Pg. 10 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


Registro Bandera. La base de la operacin de un microprocesador, son las banderas de estado, las cuales son modificadas como consecuencia de las operaciones realizadas tanto aritmticas como lgicas. Las banderas nunca cambian por efecto de la transferencia de datos u operaciones de control del programa. La figura 8 muestra la organizacin interna del registro banderas para diferentes versiones de microprocesadores; observe que los bits banderas son compatibles con las versiones posteriores de los microprocesadores. 63 21 ID VIP VIF AC VM RF ` NT IOP IOP O D I T S Z A P 0 C

8086/8088/80186/80186 80286 80386/80386DX 80486SX Pentium/Pentium II Figura 8. Posicin de los bits banderas.

CF ZF TF DF IOP RF AC VIF VIP

Carry Zero Trap Direction

Acarreo. Cero. Trampa (una instruccin a la vez). Direccin (Inc/Dec de registros ndices). Nivel de Privilegio de entrada/salida. Reanudar. Verificacin de alineacin. Bandera de interrupcin virtual Interrupcin virtual pendiente.

PF SF IF OF NT VM

Parity Sign Interrupt Overflow

Paridad. Signo. Interrupcin. Sobreflujo Tarea anidada. Modo virtual.

ID

Identificacin.

Antesala para abordar los modos de direccionamiento a la memoria. Aunque existen conceptos, que conocer en este semestre, generales a la programacin en ensamblador usando cualquier microprocesador, cuando se inicia la prctica las diferencias pueden ser muy considerables. Por ello es necesario optar por estudiar el conjunto de instrucciones y caractersticas de un microprocesador en concreto. Conociendo ste, aprender programar para otro ser bastante sencillo. El dilema est, en principio, elegir con cul microprocesador empezar. Actualmente la arquitectura del microprocesador ms usada mundialmente en computadoras, el dispositivo ms accesible a la programacin, es la conocida como x86. Esta surgi con el ahora anciano microprocesador INTEL 8086 y, a lo largo de ms de veinte aos, ha ido evolucionando hasta llegar a los ltimos Pentium IV, AMD, Athlon y otros microprocesadores compatibles. Existen multitud de herramientas para programar en ensamblador en la plataforma x86, por lo que parece la eleccin lgica. Al programar en ensamblador no slo se utiliza el conjunto de instrucciones y registros de cierto microprocesador sino que, adems, usarn dichas instrucciones para acceder a elementos del hardware, como de adaptador de vdeo, el teclado, los buses de comunicacin de una cierta arquitectura de la computadora. De igual manera, para efectuar ciertas tareas se utilizarn servicios puestos a disposicin de las aplicaciones por el sistema operativo. Cuando las tareas a efectuar son algo ms complejas, como el recuperar informacin de un archivo en disco o abrir una ventana en un entorno grfico, suele recurrirse a los servicio que ofrece el sistema operativo. Es otro punto en el cual se crean fuertes dependencias entre programa y plataforma, en este caso plataforma software. Son distintos lgicamente los servicios ofrecidos por LINUX, DOS, Mac OS y WIN, no estando disponibles las mismas funciones para cada uno de ellos. Los sistemas operativos antes mencionados son cuatro de los ms usados, si bien DOS, WIN y LINUX pueden encontrarse para una misma arquitectura del microprocesador y hardware, MAC OS es un caso aparte por la arquitectura de los procesadores POWER PC y el propio hardware de la MAC. El rea de memoria en la que se alojar el cdigo del programa, el rea de datos y la pila parten de una direccin a la que podra denominarse Direccin Base. Dicha direccin es desconocida por el programa, de tal forma que es el sistema operativo el que decide dnde colocarlo segn las reas que ya estuviesen ocupadas. Por lo tanto, es el sistema operativo, quien le asigna el valor del registro CS, almacenando en l la direccin base o direccin de memoria donde se encuentra la primera instruccin del programa. De igual manera, se establecen los valores para los registros DS y SS, y si bien stos suelen ser configurados por el propio programa una vez que se ha puesto en marcha. El primero determina el rea de memoria en la que se encontrarn los datos del programa, el segundo almacena la direccin base de la zona dedicada a la pila. Refirindonos a la pila, sta es una estructura de datos LIFO (Last In First Out), de tal forma que el ltimo dato introducido en ella es el primero que se recupera. Esta es la razn de que el crecimiento sea en orden inverso, para facilitar siempre la extraccin en primer lugar del ltimo dato almacenado. Enero Junio 2011 Pg. 11 Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


1.2.3. Modos de direccionamiento. Los microprocesadores 80286 y posteriores operan tanto en modo real como en modo protegido, slo los micro 8086 y 8088 operan exclusivamente en modo real. La operacin en modo real permite a los microprocesadores direccionar solamente el primer MB del espacio en memoria, aun en el Pentium IV; recuerde que el primer MB de memoria se le conoce como sistema de memoria real o de memoria convencional. El DOS requiere que el microprocesador opere en modo real ya que la operacin en este modo permite que el software de aplicacin escrito para los 8088/8086 (que tienen solo 1 MB de memoria) funcione sin modificaciones en el 80286 y posteriores. Esta compatibilidad de software es parcialmente responsable del xito sostenido de los microprocesadores de la familia INTEL. En todos los casos, cada uno de los microprocesadores inicia su operacin en modo real al encender la computadora o inicializa el microprocesador. La suma de una direccin de segmento y una direccin de desplazamiento acceden a una localidad de memoria en modo real. La figura 9 muestra cmo el sistema de direccionamiento de segmento ms desplazamiento selecciona una localidad de memoria. Esta ilustracin muestra un segmento de memoria que inicia en la localidad 10000H y termina en la localidad 1FFFFH (64 KB de longitud). Tambin muestra cmo un desplazamiento de F000H selecciona la localidad 1F000h en el sistema de memoria. Observe que el desplazamiento es 0FFFFFH la distancia de la localidad seleccionada desde el inicio del segmento, como se muestra en la figura 8. El registro de segmento en la figura 8 contiene un 1000h, y sin embargo direcciona un inicio de segmento en la localidad 10000h. En modo real a cada registro de segmento se agrega un cero a la derecha internamente que es resultado de la multiplicacin de la direccin base por 10h, para construir una direccin de memoria de 20 bits, lo que permite acceder al principio de un segmento. De la misma forma, si un registro de segmento contiene un 1210h, direcciona un segmento de memoria que inicia en la localidad 12100h. Debido al 0h agregado internamente, los segmentos en modo real pueden iniciar solamente en los lmites establecidos por mltiplos de 16 bytes del sistema de memoria. Con frecuencia, este lmite de 16 bytes es conocido como prrafo.

1FFFFH

1F000H

segmento de 64 KB

Desplazamiento = 0F000h

Registro de segmentacin =1000h 10000H

00000H Figura 9. Modo de direccionamiento real.

Enero Junio 2011

Pg. 12 -

Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


El direccionamiento en modo protegido permite acceder a datos y programas localizados por encima y dentro del primer megabyte de memoria. Para direccionar esta seccin extendida del sistema de memoria se requiere de un cambio en el esquema de direccionamiento de segmento ms desplazamiento usado en el modo real. Cuando los datos y programas se direccionan en memoria extendida, se sigue utilizando la direccin de desplazamiento para acceder a la informacin en el segmento de memoria. Una diferencia consiste en que la direccin de segmento, como se explico en el caso de direccionamiento de memoria en modo real, ya no existe en el modo protegido. En lugar de una direccin de segmento, el registro de segmento contiene un selector que elige un descriptor de una tabla. Otra diferencia, en los 80386 y posteriores, es que en modo protegido la direccin de desplazamiento puede ser un nmero de 32 bits en vez de uno de 16 bits. Una direccin de desplazamiento de 32 bits permite al microprocesador acceder a los datos de un segmento que puede tener hasta 4 GB de longitud. El selector, ubicado en el registro de segmento, elige uno de los 8192 descriptores en una de las dos tablas de descriptores. El descriptor especifica la ubicacin, la longitud y los derechos de acceso del segmento de memoria, esto se muestra en la figura 9. 15 D E S C R I P T O R 3 2 TI 1 RP L 0

13 bits = 8192 descriptores Selecciona 1 de dos tablas Tabla de descriptores Globales = 0 Tabla de descriptores Locales = 1 Nivel de privilegio de acceso PL0 (00) = Para el software del sistema. (Mayor jerarqua) PL1 (01) = Para utileras del sistema. PL2 (10) = Para utileras del SO. PL3 (11) = Para software de aplicacin. (Menor jerarqua) Figura 9. Informacin contenida en el registro de segmento (registro selector de segmento) Existen dos tablas utilizadas en los registros de segmento: una contiene descriptores globales y la otra, descriptores locales. Los descriptores globales contienen definiciones de segmentos que se aplican a todos los programas, mientras que los descriptores locales son generalmente exclusivos de una aplicacin. La figura 10 muestra el formato de un descriptor para los microprocesadores 80286 al Pentium IV. Observe que cada descriptor tiene una longitud de 8 bytes, (por lo que las tablas de los descriptores local u global pueden tener hasta 64 KB de longitud). Los descriptores para el 80286 y para el 80386 al Pentium IV, varan ligeramente, pero el descriptor del 80286 es compatible con los posteriores. Descriptor del 80286 7 5 3 1 Derechos de acceso Base (B23 B16) 6 4 2 0 7 5 3 1 Descriptor de 386, 486, Pentium, Pro, II, III, IV Base (B31 B24) Derechos de acceso G D O AV (L19 L16 Base (B23 B16) 6 4 2 0

Base (B15- B0) Lmite (L15- L0)

Base (B15- B0) Lmite (L15- L0)

Figura 10. Formatos de los descriptores de diferentes microprocesadores. La parte del descriptor que indica la localidad de inicio del segmento es la direccin base. Para el microprocesador 80286 la direccin base es de 24 bits, as que los segmentos inician en cualquier localidad dentro de sus 16 MB de memoria. Los microprocesadores 30386 y posteriores utilizan una direccin base de 32 bits. El lmite de segmento contiene la ltima direccin de desplazamiento en un segmento. En el descriptor 30286 y posteriores manejan los bits G, D, O, AV los cuales se describen a continuacin: BIT de Granularidad (G): Si G = 0 , el lmite especfica un lmite de segmento entre 00000h y 0FFFFFH. Si G = 1, el valor de lmite se multiplica por 4KB, entonces el lmite de segmento va desde 00000XXXH hasta 0FFFFFXXXH. BIT AV: Es usado por algunos SO para indicar que el segmento est disponible (AV = 1) o que no lo est (AV = 0). Enero Junio 2011 Pg. 13 Ing. Claudia E. Carrillo R

Lenguaje Ensamblador. Ingeniera en Sistemas Computacionales. I T LALAGUNA.


BIT D: Indica la forma en que las instrucciones de los microprocesadores acceden a los registros y a los datos de memoria tanto en el modo real como en el modo protegido. Si D = 0, las instrucciones son de 16 bits, compatibles con los microprocesadores 8086 y 80286. Si D = 1 las instrucciones son de 32 bits. El byte de derechos de acceso controla el acceso al segmento de memoria. Este byte define el funcionamiento del segmento del sistema. El byte de derecho de acceso permite un control completo sobre el segmento. Si el segmento es de datos, especifica el sentido de crecimiento; si el segmento crece ms all de su lmite, el programa del microprocesador es interrumpido, indicando un error de proteccin general. El segmento de cdigo es controlado de forma similar y su lectura puede ser inhibida para proteger el software. La figura 11 muestra la forma en que un registro de segmento que contiene un selector elige un descriptor de la tabla de descriptores globales. La entrada en la tabla de descriptores globales selecciona un segmento del sistema de memoria. En esta figura DS = 0008h, el cual accede al descriptor 1 de la tabla de descriptores globales con un nivel 00 de privilegio de acceso. El descriptor 1 define la direccin base como 00100000h con un lmite de segmento de 000FFH. Segmento de memoria 0FFFFFH Tabla de descriptores globales

100100H 1000FFH

Segmento de datos 00 00 92 Descriptor 1 10 00 00 DS 0008 00


FF

100000H 0FFFFFH

000000H Figura 11. Uso del registro DS para seleccionar un descriptor.

Enero Junio 2011

Pg. 14 -

Ing. Claudia E. Carrillo R

You might also like