Sie sind auf Seite 1von 40

Instituto Tecnolgico de Quertaro

Unidad Pinal de Amoles

Departamento de Educacin Presencial a Distancia

Materia: Lenguajes de Interfaz

Ingeniera en Sistemas Computacionales.

Actividad 1: Temas Unidad 1

Alumno: Jos Luis Prez Ortega

Asesor: Ing. Alfredo Andrs Nez Ugalde augalde_depad_qro@hotmail.com

Tutor: Ing. Eduardo Cruz Hernndez e_cruz_depad_pin@hotmail.com

Martes 02-Abril- 2014

Contenido
Unidad 1. Introduccin al lenguaje Ensamblador ......................................................................... 3 1.1 Importancia de la programacin en Lenguaje Ensamblador .............................................. 5 REGISTROS DEL PROCESADOR .................................................................................................. 9 La memoria RAM ..................................................................................................................... 16 El concepto de interrupcin .................................................................................................... 20 1.5 Llamadas A Servicios Del Sistema. .................................................................................... 24 Modos de direccionamiento ................................................................................................... 25 1.7 Proceso de ensamblado y ligado ....................................................................................... 34 1.8 Desplegado de mensajes en el monitor ............................................................................ 34 Referencias .............................................................................................................................. 40

Unidad 1. Introduccin al lenguaje Ensamblador


1.1. Lenguaje de Bajo Nivel. Se denomina lenguaje mquina a la serie de datos que la parte fsica de la computadora o hardware, es capaz de interpretar. Una computadora digital o, mejor dicho, su parte fsica, slo distingue datos de tipo binario, es decir, constituidos por dos nicos valores a los que se denomina valor 0 y valor 1 y que, fsicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una informacin se utilizan una serie de unos y ceros cuyo conjunto indica dicha informacin. La informacin que hace que el hardware de la computadora realice una determinada actividad de llama instruccin. Por consiguiente una instruccin es un conjunto de unos y ceros. Las instrucciones as formadas equivalen a acciones elementales de la mquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la mquina se denomina lenguaje mquina. El lenguaje mquina fue el primero que empleo el hombre para la programacin de las primeras computadoras. Una instruccin en lenguaje mquina puede representarse de la siguiente forma: 011011001010010011110110 Esta secuencia es fcilmente ejecutada por la computadora, pero es de difcil interpretacin, siendo an ms difcil la interpretacin de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la correccin de los mismos costosa, cuando no imposible, al igual que la verificacin y modificacin de los programas. La anterior secuencia de dgitos binarios (bits) puede indicar a la computadora que: <<Traslade el contenido de la posicin de memoria X a la posicin de memoria Y.>> Si lo vemos escrito de esta forma, lo entenderemos fcilmente, ya que est en nuestro lenguaje natural, pero la mquina elemental ser incapaz de entender nada. Vemos, pues, que la forma de indicar a la mquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traduccin de una forma a otra. Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje mquina. En este caso el traductor era el programador; pero vimos tambin los problemas que esto causaba. Con la prctica en el manejo de la mquina se cay en la cuenta de que se podra utilizar la propia mquina para ayudar en la traduccin de estos programas. Es decir, que si a una

mquina elemental se le dotaba de un programa, tambin elemental, que tradujera un nmero determinado de caracteres de caracteres alfabticos en una secuencia de unos y ceros, se podra escribir un programa constituido por una secuencia de grupos de caracteres alfabticos, en la que cada uno de los grupos indicara una accin a realizar por el ordenador y, una vez escrito el programa, sera la propia mquina la que pasara los grupos de caracteres a bits. Las ventajas de esto son evidentes, ya que para el hombre resulta mas fcil manipular grupos de caracteres y la traduccin se hara de manera automtica. Por ejemplo, se podra escribir: TRASLADAR 11010110, 00011101 Esto indicara que el contenido de la posicin 11010110 haba que pasarlo a la posicin 00011101 si se sabe que al grupo alfabtico TRASLADAR le corresponde la secuencia de bits 11110101. La mquina traducira la anterior instruccin como: 11110101 11010110 00011101 Al grupo alfabtico se le denomina mnemotcnico, y existir un mnemotcnico por cada instruccin. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada mquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en ingls). Poco a poco, con el avance de la programacin (Software), estas primeras y sencillas ayudas se fueron haciendo ms complejas, permitiendo que, adems de los mnemotecnias correspondientes a la operacin a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. La anterior instruccin se podra escribir de la siguiente forma: TRASLADAR POS-A POS-B Que nos resulta de ms fcil comprensin. Tambin se introdujo la posibilidad de indicar a la computadora la direccin de un salto en la secuencia de ejecucin de un programa mediante la utilizacin de etiquetas. A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje mquina tambin se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez ms para que la labor del programador fuera ms fcil, incluyendo los denominados directivos del ensamblador, que son rdenes o informaciones que el programador da al traductor, no instrucciones de lenguaje mquina. Aun con todas estas sotisficaciones y ayudas, el programador de lenguaje ensamblador debe conocer perfectamente el sistema fsico (Hardware) de la mquina con que trabaja, pues aunque emplee mnemotcnicos, etiquetas, etc., stas sirven para indicar una posicin de memoria determinada, un registro o cualquier otra parte de la mquina. Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el <<hard>> concreto de una determinada mquina. Aqu radica la diferencia importante con

los lenguajes ms complejos, llamados de alto nivel, como el Basic, Pascal, Cobol, etc., ya que en stos el programador no tiene porque reconocer el <<hard>> de la mquina. Trabaja con variables, constantes e instrucciones simblicas, y es el traductor quien las transforma en las direcciones apropiadas.

1.1 Importancia de la programacin en Lenguaje Ensamblador


Definicin: El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informticos, y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura de microprocesador. La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en l se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sera que los programas en ensamblador ocupan menos espacio en memoria. Ventajas 1. .- Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el ms cercano a la mquina la computadora lo procesa mas rpido. 2. Eficiencia de tamao .- Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan libreras y dems como son los lenguajes de alto nivel 3. Flexibilidad .- Es flexible porque todo lo que puede hacerse con una mquina, puede hacerse en el lenguaje ensamblador de esta mquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al mximo los recursos de la mquina. O sea que en lenguaje ensamblador se pueden hacer tareas especficas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite Desventajas Tiempo de programacin .- Como es un lenguaje de bajo nivel requiere ms instrucciones para realizar el mismo proceso, en comparacin con un lenguaje de alto nivel. Por otro lado, requiere de ms cuidado por parte del programador, pues es propenso a que los errores de lgica se reflejen ms fuertemente en la ejecucin. Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos ms instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores. Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la maquina, programar en este lenguaje lo ms comn que pueda pasar es que la mquina se bloquee o se reinicialice. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones invlidas, que normalmente no aparecen al usar un lenguaje de alto nivel. Falta de portabilidad.- Porque para cada mquina existe un lenguaje ensamblador; por ello, evidentemente no es una seleccin apropiada de lenguaje cuando deseamos codificar en una mquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

Relacin entre el cdigo binario y el lenguaje ensamblador En el cdigo binario se utilizan ceros y unos, mientras que el lenguaje ensamblador es una coleccin de smbolos mnemnicos que representan: operaciones, nombres simblicos, operadores y smbolos especiales. La relacin entre estos dos lenguajes sera que el binario es el lenguaje que la mquina entiende y el ensamblador se acerca mas lenguaje de esta. Manejo de la memoria: Direccionamiento (interno y externo) El manejo de la memoria depende de que procesador tenga la mquina, entre los cuales a continuacin se mencionan los siguientes: Memoria de Programa Memoria Externa de Datos Memoria Interna de Datos Registros de Funciones Especiales Memoria de Bit.

El espacio de la Memoria de Programa contiene todas las instrucciones, datos, tablas y cadenas de caracteres (strings) usadas en los programas. Esta memoria se direcciona principalmente usando el registro de 16 bits llamado Data Pointer. El tamao mximo de la Memoria de Programa es de 64 Kbytes. La Memoria Externa de Datos contiene todas las variables y estructuras de datos que no caben en la memoria interna del Microprocesador. Esta memoria se direcciona principalmente por el registro de 16 bits Data Pointer , aunque tambin se puede direccionar un banco de Memoria Externa de Datos de 256 bytes usando los dos primeros registros de propsito general . El espacio de Memoria Interna de Datos funcionalmente es la memoria de datos ms importante, ya que ah es donde residen cuatro bancos de registros de propsito general; la pila o stack del programa; 128 bits de los 256 bits de un rea de memoria direccionable por bit y todas las variables y estructuras de datos operadas directamente por el programa. El tamao mximo de la Memoria Interna de Datos es de 256 bytes. Contiene un espacio para los denominados Registros de Funciones Especiales destinado para los puertos de entrada/salida, temporizadores y puerto serie del circuito integrado. Estos registros incluyen al Stack Pointer; al registro de la palabra de estado del programa y al Acumulador. La cantidad mxima de Registros de Funciones Especiales es 128. Todos los Registros de Funciones Especiales tienen direcciones mayores a 127 y se ubican en los 128 bytes superiores de la Memoria Interna de Datos. Estas dos reas de la Memoria Interna de Datos se diferencian por el modo de direccionamiento usado para accesarlas. Los Registros de Funciones Especiales solo se pueden accesar usando el modo de direccionamiento Directo, mientras que los 128 bytes superiores solo se pueden accesar con el modo de direccionamiento Indirecto.

Por otra parte, el espacio de Memoria de Bit se usa para almacenar variables y banderas de un bit. El tamao mximo de la Memoria de Bit es de 256 bits, 128 de los bits comparten su espacio con 16 bytes del espacio de la Memoria Interna de Datos y los otros 128 bits lo hacen con los Registros de Funciones Especiales. Lenguaje El lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en lenguaje de mquina de la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra. Cada arquitectura de microprocesador tiene su propio lenguaje de mquina, y en consecuencia su propio lenguaje ensamblador ya que este se encuentra muy ligado al la estructura del hardware para el cual se programa. Los microprocesadores difieren en el tipo y nmero de operaciones que soportan; tambin pueden tener diferente cantidad de registros, y distinta representacin de los tipos de datos en memoria. Aunque la mayora de los microprocesadores son capaces de cumplir esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes ensamblador reflejan tal diferencia. Diseo de Lenguaje Elementos bsicos Hay un grado grande de diversidad en la manera en que los autores de los ensambladores categorizan las sentencias y en la nomenclatura que usan. En particular, algunos describen cualquier cosa como pseudo-operacin (pseudo-Op), con excepcin del mnemnico de mquina o del mnemnico extendido. Un tpico lenguaje ensamblador consiste en 3 tipos de sentencias de instruccin que son usadas para definir las operaciones del programa: Mnemnicos de opcode Secciones de datos Directivas de ensamblador Perspectiva histrica Los lenguajes ensambladores fueron primero desarrollados en los aos 1950, cuando fueron referidos como lenguajes de programacin de segunda generacin. Por ejemplo, el SOAP (Symbolic Optimal Assembly Program) era un lenguaje ensamblador de 1957 para el computador IBM 650. Los lenguajes ensambladores eliminaron mucha de la propensin a errores y del consumo de tiempo de la programacin de los lenguajes de primera generacin que se necesitaba con los primeros computadores, liberando a los programadores del tedio tal como recordar cdigos numricos y clculo de direcciones. Una vez fueron ampliamente usados para todo tipo de programacin. Sin embargo, por los aos 1980 (1990 en los microcomputadores), su uso haba sido en gran parte suplantado por los lenguajes de alto nivel, en la bsqueda de una mejorada productividad en programacin. Hoy en da, aunque el lenguaje ensamblador es casi siempre manejado y generado por los compiladores, todava se usa para la manipulacin directa del hardware, acceso a instrucciones

especializadas del procesador, o para resolver problemas de desempeo crtico. Los usos tpicos son drivers de dispositivo, sistemas embebidos de bajo nivel, y sistemas de tiempo real. Histricamente, un gran nmero de programas han sido escritos enteramente en lenguaje ensamblador. Los sistemas operativos fueron casi exclusivamente escritos en lenguaje ensamblador hasta la aceptacin mplia del lenguaje de programacin C en los aos 1970 y principios de los 1980. Tambin, muchas aplicaciones comerciales fueron escritas en lenguaje ensamblador, incluyendo una gran cantidad del software escrito por grandes corporaciones para mainframes de IBM. Los lenguajes COBOL y FORTRAN eventualmente desplazaron mucho de este trabajo, aunque un nmero de organizaciones grandes conservaran las infraestructuras de aplicaciones en lenguaje ensamblador hasta bien entrados los aos 1990. La mayora de los primeros microcomputadores confiaron en el lenguaje ensamblador codificado a mano, incluyendo la mayora de los sistemas operativos y de las aplicaciones grandes. Esto era porque estos sistemas tenan limitaciones severas de recursos, impusieron idiosincrticas arquitecturas de memoria y de pantalla, y proporcionaron servicios de sistema limitados y con errores. Quizs ms importante era la falta de compiladores de primera clase de lenguajes de alto nivel adecuados para el uso en el microcomputador. Un factor psicolgico tambin pudo haber jugado un papel: la primera generacin de programadores de los microcomputadores conserv una actitud de aficionado de "alambres y alicates". En un contexto ms comercial, las ms grandes razones para usar el lenguaje ensamblador era hacer programas con mnimo tamao, mnima sobrecarga, mayor velocidad y confiabilidad. Los tpicos ejemplos de programas grandes en lenguaje ensamblador de ese tiempo son los sistemas operativos IBM PC DOS y aplicaciones tempranas tales como la hoja de clculo Lotus 1-2-3, y casi todos los juegos populares para la familia Atari 800 de computadores personales. Incluso en los aos 1990, la mayora de los videojuegos de cnsola fueron escritos en ensamblador, incluyendo la mayora de los juegos para la Mega Drive/Genesis y el Super Nintendo Entertainment System.Segn algunos insiders de la industria, el lenguaje ensamblador era el mejor lenguaje de programacin a usar para obtener el mejor desempeo del Sega Saturn, una cnsola para la cual era notoriamente desafiante desarrollar y programar juegos. El popular juego de arcade NBA Jam (1993) es otro ejemplo. El ensamblador ha sido por largo trecho, el lenguaje de desarrollo primario en los computadores hogareos Commodore 64, Atari ST, as como el ZX Spectrum. Esto fue as en gran parte porque los dialectos del BASIC en estos sistemas ofrecieron insuficiente velocidad de ejecucin, as como insuficientes caractersticas para aprovechar completamente el hardware disponible. Algunos sistemas, ms notablemente el Amiga, incluso tienen IDEs con caractersticas de depuracin y macros altamente avanzados, tales como el freeware ASM-One assembler, comparable a las del Microsoft Visual Studio (el ASM-Uno precede al Microsoft Visual Studio). El ensamblador para el VIC-20 fue escrito por Don French y publicado por French Silk. Con 1639 bytes de longitud, su autor cree que es el ms pequeo ensamblador simblico jams escrito. El ensamblador soportaba el direccionamiento simblico usual y la definicin de cadenas de caracteres o cadenas hexadecimales. Tambin permita expresiones de

direcciones que podan combinarse con las operaciones de adicin, substraccin, multiplicacin, divisin, AND lgico, OR lgico, y exponenciacin.

REGISTROS DEL PROCESADOR


Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son direccionables por medio de un nombre. Los bits por convencin, se numeran de derecha a izquierda, como en: ... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Los registros internos del procesador se pueden clasificar en 6 tipos diferentes Registros de segmento Registros de propsito general Registros de apuntadores Registros de banderas Registros de Puntero de instruccin Registros de Pila Registros de segmento Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para direccionamiento conocida como el segmento actual. Registro CS. El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, mas un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Registro DS. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, esta direccin, mas un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un byte especifico 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 le registro SS. Esta direccin de segmento, mas un valor de desplazamiento en el registro del apuntador de pila (SP), indica la palabra actual en la pila que esta siendo direccionada. Registros ES. Alguna operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada.

Registros FS y GS. Son registros extra de segmento en los procesadores 80386 y posteriores.

Registros de propsito general. Los registros de propsito general AX, BX, CX y DX son los caballos de batalla del sistema. Son nicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte "alta", y el ultimo byte de la derecha es la parte "baja". Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre. Registro AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Por ejemplo, las instrucciones para multiplicar , dividir y traducir suponen el uso del AX. Tambin, algunas operaciones generan cdigo mas eficiente si se refieren al AX en lugar de a los otros registros. Registro BX. El BX es conocido como el registro base ya que es el nico registro de propsito general que puede ser ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos. Registro DX. El DX es conocido como l registro de datos. Alguna operaciones de entrada/salida requieren uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos. Registro de Apuntador de Instrucciones. El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP esta asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se esta ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP. En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la siguiente instruccin que ser ejecutada, el procesador combina las direcciones en el CS y el IP: Segmento de direccin en el registro CS: 25A40H Desplazamiento de direccin en el registro IP: + 412H Direccin de la siguiente instruccin: 25E52H Registros Apuntadores. Los registros SP (apuntador de la pila) Y BP (apuntador de base) estn asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila. Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automtica estos registros.

En el ejemplo siguiente, el registro SS contiene la direccin de segmento 27B3[0]H y el SP el desplazamiento 312H. Para encontrar la palabra actual que esta siendo procesada en la pila, la computadora combina las direcciones en el SS y el SP:

Registro BP. El BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP. Registros Indice. Los registros SI y DI estn disponibles para direccionamiento indexado y para sumas y restas. Registro SI. El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI. Registro DI. El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI. Registro de Banderas. De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmtica cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la accin subsecuente. En resumen, los bits de las banderas comunes son como sigue: OF (Overflow, desbordamiento). Indica desbordamiento de un bit de orden alto (mas a la izquierda) despus de una operacin aritmtica. DF (direccin). Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. IF (interrupcin). Indica que una interrupcin externa, como la entrada desde el teclado, sea procesada o ignorada. TF (trampa). Permite la operacin del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecucin de una sola instruccin a un tiempo, para examinar el efecto de esa instruccin sobre los registros de memoria. SF (signo). Contiene el signo resultante de una operacin aritmtica (0 = positivo y 1 = negativo). ZF (cero). Indica el resultado de una operacin aritmtica o de comparacin (0 = resultado diferente de cero y 1 = resultado igual a cero).

AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmtica especializada.

PF (paridad). Indica paridad par o impar de una operacin en datos de 8 bits de bajo orden (mas a la derecha). CF (acarreo). Contiene el acarreo de orden mas alto (mas a la izquierda) despus de una operacin aritmtica; tambin lleva el contenido del ultimo bit en una operacin de corrimiento o de rotacin. Las banderas estn en el registro de banderas en las siguientes posiciones: Las banderas mas importantes para la programacin en ensamblador son O, S, Z y C, para operaciones de comparacin y aritmticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores tienen algunas banderas usadas para propsitos internos, en especial las que afectan al modo protegido. Los procesadores 80286 y posteriores tienen un registro extendido de banderas conocido como Eflags. Registros de PILA La pila es un rea de memoria importante y por ello tiene, en vez de uno, dos registros que se usan como desplazamiento (offset) para apuntar a su contenido. Se usan como complemento al registro y son: -SP- Stack Pointer: Se traduce como puntero de pila y es el que se reserva el procesador para uso propio en instrucciones de manipulado de pila. Por lo general, el programador no debe alterar su contenido. -BP- Base pointer: Se usa como registro auxiliar. El programador puede usarlo para su provecho. Claro que estos nombres y tipos de registros son estndar, ya que cada fabricante puede utilizar otros registro que reemplacen a estos o los auxilien, aun as, los fabricantes que usan otros registro tienen la misma funcin que los anteriormente mencionados Ejemplo Registros de uso general del 8086/8088: Tienen 16 bits cada uno y son ocho: AX = Registro acumulador, dividido en AH y AL (8 bits cada uno). Usndolo se produce (en general) una instruccin que ocupa un byte menos que si se utilizaran otros registros de uso general. Su parte ms baja, AL, tambin tiene esta propiedad. El ltimo registro mencionado es el equivalente al acumulador de los procesadores anteriores (8080 y 8085). Adems hay instrucciones como DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF; CBW; IN y OUT que trabajan con AX o con uno de sus dos bytes (AH o AL). Tambin se utiliza este registro (junto con DX a veces) en multiplicaciones y divisiones.

BX = Registro base, dividido en BH y BL. Es el registro base de propsito similar (se usa para direccionamiento indirecto) y es una versin ms potente del par de registros HL de los procesadores anteriores. CX = Registro contador, dividido en CH y CL. Se utiliza como contador en bucles (instruccin LOOP), en operaciones con cadenas (usando el prefijo REP) y en desplazamientos y rotaciones (usando el registro CL en los dos ltimos casos). DX = Registro de datos, dividido en DH y DL. Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instruccin CWD y en IN y OUT para direccionamiento indirecto de puertos (el registro DX indica el nmero de puerto de entrada/salida). SP = Puntero de pila (no se puede subdividir). Aunque es un registro de uso general, debe utilizarse slo como puntero de pila, la cual sirve para almacenar las direcciones de retorno de subrutinas y los datos temporarios (mediante las instrucciones PUSH y POP). Al introducir (push) un valor en la pila a este registro se le resta dos, mientras que al extraer (pop) un valor de la pila este a registro se le suma dos. BP = Puntero base (no se puede subdividir). Generalmente se utiliza para realizar direccionamiento indirecto dentro de la pila. SI = Puntero ndice (no se puede subdividir). Sirve como puntero fuente para las operaciones con cadenas. Tambin sirve para realizar direccionamiento indirecto. DI = Puntero destino (no se puede subdividir). Sirve como puntero destino para las operaciones con cadenas. Tambin sirve para realizar direccionamiento indirecto. Cualquiera de estos registros puede utilizarse como fuente o destino en operaciones aritmticas y lgicas Indicadores (flags) Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits ms significativos estn indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno (esto tambin ocurra en los procesadores anteriores). CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) hacia, o "prstamo" (en caso de resta) desde el bit de orden ms significativo del resultado. Este indicador es usado por instrucciones que suman o restan nmeros que ocupan varios bytes. Las instrucciones de rotacin pueden aislar un bit de la memoria o de un registro ponindolo en el CF. PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un nmero par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones. AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "prstamo" del nibble (cuatro bits) menos significativo al nibble ms significativo. Este indicador se usa con las instrucciones de ajuste decimal. ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operacin es cero.

SF (Sign Flag, bit 7): Refleja el bit ms significativo del resultado. Como los nmeros negativos se representan en la notacin de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo.

TF (Trap Flag, bit 8): Si vale 1, el procesador est en modo paso a paso. En este modo, la CPU automticamente genera una interrupcin interna despus de cada instruccin, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instruccin por instruccin. IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupcin externas enmascarables (por el pin INTR). Si vale 0, no se reconocen tales interrupciones. Las interrupciones no enmascarables y las internas siempre se reconocen independientemente del valor de IF. DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirn "autodecremento", esto es, se procesarn las cadenas desde las direcciones ms altas de memoria hacia las ms bajas. Si vale 0, habr "auto-incremento", lo que quiere decir que las cadenas se procesarn de "izquierda a derecha". OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operacin aritmtica con signo, esto es, un dgito significativo se perdi debido a que tamao del resultado es mayor que el tamao del destino. El procesador Z80 Registros de propsito general El Z80 posee 14 registros de propsito general de 8 bits denominados A, B, C, D, H, L y A', B', C', D', H' , L'. Solamente un set de siete registros y el correspondiente registro de Flags F pueden estar activos al mismo tiempo. Una instruccin especial selecciona A y F o A' y F' mientras que otra instruccin selecciona B, C, D, E, H, L o C', D', E' ,H' L'. El programador puede cambiar rpidamente de un conjunto de registros de propsito general a otro. Esto proporciona una mayor capacidad de almacenamiento en registros. El acceso a datos presentes en registros de la CPU es mucho ms rpido que el acceso a datos en memoria. Los registros pueden agruparse de a pares formando registros de 16 bits. Estos son los pares BC, DE y HL (sus equivalentes primas tambin pueden agruparse). Flags Aunque los Flags existen fsicamente dentro de la CPU estn agrupados lgicamente formando un registro. Los Flags del Z80 son los siguientes: Flag de Cero(Z): Toma el valor 1 si el resultado de una operacin es cero. Es el bit seis. Flag de signo(S): Toma el valor 1 si el resultado de una operacin es negativo. Es el bit siete.

Flag de Carry(C): Este flag es afectado por las instrucciones de desplazamiento y es puesto en 1 0 segn el valor del bit desplazado. Tambin es afectado por las operaciones aritmticas. Este flag es el bit cero. Flag de Paridad y overflow(P/V): En el caso de paridad, se pone en 1 si el resultado de una operacin posee un nmero par de unos. Cuando el flag P/V se usa para representar overflow, el flag se pone en 1 si ocurre un overflow despus de una operacin aritmtica. Este flag es el bit 2. Flag H y N: Son dos Flip Flop que no pueden ser examinados por las instrucciones de salto condicional. El Z80 los usa para las operaciones BCD. H representa el rebalse que genera considerando los cuatro bits menos significativos del resultado y N es el flag de resta, el cual se activa para indicar si la ltima instruccin ejecutada fue suma o resta. En el caso general, una instruccin de resta coloca en 1 el flag N y una instruccin de suma lo coloca en 0. Los Flags H y N son los bits 4 y 1 respectivamente. Registros de propsito especial Program Counter: Es un registro de 16 bits que indica la direccin de la prxima instruccin ejecutar. Las instrucciones del Z80 pueden contar de uno, dos, tres o cuatro bytes. Stack-Pointer: Es un registro de 16 bits que indica la direccin de una memoria RAM externa denominada Stack. El objetivo de esta rea de memoria es proporcionar un medio de almacenamiento temporal de los registros del usuario, registro de Flags y del program Counter. La provisin de Stack es fundamental para operaciones tales como los llamados a sub-rutinas e interrupciones. Registros ndices IX e IY: Estos registros son de 16 bits, diseados para permitir un direccionamiento indexado en los programas del Z80. Cuando se ejecuta una instruccin en un modo de direccionamiento indexado, se usa uno de los dos registros ndices para calcular la direccin del operando. Registro de interrupciones I: Es un registro de 8 bits que puede ser cargado para especificar el byte ms significativo de una direccin de memoria. El byte menos significativo es proporcionado por el dispositivo que solicita la interrupcin. Registro de refresh de memoria R: Es un registro especial diseado para proporcionar un refresh automtico de las memorias RAM dinmicas. Registro de instrucciones: El registro de instrucciones tiene por misin almacenar el cdigo de operacin de la instruccin leda desde memoria. Este cdigo es descodificado y con esta informacin se dirigen todos los micro-pasos.

La memoria RAM
Se denomina memoria a los circuitos que permiten almacenar y recuperar la informacin. En un sentido ms amplio, puede referirse tambin a sistemas externos de almacenamiento, como las unidades de disco o de cinta. Memoria de acceso aleatorio o RAM (Random Access Memory) es la memoria basada en semiconductores que puede ser leda y escrita por el microprocesador u otros dispositivos de hardware. El acceso a las posiciones de almacenamiento se puede realizar en cualquier orden. Los chips de memoria son pequeos rectngulos negros que suelen ir soldados en grupos a unas plaquitas con "pines" o contactos. La diferencia entre la RAM y otros tipos de memoria de almacenamiento, como los disquetes o los discos duros, es que la RAM es muchsimo ms rpida, y que se borra al apagar el ordenador, no como stos. El interior de cada chip se puede imaginar como una matriz o tabla en la cual cada celda es capaz de almacenar un bit. Por tanto, un bit se puede localizar directamente proporcionando una fila y una columna de la tabla. En realidad, la CPU identifica cada celda mediante un nmero, denominado direccin de memoria. A partir de una direccin se calcula cul es la fila y columna correspondiente, con lo que ya se puede acceder a la celda deseada. El acceso se realiza en dos pasos: primero se comunica la fila y despus la columna empleando los mismos terminales de conexin. Obviamente, esta tcnica denominada multiplexado permite emplear menos terminales de conexin para acceder a la RAM, lo que optimiza la relacin entre el tamao del chip y la capacidad de almacenamiento. Realmente, la CPU no suele trabajar con bits independientes, sino ms bien con agrupaciones de los mismos, en forma de palabras binarias. Esto hace que la RAM no se presente en un solo chip, sino ms bien en agrupaciones de los mismos. Por ejemplo, un grupo de 8 chips, cada uno capaz de almacenas x bits, proporcionar en conjunto x Kb. La memoria no deja de ser un circuito electrnico real, y por tanto est expuesta a efectos que pueden producir errores en su contenido. En otras palabras, tras escribir una palabra en una posicin de memoria es perfectamente posible que algn bit cambie de estado durante el tiempo que permanezca almacenada. Si se accede de nuevo a la memoria para leer dicha palabra se recuperar informacin errnea y esto puede acarrear todo tipo de consecuencias. Para ello se suelen emplear dos soluciones: la paridad y la tcnica ECC (Error Correction Code). El elemento que implementa estos mtodos se encuentra en el interior del PC y recibe el nombre de controlador de memoria. La paridad consiste en aadir un bit adicional a cada palabra, que hace que el nmero de unos sea par o impar (segn se emplee la paridad par o impar). Si al leer informacin de la memoria el bit de paridad no est de acuerdo con el nmero de unos se habr detectado un error. El sistema ECC aade un conjunto de bits a cada palabra a almacenar. La ventaja es que permite detectar errores en varios bits y adems es capaz de corregir dichos errores. Estas tcnicas implican aadir bits adicionales y por tanto tendrn impacto en la cantidad de memoria incorporada en cada mdulo. Caractersticas de la memoria principal (RAM)

Un sistema de memoria se puede clasificar en funcin de muy diversas caractersticas. Entre ellas podemos destacar las siguientes: localizacin de la memoria, capacidad, mtodo de acceso y velocidad de acceso. En el caso de la memoria RAM (tambin denominada memoria principal o primaria) se puede realizar la siguiente clasificacin: Localizacin: Interna (se encuentra en la placa base) Capacidad: Hoy en da no es raro encontrar ordenadores PC equipados con 64, 128 256 Mb de memoria RAM. Mtodo de acceso: La RAM es una memoria de acceso aleatorio. Esto significa que una palabra o byte se puede encontrar de forma directa, sin tener en cuenta los bytes almacenados antes o despus de dicha palabra (al contrario que las memorias en cinta, que requieren de un acceso secuencial). Adems, la RAM permite el acceso para lectura y escritura de informacin. Velocidad de acceso: Actualmente se pueden encontrar sistemas de memoria RAM capaces de realizar transferencias a frecuencias del orden de los Gbps (gigabits por segundo). Tambin es importante anotar que la RAM es una memoria voltil, es decir, requiere de alimentacin elctrica para mantener la informacin. En otras palabras, la RAM pierde toda la informacin al desconectar el ordenador. Hemos de tener muy en cuenta que esta memoria es la que mantiene los programas funcionando y abiertos, por lo que al ser Windows 95/98/Me/2000 un sistema operativo multitarea, estaremos a merced de la cantidad de memoria RAM que tengamos dispuesta en el ordenador. En la actualidad hemos de disponer de la mayor cantidad posible de sta, ya que estamos supeditados al funcionamiento ms rpido o ms lento de nuestras aplicaciones diarias. La memoria RAM hace unos aos era muy cara, pero hoy en da su precio ha bajado considerablemente. Cuando alguien se pregunta cunta memoria RAM necesitar debe sopesar con qu programas va a trabajar normalmente. Si nicamente vamos a trabajar con aplicaciones de texto, hojas de clculo y similares nos bastar con unos 32 Mb de sta (aunque esta cifra se ha quedado bastante corta), pero si trabajamos con multimedia, fotografa, vdeo o CAD, por poner un ejemplo, hemos de contar con la mxima cantidad de memoria RAM en nuestro equipo (128256 Mb o ms) para que su funcionamiento sea ptimo, ya que estos programas son autnticos devoradores de memoria. Hoy en da no es recomendable tener menos de 64 Mb, para el buen funcionamiento tanto de Windows como de las aplicaciones normales, ya que notaremos considerablemente su rapidez y rendimiento, pues generalmente los equipos actuales ya traen 128 Mb o 256 Mb de RAM. Segn los tipos de conectores que lleve la memoria, al conjunto de stos se les denominan mdulos, y stos a su vez se dividen en: SIMM (Single In-line Memory Module): Pequea placa de circuito impreso con varios chips de memoria integrados. Se fabrican con diferentes velocidades de acceso capacidades (4, 8, 16, 32, 64 Mb) y son de 30 72 contactos. Se montan por pares generalmente.

DIMM: Son ms alargados, cuentan con 168 contactos y llevan dos muescas para facilitar su correcta colocacin. Pueden montarse de 1 en 1. Respecto a las caractersticas bsicas de cualquier mdulo de memoria hemos de fijarnos, principalmente, en el tipo de memoria utilizada, el tipo de mdulo (30, 70 168 contactos), la capacidad total ofrecida y el tiempo medio de acceso que ofrece, que es el tiempo que transcurre desde que se solicita el dato almacenado en una determinada direccin de memoria hasta que el chip ofrece el dato solicitado. Evidentemente, cuanto menor sea este nmero mejores prestaciones obtendremos. Las antiguas memorias SIMM ofrecan cifras entre 70 u 80 nanosegundos y las modernas DIMM SDRAM tiempos inferiores a 10 nanosegundos. Esta diferencia de velocidad permite que el procesador no deba sufrir tiempos de espera innecesarios desde que solicita un dato hasta que lo recibe para poder realizar la operacin. Los principales tipos de memoria RAM utilizadas en nuestros ordenadores se dividen en DRAM, SRAM y Tag RAM. As, la memoria DRAM (Dynamic Random Access Memory) es la que montan las placas base como memoria principal del sistema, donde se almacenan las aplicaciones en ejecucin y los datos que es estn gestionando en cada momento. Se refresca cientos de veces por segundo y cuanto mayor cantidad pongamos a disposicin del PC mejores resultados obtendremos. Tipos de memoria DRAM FPM (Fast Page Mode): Memoria muy popular, ya que era la que se inclua en los antiguos 386, 486 y primeros Pentium. Alcanza velocidades de hasta 60 ns. Se encuentra en los SIMM de 30 contactos y los posteriores de 72. EDO (Extended Data Output): La memoria EDO, a diferencia de la FPM que slo poda acceder a un solo byte al tiempo, permite mover un bloque completo de memoria a la memoria cach del sistema, mejorando as las prestaciones globales. De mayor calidad, alcanza velocidades de hasta 45 ns. Se encuentra en los Pentium, Pentium Pro y primeros Pentium II en SIMM de 72 contactos y en los primeros DIMM de 168 contactos, funcionando a 5 y 3,3 voltios. BEDO (Burst Extended Data Output): Diseada originalmente para los chipset HX, permite transferir datos al procesador en cada ciclo de reloj, aunque no de forma continuada, sino a rfagas, reduciendo los tiempos de espera del procesador, aunque sin conseguir eliminarlos del todo. SDRAM (Synchronous DRAM): Memoria asncrona que se sincroniza con la velocidad del procesador, pudiendo obtener informacin en cada ciclo de reloj, evitando as los estados de espera que se producan antes. La SDRAM es capaz de soportar las velocidades del bus a 100 y 133 MHz, alcanzando velocidades por debajo de 10 ns. Se encuentra en la prctica mayora de los mdulos DIMM de 168 contactos. PC-100 DRAM: Es un tipo de memoria SDRAM que cumple unas estrictas normas referentes a calidad de los chips y diseo de los circuitos impresos establecidas por Intel. El objetivo es garantizar un funcionamiento estable en la memoria RAM a velocidades de bus de 100 MHz.

PC-133 DRAM: Muy parecida a la anterior y de grandes exigencias tcnicas para garantizar que el mdulo de memoria que la cumpla funcione correctamente a las nuevas velocidades de bus de 133 MHz que se han incorporado a los ltimos Pentium III. DRDRAM (Direct Rambus DRAM): Es un tipo de memoria de 64 bits que alcanza rfagas de 2 ns, picos de varios Gbytes/sg y funcionan a velocidades de hasta 800 MHz. Es el complemento ideal para las tarjetas grficas AGP, evitando los cuellos de botella entre la tarjeta grfica y la memoria principal durante el acceso directo a memoria para el manejo de las texturas grficas. DDR SDRAM (Double Data Rate SDRAM o SDRAM II): Un tipo de memoria SDRAM mejorada que poda alcanzar velocidades de hasta 200 MHz. Cuenta con mecanismos para duplicar las prestaciones obtenidas a la velocidad del reloj del sistema. Fue soportada por ciertos chipset Socket 7, pero al no ser apoyada por Intel no est demasiado extendida. ESDRAM (Enhanced SDRAM): Incluye una pequea memoria esttica en el interior del chip SDRAM. Con ello, las peticiones de ciertos accesos pueden ser resueltas por esta rpida memoria, aumentando las prestaciones. Se basa en un principio muy similar al de la memoria cach utilizada en los procesadores. SLDRAM (SyncLink DRAM): Se basa, al igual que la DRDRAM, en un protocolo propietario, que separa las lneas CAS, RAS y de datos. Los tiempos de acceso no dependen de la sincronizacin de mltiples lneas, por lo que este tipo de memoria promete velocidades superiores a los 800 MHz, ya que adems puede operar al doble de velocidad del reloj del sistema. Memoria SRAM Es la abreviatura de Static Random Access Memory y es la alternativa a la DRAM. No precisa de tanta electricidad como la anterior para su refresco y movimiento de las direcciones de memoria, por lo que funciona ms rpida, aunque tiene un elevado precio. Hay de tres tipos: Async SRAM: La memoria cach de los antiguos 386, 486 y primeros Pentium, asncrona y con velocidades entre 20 y 12 ns. Sync SRAM: Es la generacin siguiente, capaz de sincronizarse con el procesador y con una velocidad entre 12 y 8,5 ns. Pipelined SRAM: Se sincroniza tambin con el procesador, pero tarda en cargar los datos ms que la anterior, aunque una vez cargados accede a ellos con ms rapidez. Opera a velocidades entre 8 y 4,5 ns. Memoria Tag RAM Este tipo de memoria almacena las direcciones de memoria de cada uno de los datos de la DRAM almacenados en la memoria cach del sistema. As, si el procesador requiere un dato y encuentra su direccin en la Tag RAM, va a buscarlo inmediatamente a la cach, lo que agiliza el proceso.

El concepto de interrupcin
Ya que un procesador no puede procesar simultneamente varios trozos de informacin (procesa un trozo de informacin por vez), un programa que est siendo ejecutado puede, gracias al pedido de interrupcin, ser momentneamente suspendido mientras se produce una interrupcin. El programa interrumpido puede continuar ejecutndose luego. Existen 256 direcciones de interrupcin diferentes. Una interrupcin se convierte en una interrupcin de hardware cuando es solicitada por uno de los componentes de hardware del equipo. En efecto, existen varios perifricos en un equipo. Estos perifricos necesitan generalmente utilizar los recursos del sistema aunque slo sea para comunicarse con el sistema mismo. Cuando un perifrico desea acceder a un recurso, enva un pedido de interrupcin al procesador para llamar su atencin. Los perifricos cuentan con un nmero de interrupcin que se denomina IRQ (Peticiones de Interrupcin. Es como si cada perifrico tirara de un "hilo" que est atado a una campana para sealarle al equipo que desea que le preste atencin. Este "hilo" es, de hecho, una lnea fsica que conecta cada ranura de expansin as como cada interfaz E/S a la placa madre. Para una ranura ISA de 8 bits, por ejemplo, hay 8 lneas IRQ que unen ranuras ISA de 8 bits a la placa madre (IRQ0 a IRQ7). Estos IRQ estn controlados por un "controlador de interrupcin" que se encarga de cederle la palabra al IRQ que posee la mayor prioridad. Al aparecer las ranuras de 16 bits, se agregaron IRQ 8 a 15. En consecuencia , fue necesario agregar un segundo controlador de interrupcin. Los dos grupos de interrupciones estn unidos por IRQ 2 el cual se conecta (o "produce una cascada") a IRQ9. En cierto modo, esta cascada "inserta" IRQ 8 a 15 entre IRQ1 y 3:

Dado que la prioridad va del IRQ inferior al superior y que se insertan IRQ 8 a 15 entre IRQ 1 y 3, el orden de prioridad es el siguiente: 0 > 1 > 8 > 9 > 10 > 11 > 12 > 13 > 14 > 15 > 3 > 4 > 5 > 6 > 7 DMA Los perifricos regularmente necesitan "pedir prestada memoria" del sistema para utilizarla como zona bfer, es decir, un rea de almacenamiento temporario que permita que los datos de E/S sean rpidamente guardados. Por lo tanto, el canal de acceso directo a la memoria, llamado DMA (Acceso Directo a Memoria fue definido precisamente para esto.

El canal DMA designa un acceso a una de las ranuras (RAM) memoria de acceso aleatorio del equipo, ubicado por una "direccin de inicio RAM" y una "direccin de fin". Este mtodo permite a un perifrico pedir prestado canales especiales que le brindan un acceso directo a la memoria, sin necesidad de intervencin, por parte del microprocesador, para descargar estas tareas. Una PC tiene 8 canales DMA. Los primeros cuatro canales DMA poseen un ancho de banda de 8 bits mientras que los DMA 4 a 7 poseen a su vez un ancho de banda de 16 bits. Los canales DMA por lo general suelen asignarse de la siguiente manera: DMA0: libre DMA1: (tarjeta de sonido)/libre DMA2: controlador de disquete DMA3: puerto paralelo (puerto de la impresora) DMA4: controlador de acceso directo a memoria (conectado a DMA0) DMA1: (tarjeta de sonido)/libre DMA6: (SCSI)/libre DMA7: disponible Direcciones base Algunas veces los perifricos necesitan intercambiar informacin con el sistema, razn por la cual se les asignaron direcciones de memoria para enviar y recibir datos. Estas direcciones se denominan "direcciones base" (algunas veces se utilizan los siguientes trminos: "puertos de entrada/salida", "puertos E/S", "direcciones E/S", "direcciones de puertos de E/S", o "puertos base"). El perifrico puede comunicarse con el sistema operativo utilizando esta direccin de base. Por lo tanto, existe solamente una nica direccin de base para cada perifrico. A continuacin, presentamos una lista de algunas de las direcciones base comunes: 060h: Teclado 170h/376h: controlador secundario IDE 1F0h/3F6h: controlador primario IDE 220h: tarjeta de sonido 300h: tarjeta de red 330h: tarjeta adaptador SCSI

3F2h: controlador de unidad de disco 3F8h: COM1 2F8h: COM2 3E8h: COM3 2E8h: COM4 378h: LPT1 278h: LPT2 No obstante, todos estos elementos resultan transparentes para el usuario, es decir que no debe preocuparse por ellos. Conflictos del hardware Una interrupcin es una lnea que une el perifrico al procesador. Una interrupcin es una interrupcin de hardware cuando es solicitada por uno de los componentes de hardware de la PC. Por ejemplo, este es el caso al tocar una tecla y que el teclado llama la atencin del procesador sobre este hecho. No obstante, los 256 interruptores no pueden ser solicitados al mismo tiempo ya que se interrumpe el hardware y los diferentes perifricos siempre realizan interrupciones muy especficas. Por lo tanto, al instalar las tarjetas de expansin, debe asegurarse que, durante la configuracin, el mismo interruptor no se utilice para dos perifricos diferentes. Si esto sucediera, ocurrira un "conflicto del hardware" y ningn perifrico funcionaria. Verdaderamente, si dos perifricos utilizan el mismo interruptor, el sistema no sabr cmo distinguirlos. Un conflicto del hardware no sucede nicamente cuando dos perifricos poseen el mismo hardware. Tambin puede ocurrir un conflicto cuando dos perifricos poseen la misma direccin E/S o usan los mismos canales DMA. Configuracin IRQ La IRQ de una tarjeta de expansin puede modificarse para asignarle un nmero IRQ que no est siendo utilizado por otro perifrico. En los perifricos ms antiguos, este nmero IRQ se adjunta a los puentes que se encuentran en la placa. En las placas recientes (que poseen un BIOS Plug & Play), el parmetro de recurso (direcciones IRQ, DMA E/S) es automtico. Tambin puede ser realizado por el SO con la ayuda de utilidades que brinda la tarjeta de expansin. Este modo plug & play debe ser desactivado en ocasiones para que puedan modificarse los parmetros manualmente. An no resulta fcil hallar recursos disponibles para todos los perifricos. Por lo tanto, he aqu una lista incompleta de recursos que se utilizan generalmente, los que por consiguiente no pueden asignarse en forma manual:

IRQ 0 1

Perifrico Reloj interno teclado controlador Cascada de IRQ 8 a 15 de interrupcin programable

3 4 5 6 7 8 9 10 11 12 13 14 15

Puerto de comunicaciones COM2/COM4 Puerto de comunicaciones COM1/COM3 libre controlador de disquete Puerto de impresora LPT1 CMOS (Reloj de tiempo real) libre libre libre Puerto del ratn PS2/libre procesador de datos numricos (coprocesador matemtico) controlador de disco duro primario (IDE) controlador de disco duro secundario (IDE)

Los puertos COM1 y COM4 as como los puertos COM2 y COM3 usan los mismos interruptores. Puede parecer ilgico en cuanto la misma interrupcin no puede ser utilizada por dos perifricos. En realidad, es posible utilizar el puerto COM1 tanto como el puerto COM4 (as como el puerto COM2 y el COM3) en tanto no se activen al mismo tiempo. De lo contrario, el equipo podra congelarse y funcionar defectuosamente. Resolucin de conflictos del hardware

Si tiene un problema de hardware, primero trate de identificar el problema afn de poder determinar cul es el perifrico que lo est causando. Esto significa que debe tratar de eliminar tantas variables como sea posible hasta descubrir cul es el elemento responsable: abriendo la carcasa del equipo y retirando uno a uno los elementos que puedan estar causando el conflicto desactivando el software en el SO para desactivar los perifricos

1.5 Llamadas A Servicios Del Sistema.


Las llamadas al sistema comnmente usan una instruccin especial de la CPU que causa que el procesador transfiera el control a un cdigo privilegiado. Previamente especificado por el mismo cdigo. Esto permite al cdigo privilegiado especificar donde va a ser conectado as como el estado del procesador. Cuando una llamada al sistema es invocada, la ejecucin del programa que invoca es interrumpida y sus datos son guardados, normalmente en su PCB (Bloque de Control de Proceso del ingls Process Control Block), para poder continuar ejecutndose luego. El procesador entonces comienza a ejecutar las instrucciones de cdigo de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y contina su ejecucin. El retorno al proceso demandante no obligatoriamente es inmediato, depende del tiempo de ejecucin de la llamada al sistema y del algoritmo de planificacin de CPU. Las llamadas son peticiones a ejecucin de rutinas y proporcionan la interfaz entre el sistema operativo y un programa en ejecucin. Estas llamadas son instrucciones de lenguaje ensamblador y se presentan en los manuales que emplean los programadores de este lenguaje. Introduccin al Lenguaje Ensamblador Las llamadas al sistema para ejecucin y el control de programas, usualmente incluyen un conjunto completo de los servicios accesibles por la va del lenguaje de rdenes, tales como: RUN, EXECUTE, ABORT y planificacin relacionada con el tiempo, adems los usuarios con las llamadas del sistema pueden suspender, establecer o cambiar atributos del tiempo de ejecucin de uno o ms programas. Las llamadas del sistema para el gestor de recursos, proporcionan servicios para la asignacin, reserva y reclamacin de los recursos del sistema. Por ejemplo, existen llamadas del sistema para extender o reducir la cantidad de memoria poseda por el programa que se llama. Las llamadas del sistema pueden asignar o reservar otros tipos de objetos del sistema y despus destruir o devolver su custodia al sistema operativo. Las llamadas al sistema se pueden agrupar en cinco categoras: 1. Control de proceso (Crear, cargar, ejecutar un proceso, obtener y establecer atributos, esperar un suceso, liberar memoria, abortar y terminar proceso). 2. Manipulacin de archivos (Crear, abrir, leer, obtener y establecer atributos, cerrar y eliminar archivos). 3. Manipulacin de perifricos (Solicitar, escribir, leer, obtener y establecer atributos, liberar perifrico).

4. Manipulacin de la informacin (Obtener fecha y hora, establecer fecha y hora, obtener y establecer datos del sistema, obtener y establecer atributos). 5. Comunicaciones (Crear conexin, enviar mensajes, recibir mensajes, transferir informacin del estado y eliminar conexin. Llamadas al sistema Una llamada al sistema es cuando un programa llama a un servicio del Kernel del sistema operativo. Generalmente estos servicios se encuentran disponibles como instrucciones de lenguaje ensamblador pero algunas veces tambin pueden llamarse (sin tener conocimiento de ello) desde lenguajes de alto nivel. Kernel o ncleo Este se considera el principal componente de los sistemas operativos sirve de interfaz entre aplicaciones y el proceso de los datos de bajo nivel hecho por el hardware del equipo. Entre sus funciones estn administrar los recursos del sistema como memoria , uso de CPU por las aplicaciones o acceso a interfaces de entrada y salida del equipo. Ejemplos de esto son: Exit: Para terminar la ejecucin de un programa. Fork: Para crear hilos de ejecucin. Time: Para ver la hora actual. Open: Para abrir archivos Close: para cerrar archivos Como puede observarse estas son funciones muy utilizadas en cualquier lenguaje de programacin pero sin darnos cuenta estas son administradas por el ncleo del sistema operativo.

Modos de direccionamiento
Los llamados modos de direccionamiento son las diferentes maneras de especificar en informtica un operando dentro de una instruccin. Cmo se especifican e interpretan las direcciones de memoria segn las instrucciones. Un modo de direccionamiento especifica la forma de calcular la direccin de memoria efectiva de un operando mediante el uso de la informacin contenida en registros y / o constantes, contenida dentro de una instruccin de la mquina o en otra parte. CUNTOS MODOS DE DIRECCIONAMIENTOS EXISTEN? Diferentes arquitecturas de computadores varan mucho en cuanto al nmero de modos de direccionamiento que ofrecen desde el hardware. Eliminar los modos de direccionamiento ms complejos podra presentar una serie de beneficios, aunque podra requerir de instrucciones adicionales, e incluso de otro registro. Se ha comprobado que el diseo de CPUs

segmentadas es mucho ms fcil si los nicos modos de direccionamiento que proporcionan son simples. La mayora de las mquinas RISC disponen de apenas cinco modos de direccionamiento simple, mientras que otras mquinas CISC tales como el DEC VAX tienen ms de una docena de modos de direccionamiento, algunos de ellos demasiado complejos. El mainframe IBM System/360 dispona nicamente de tres modos de direccionamiento; algunos ms fueron aadidos posteriormente para el System/390. Cuando existen solo unos cuantos modos, estos van codificados directamente dentro de la propia instruccin (Un ejemplo lo podemos encontrar en el IBM/390, y en la mayora de los RISC). Sin embargo, cuando hay demasiados modos, a menudo suele reservarse un campo especfico en la propia instruccin, para especificar dicho modo de direccionamiento. El DEC VAX permita mltiples operandos en memoria en la mayora de sus instrucciones, y reservaba los primeros bits de cada operando para indicar el modo de direccionamiento de ese operando en particular. Incluso en computadores con muchos modos de direccionamiento, algunas medidas realizadas a programas indican que los modos ms simples representan cerca del 90% o ms de todos los modos de direccionamiento utilizados. Dado que la mayora de estas medidas son obtenidas a partir de cdigos de alto nivel generados a partir de compiladores, nos da una idea de las limitaciones que presentan los compiladores que se utilizan. TIPOS DE DIRECCIONAMIENTO Implcito: En este modo de direccionamiento no es necesario poner ninguna direccin de forma explcita, ya que en el propio codigo de operacin se conoce la direccin del (de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere operar. Supongamos una arquitectura de pila, las operaciones aritmeticas no requieren direccionamiento explcito por lo que se ponen como: add sub. Un ejemplo de este tipo de direccionamiento lo podemos encontrar en la arquitectura de acumulador (AC) donde siempre hay un parmetro implcito y este es el AC. Para finalizar y dejar este modo de direccionamiento generalizado para las arquitecturas ms usuales, remarcamos que tambin podemos encontrarlo en la arquitectura con registros de prposito general, por ejemplo con ordenes como setc, que pone a 1 el registro c (acarreo). Inmediato: En la instruccin est incluido directamente el operando. En este modo el operando es especificado en la instruccin misma. En otras palabras, una instruccin de modo inmediato tiene un campo de operando en vez de un campo de direccin. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operacin especificada en la instruccin. Las instrucciones de modo inmediato son tiles para inicializar los registros en un valor constante.

Directo: El campo de operando en la instruccin contiene la direccin en memoria donde se encuentra el operando. En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en la memoria y su direccin es dada directamente por el campo de direccin de la instruccin. En una instruccin de tipo ramificacin el campo de direccin especifica la direccin de la rama actual. Con este tipo de direccionamiento, la direccin efectiva es contenida en la misma instruccin, tal como los valores de datos inmediatos que son contenidos en la instruccin. Un procesador de 16 bits suma la direccin efectiva al contenido del segmento de datos previamente desplazado en 4 bits para producir la direccin fsica del operando.

Indirecto: El campo de operando contiene una direccin de memoria, en la que se encuentra la direccin efectiva del operando.

Absoluto: El campo de operando contiene una direccin en memoria, en la que se encuentra la instruccin. De registro: Sirve para especificar operandos que estn en registros.

Indirecto mediante registros: El campo de operando de la instruccin contiene un identificador de registro en el que se encuentra la direccin efectiva del operando. En este modo el campo de la direccin de la instruccin da la direccin en donde la direccin efectiva se almacena en la memoria. El control localiza la instruccin de la memoria y utiliza su parte de direccin para

accesar la memoria de nuevo para leer una direccin efectiva. Unos pocos modos de direccionamiento requieren que el campo de direccin de la instruccin sea sumado al control de un registro especificado en el procesador. La direccin efectiva en este modo se obtiene del siguiente clculo: Dir. efectiva = Dir. de la parte de la instruccin + Contenido del registro del procesador

De desplazamiento: Combina el modo directo e indirecto mediante registros De pila: Se utiliza cuando el operando est en memoria y en la cabecera de la pila. Este direccionamiento se basa en las estructuras denominadas Pila(tipo LIFO), las cuales estan marcados por el fondo de la pila y el puntero de pila (*SP), El puntero de pila apunta a la ltima posicin ocupada. Asi, como puntero de direccionamiento usaremos el SP. El desplazamiento ms el valor del SP nos dar la direccin del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de direccionamiento nos aporta flexibilidad pero por contra, es mucho mas complejo que otros tipos estudiados ms arriba. Respecto a un registro base: Este modo de direccionamiento es muy usado por los ensambladores cuando se llaman a las funciones (para acceder a los parametros apilados en la pila, valga la redundancia). Consiste, al igual que el indirecto a travs de registro, en calcular la EA (Effective Address) como la suma del contenido del registro base y un cierto desplazamiento (u offset) que siempre ser positivo. Esta tcnica permite cdigos reentrantes y acceder de forma fcil y rpida a posiciones cercanas de memoria. EA = RB+offset RB = registro base

offset = desplazamiento -> RB se comporta como una direccin de memoria a la que se le sumar el desplazamiento Respecto a un registro indice: Es similar al anterior, lo nico que es el contenido del registro indice el que indica el desplazamiento que se produce a partir de una direccin de memoria que se pasa tambin como argumento a la orden que utiliza este modo de direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se calcula como la suma del contenido del registro indice y una direccin de memoria: EA = RI+DM RI = registro ndice DM = direccion de memoria -> RI se comporta como un offset Indexado respecto a una base: Se trata de una combinacin de los dos anteriores y consiste en calcular la direccin efectiva como: EA = RI+RB+DM -> Las siglas significan lo mismo que en el caso anterior Respecto al contador de programa: Consiste en direccin una posicin de memoria usando como registro base al contador de programa (PC), el funcionamiento es anlogo al direccionamiento respecto a registro base con la salvedad de que, en este caso, el offset puede ser tambin negativo. Indexado con autoincremento/autodecremento: Es un modo de direccionamiento anlogo al indexado, explicado anteriormente. La nica diferencia es que permite un incremento o decremento de la direccin final o el registro indice segn los siguientes casos: Indexado con autopreincremento: Incrementa el registro indice primero (se incrementa un valor, segn el tamao del objeto direccionado) y luego calcula la EA al igual que el direccionamiento indexado. Indexado con autoposincremento: Calcula la direccin efectiva y despus incrementa esta. Indexado con autopredecremento: Decrementa el registro indice y despus calcula la direccin efectiva. Indexado con autoposdecremento: Calcula la direccin efectica y despus decrementa esta.

Instruccin de salto con direccionamiento absoluto: Consiste en cargar en el PC el valor que se especifica en la orden de salto, p.e: jmp 0xAB ----> Carga 0xAB en PC

Instruccin de salto con direccionamiento relativo: Es parecida a la especificada anteriormente la diferencia es que el salto es relativo al PC, pongamos un ejemplo: Supongamos que PC vale = 0x0A, si nosotros interpretamos la instruccin jr +03, saltaremos tres posiciones posteriores a PC (tambin podra ser -03 y seran posiciones anteriores). Pero, cuidado! si esa instruccin estaba en la posicin 0x0A la direccin de PC a incrementar ser la inmediatamente posterior (ya que PC se incrementa automticamente despus de leer la instruccin), por lo que quedara: PC = 0x0B ---> nuevo PC = 0x0B+0x03 = 0x0E, con lo que el PC quedara como 0x0E. MODALIDADES DE DIRECCIONAMIENTO Direccionamiento directo por registro: Se mencion anteriormente que el campo de direccin de una instruccin puede especificar una palabra de memoria o un registro M procesador. Cuando se da este ltimo caso se dice que el operando est especificado con direccionamiento directo por registro, en tal caso, el operando reside en uno de los registros del procesador que es seleccionado por un campo de registro de k bits en la instruccin. Un campo de k bits puede especificar uno de 2k registros. Este modo es tpico de los ordenadores con organizacin de registros de uso general. Las ventajas de este modo son: El acceso a los registros es muy rpido, por tanto el direccionamiento por registro debe usarse en las variables que se usen con ms frecuencia para evitar accesos a memoria que son ms lentos, un ejemplo muy tpico del uso de este direccionamiento son los ndices de los bucles. El nmero de bits necesarios para especificar un registro es mucho ms pequeo que el necesario para especificar una direccin de memoria, esto es debido a que el nmero de registros del procesador es muy pequeo comparado con el nmero de direcciones de memoria. Sin embargo, hay que tener en cuenta que en los ordenadores modernos el nmero de registros ha aumentado considerablemente. Direccionamiento inmediato (o literal): En este modo es el operando el que figura en la instruccin no su direccin. En otras palabras el campo de operando contiene l mismo, sin transformacin alguna, la informacin sobre la que hay que operar. Este modo es til para inicializar registros o palabras de memoria con un valor constante. Direccionamiento directo (o absoluto): Este es el modo de direccionamiento ms sencillo. El campo de direccin no necesita transformacin alguna para dar la direccin efectiva, es decir la funcin que transforma el campo de operando en la direccin efectiva es la identidad. Esto significa que el campo de operando es ya la direccin efectiva. Este direccionamiento slo se usa en ordenadores pequeos en que el programa siempre se sita en la misma zona de memoria ya que dificulta la relocalizacin de los programas, es decir que el cdigo de los programas no dependa de su situacin en memoria. Ordinariamente este modo slo se usa para acceder a direcciones del sistema que normalmente se refieren a operaciones de entrada y salida ya que estas direcciones no dependen del programa. Direccionamiento indirecto: En este modo el campo de operando de la instruccin indica la

localizacin de la direccin efectiva del operando. El modo de direccionamiento indirecto puede adquirir diferentes formas segn cul sea el lugar donde se encuentre la direccin del operando. En general, todos los modos de direccionamiento tienen su versin indirecta que aade un eslabn ms a la cadena del direccionamiento. Por ejemplo existe el direccionamiento indirecto por registro, en el que el registro especificado contiene la direccin del operando, no el operando mismo. Este direccionamiento es til cuando se trabaja con punteros ya que los punteros son variables que contienen las direcciones de los operandos, no los operandos mismos. Direccionamiento relativo: Hay algunos modos de direccionamiento en que se hace uso de una propiedad muy generalizada de los programas denominada localidad de referencia, esta propiedad consiste en que las direcciones referenciadas por los programas no suelen alejarse mucho unas de otras y, por tanto, suelen estar concentradas en una parte de la memoria. Estas consideraciones nos llevan a la conclusin de que no es necesario utilizar todos los bits de la direccin de memoria en el campo de operando, basta utilizar los bits precisos para cubrir la parte de memoria donde estn incluidas las direcciones a las que el programa hace referencia. Esto puede hacerse tomando corno referencia un punto de la memoria y tomando como campo de operando la diferencia entre ese punto y la direccin efectiva del operando. La direccin que se toma como punto de referencia puede residir en un registro de la CPU y, por tanto, sumando el contenido de ese registro con el campo de operando obtendremos la direccin efectiva. Hay varios direccionamientos basados en esta tcnica que reciben diferentes nombres dependiendo de cul sea el registro en el que radica la direccin tomada como referencia. Todos ellos podran catalogarse como direccionamientos relativos a un registro. El direccionamiento denominado habitualmente relativo toma como valor de referencia el registro contador de programa. Cuando se usa este modo de direccionamiento, el campo de operando consiste en un nmero (normalmente con signo) que expresa la diferencia entre la direccin del dato y la direccin siguiente a la instruccin en curso (contenida en el contador de programa). Si el campo de operando, llamado en este caso desplazamiento u offset, es positivo el operando residir en una direccin posterior a la de la instruccin y si es negativo, en una direccin anterior. Este modo de direccionamiento es usado muy frecuentemente en programas cuyo cdigo deba ser independiente de la posicin de memoria donde estn situados (programas relocalizables) ya que el desplazamiento es independiente de la localizacin del programa. Tambin se usa con mucha frecuencia en instrucciones de bifurcacin. Los apartados siguientes se refieren a diferentes versiones de direccionamientos relativos a registros. PILA Aparte de los componentes de la arquitectura presentados en las secciones anteriores, la mayor parte de procesadores ofrecen la infraestructura necesaria para manipular una estructura de datos organizada y almacenada en memoria que se denomina la pila. La pila es una zona de la memoria sobre la que se pueden escribir y leer datos de forma convencional. Esta zona tiene una posicin especial que se denomina la cima de la pila. El

procesador contiene dos instrucciones de su lenguaje mquina para realizar las operaciones de apilar y desapilar datos de la pila. Los datos que se pueden apilar y desapilar, en el caso del Intel Pentium son siempre de tamao 4 bytes. EJECUCION DE INSTRUCCIONES DE PILA El que la direccin de la pila est contenida en un registro de propsito general permite que su contenido sea manipulado como cualquier otro registro. Un programa, por tanto, puede leer y escribir cualquier valor de %esp, tan slo se debe tener en cuenta que el procesador obtiene de ese registro la direccin de memoria necesaria para ejecutar las instrucciones push y pop. Supngase que se ha depositado un cierto dato en la pila mediante la instruccin push y que se encuentra, por tanto en la cima. La instruccin pop deposita ese valor en el lugar especificado pero, es posible ejecutar la instruccin pop sin ningn operando?. En otras palabras, la operacin que se quiere ejecutar no es la de copiar el dato de la cima, sino simplemente corregir el valor de la cima al igual que hara pop pero sin depositar el dato en ningn lugar. La instruccin pop, por definicin, debe incluir un nico operando, con lo que no se puede utilizar para hacer esta operacin. La solucin se deriva del hecho de que esp. La instruccin ADD $4, esp su valor incrementado en cuatro unidades. El efecto que esta instruccin tiene sobre la pila es el deseado. La siguiente instruccin asume que la cima est en la nueva posicin contenida en %esp. INSTRUCCIONES DE PILA La pila es un segmento que es de suma utilidad en estos microprocesadores En l se almacenan valores temporales como las variables locales de las funciones, o las direcciones de retorno de stas. Una funcin no es ms que una subrutina, o un fragmento de cdigo al que se le llama generalmente varias veces desde el programa principal, o desde una funcin jerrquicamente superior. Cuando se llama a una funcin se hace un mero salto al punto donde empieza ese cdigo. Sin embargo esa subrutina puede ser llamada desde distintos puntos del programa principal, por lo que hay que almacenar en algn sitio la direccin desde donde se hace la llamada, cada vez que esa llamada tiene lugar, para que al finalizar la ejecucin de la funcin se retome el programa donde se dej. Esta direccin puede almacenarse en un sitio fijo (como hacen algunos microcontroladores), pero eso tiene el inconveniente de que si esa funcin a su vez llama a otra funcin (o a s misma!) podemos sobreescribir la direccin de retorno anterior, y al regresar de la segunda llamada, no podramos volver desde la primera. Adems, es deseable que la funcin guarde los valores de todos los registros que vaya a usar en algn sitio, para que el que la llame no tenga que preocuparse de ello (pues si sabe que los registros van a ser modificados, pero no sabe cules, los guardar todos por si acaso). Todas estas cosas, y algunas ms, se hacen con la pila. El segmento de pila est indicado por SS, y el desplazamiento dentro del segmento, por SP. Cuando arranca el programa, SP apunta al final del segmento de pila. Para almacenar informacin en la pila se decrementa SP para que apunte un poco ms arriba y se copia a esa posicin de memoria, SS:SP. Para sacarlo, copiamos lo que haya en SS:SP a nuestro destino, e incrementamos el puntero. Como con todo lo que se hace con frecuencia, hay dispuestas instrucciones propias para el manejo de la pila. Las dos bsicas son PUSH origen (empujar) y POP destino (sacar). La primera

decrementa el puntero de pila y copia a la direccin apuntada por l (SS:SP) el operando origen (de tamao mltiplo de 16 bits), mientras que la segunda almacena el contenido de la pila (elemento apuntado por SS:SP) en destino y altera el puntero en consecuencia. Si el operando es de 16 bits se modifica en 2 unidades, de 32 en 4, etc. Lo que se incrementa/decrementa es siempre SP, claro, porque SS nos indica dnde est ubicado el segmento de pila. La instruccin ret size se utiliza para recuperar de la pila los valores de IP o de CS e IP dependiendo del caso. Al salir de un procedimiento es necesario dejar la pila como estaba; para ello podemos utilizar la instruccin pop, o bien ejecutar la instruccin ret size donde size es el nmero de posiciones que deben descartarse de la pila.

1.7 Proceso de ensamblado y ligado


Para poder crear un programa se requieren varias herramientas: Primero un editor para crear el programa fuente. Segundo un compilador que no es ms que un programa que "traduce" el programa fuente a un programa objeto. Y tercero un enlazador o linker, que genere el programa ejecutable a partir del programa objeto. El editor puede ser cualquier editor de textos que se tenga a la mano, como compilador utilizaremos el MASM (macro ensamblador de Microsoft) ya que es el ms comn, y como enlazador utilizaremos el programa link. La extensin usada para que MASM reconozca los programas fuente en ensamblador es .ASM; una vez traducido el programa fuente, el MASM crea un archivo con la extensin .OBJ, este archivo contiene un "formato intermedio" del programa, llamado as porque an no es ejecutable pero tampoco es ya un programa en lenguaje fuente. El enlazador genera, a partir de un archivo .OBJ o la combinacin de varios de estos archivos, un programa ejecutable, cuya extensin es usualmente .EXE aunque tambin puede ser .COM, dependiendo de la forma en que se ensambl.

1.8 Desplegado de mensajes en el monitor


Para poder desplegar mensajes en lenguaje ensamblador primero debemos conocer la estructura del programa en ensamblador. Comentarios En Lenguaje Ensamblador. El uso de comentarios a lo largo de un programa puede mejorar su claridad, en especial en lenguaje ensamblador, donde el propsito de un conjunto de instrucciones con frecuencia no es claro. Un comentario empieza con punto y coma (;) y, en donde quiera que lo codifique, el

ensamblador supone que todos los caracteres a la derecha de esa lnea son comentarios. Un comentario puede contener cualquier carcter imprimible, incluyendo el espacio en blanco. Un comentario puede aparecer solo en una lnea o a continuacin de una instruccin en la misma lnea, como lo muestran los dos ejemplos siguientes:

Ya que un comentario aparece solo en un listado de un programa fuente en ensamblador y no genera cdigo de mquina, puede incluir cualquier cantidad de comentarios sin afectar el tamao o la ejecucin del programa ensamblado. Otra manera de proporcionar comentarios es por medio de la directiva COMMENT. Palabras Reservadas Ciertas palabras en lenguaje ensamblador estn reservadas para sus propsitos propios, y son usadas solo bajo condiciones especiales. Por categoras, las palabras reservadas incluyen: la computadora puede ejecutar.

ensamblador.

n a su programa. Identificadores. Un identificador es un nombre que se aplica a elementos en el programa. Los dos tipos de identificadores son: nombre, que se refiere a la direccin de un elemento de dato y etiqueta, que se refiere a la direccin de una instruccin. Un identificador puede usar los siguientes caracteres: 1. Letras del alfabeto: Desde la A hasta la Z(maysculas o minsculas) 2. Dgitos: Desde el 0 al 9 (no puede ser el primer carcter) 3. Caracteres especiales: Signo de interrogacin ( ? ) Subrayado ( _ ), Signo de pesos ( $ ), Arroba ( @ ), Punto ( . ) (no puede ser el primer carcter)

El primer carcter de un identificador debe ser una letra o un carcter especial, excepto punto. Ya que el ensamblador utiliza algunos smbolos especiales en palabras que inician con el smbolo @, debe evitar usarlo en sus definiciones. En consecuencia, en una instruccin tal como:

registros. Sin embargo, en una instruccin como:

algn lugar del programa.

Identificador, operacin y operando pueden empezar en cualquier columna. Sin embargo, si de manera consistente se inicia en la misma columna para estas tres entradas se hace un programa ms legible. e aplica al nombre de un elemento o directiva definida, mientras que el termino etiqueta se aplica al nombre de una instruccin.

definicin de reas de datos y codificacin de instrucciones. Para un elemento de datos, una operacin como DB o DW define un campo, rea de trabajo o constante.

sobre l. Para un elemento de datos, el operando identifica su valor inicial. Por ejemplo, en la definicin siguiente de un elemento de datos llamado COUNTER, la operacin DB significa "definir byte", y el operando inicializa su contenido con un valor cero:

Para una instruccin, un operando indica en donde realizar la accin. Un operando de una instruccin puede tener una, dos o tal vez ninguna entrada. Aqu estn tres ejemplos:

Directivas Para Listar: Page Y Title. La directiva PAGE y TITLE ayudan a controlar el formato de un listado de un programa en ensamblador. Este es su nico fin, y no tienen efecto sobre la ejecucin subsecuente del programa. PAGE. Al inicio de un programa, la directiva PAGE designa el nmero mximo de lneas para listar en una pgina y el nmero mximo de caracteres en una lnea. Su formato general es: PAGE [longitud][, ancho] El ejemplo siguiente proporciona 60 lneas por pgina y 132 caracteres por lnea: PAGE 60, 132

El nmero de lneas por pgina puede variar desde 10 hasta 255, mientras que el nmero de caracteres por lnea desde 60 hasta 132. La omisin de PAGE causa que el ensamblador tome PAGE 50, 80. TITLE. Se puede emplear la directiva TITLE para hacer que un ttulo para un programa se imprima en la lnea 2 de cada pgina en el listado del programa. Puede codificar TITLE de una vez, al inicio del programa. Su formato general es: TITLE Texto. Para el operando texto, una tcnica recomendada es utilizar el nombre del programa como se registra en el disco. Por ejemplo: TITLE Prog1 Mi primer programa en ensamblador Directiva Segment. Un programa ensamblado en formato .EXE consiste en uno o ms segmentos. Un segmento de pila define el almacn de la pila, un segmento de datos define los elementos de datos y un segmento de cdigo proporciona un cdigo ejecutable. Las directivas para definir un segmento, SEGMENT y ENDS tienen el formato siguiente: El enunciado SEGMENT define el inicio de un segmento. El nombre del segmento debe estar presente, ser nico y cumplir las convenciones para nombres del lenguaje. EL enunciado ENDS indica el final del segmento y contiene el mismo nombre del enunciado SEGMENT. El tamao mximo de un segmento es de 64K. El operando de un enunciado SEGMENT puede tener tres tipos de opciones: alineacin, combinar y clase, codificadas en este formato: nombre SEGMENT alineacin combinar ' clase TIPO ALINEACION. La entrada alineacin indica el lmite en el que inicia el segmento. Para el requerimiento tpico, PARA, alinea el segmento con el lmite de un prrafo, de manera que la direccin inicial es divisible entre 16, o 10H. En ausencia de un operando hace que el ensamblador por omisin tome PARA. TIPO COMBINAR. La entrada combinar indica si se combina el segmento con otros segmentos cuando son enlazados despus de ensamblar. Los tipos de combinar son STACK, COMMON, PUBLIC y la expresin AT. Por ejemplo, el segmento de la pila por lo comn es definido como: nombre SEGMENT PARA STACK Puede utilizar PUBLIC y COMMON en donde tenga el propsito de combinar de forma separada programas ensamblados cuando los enlaza. En otros casos, donde un programa no es combinado con otros, puede omitir la opcin o codificar NONE. TIPO CLASE. La entrada clase, encerrada entre apstrofos, es utilizada para agrupar segmentos cuando se enlazan. Se utiliza la clase 'code' para el segmento de cdigos, 'data' por segmento de datos y 'stack' para el segmento de la pila. El ejemplo siguiente define un segmento de pila con tipos alineacin, combinar y clase:

nombre SEGMENT PARA STACK 'Stack' Directiva Assume. Un programa utiliza el registro SS para direccionar la pila, al registro DS para direccionar el segmento de datos y el registro CS para direccionar el segmento de cdigo. Para este fin, usted tiene que indicar al ensamblador el propsito de cada segmento en el programa. La directiva para este propsito es ASSEME, codificada en el segmento de cdigo como sigue: Operacin Operando. ASSUME SS:nompila, DS:nomsegdatos, CS: nomsegcodigo,. . . Los operandos pueden aparecer en cualquier orden. Al igual que otras directivas, ASSUME es solo un mensaje que ayuda al ensamblador a convertir cdigo simblico a cdigo maquina; an puede tener que codificar instrucciones que fsicamente cargan direcciones en registros de segmentos en el momento de la ejecucin. PAGE 60,132 Introduccin al Lenguaje Ensamblador 19 ITS Carrillo Puerto Lenguajes De Interfaz ISC-6B

TITLE P04ASM1 ESTRUCTURA DE UN PROGRAMA .EXE ;------------------------------------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack' ... STACKSG ENDS ------------------------------------------------------------------------------DATASG SEGMENT PARA 'Data' ... DATASG ENDS ;------------------------------------------------------------------------------CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME SS: STACKSG, DS: DATASG, CS: CODESG MOV AX, DATASG; Obtiene la direccin del segmento de datos

MOV DS, AX; Almacena direccin en DS ... MOV AX, 4C00H; Peticin INT 21H; Salida al DOS BEGIN ENDP CODESG ENDS END BEGIN Directivas Simplificadas De Segmentos Los ensambladores de Microsoft y de Borland proporcionan algunas formas abreviadas para definir segmentos. Para usar estas abreviaturas, inicialice el modelo de memoria antes de definir algn segmento. El formato general (incluyendo el punto inicial) es: .MODEL modelo de memoria El modelo de memoria puede ser TINY, SMALL, MEDIUM, COMPACT o LARGE. Los requisitos para cada modelo son: Puede utilizar cualquiera de estos modelos para un programa autnomo (esto es, un programa que no est enlazado con algn otro). El modelo TINY est destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, cdigo y pila en un segmento. El modelo SMALL exige que el cdigo quepa en un segmento de 64K y los datos en otro segmento de 64K. La directiva .MODELL genera automticamente el enunciado ASSUME necesario. Los formatos generales (incluyendo el punto inicial) para las directivas que define los segmentos de la pila, de datos y de cdigo son: .STACK [tamao] .DATA .CODE [nombre] Cada una de estas directivas hace que el ensamblador genere el enunciado SEGMENT necesario y su correspondiente ENDS. Los nombres por omisin de los segmentos (que usted no tiene que definir) son STACK, DATA y TEXT (para el segmento de cdigo).

Referencias
Paszniuk, Rodrigo (27 de abril de 2013). Introduccin al Lenguaje Ensamblador. Consultado el 01 de abril de 2014. Recuperado de: http://www.programacion.com.py/escritorio/ensamblador/introduccion-al-lenguajeensamblador Varios Autores (31 de enero de 2014). Importancia de la programacin en Lenguaje ensamblador. Consultado el 01 de abril de 2014. Recuperado de: http://www.slideshare.net/LuyzMeyner/unidadi-lenguajes-de-interfaz Blogger (10 de noviembre de 2012).Importancia del Lenguaje ensamblador. Consultado el 01 de abril de 2014. Recuperado de:http://lenguajes-einterpretes.blogspot.mx/2012/11/importancia-del-lenguaje-ensamblador.html (S/A).(S/F). Registros del Procesador. Consultado el 01 de abril de 2014. Recuperado de: http://www.oocities.org/mx/antrahxg/documentos/org_comp/registro.html ITESCAM (s/f). Concepto de interrupciones. Consultado el 01 de abril de 2014. Recuperado de: .itescam.edu.m principal sylabus pdb recursos r40 32.DOC Galen. (S/F). La memoria Principal (RAM). Consultado el 01 de abril de 2014. Recuperado de: http://ortihuela.galeon.com/ram.htm Hernandez, Max. (20 de mayo de 2012).Llamadas al sistema. Consultado el 01 de abril de 2014. Recuperado de: http://maxkalavera.blogspot.mx/2012/05/llamadas-al-sistema.html Barraza, Carlos. (02 de septiembre de 2013). Modos de Direccionamiento. Consultado el 01 de abril de 2014. Recuperado de: http://carlos-barrazalenguajesinterfaz.blogspot.mx/2013/09/modos-de-direccionamiento.html

Das könnte Ihnen auch gefallen