REPBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPUPAL PARA LA DEFENSA UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA NACIONAL
UNEFA EXTENCION PUERTO PIRITU
Materia. Microprocesadores Seccin: U 7mo Semestre de Ingeniera Puerto Pritu, 06 de julio de 2011
Introduccin
Con la aparicin de las computadoras personales (PC) y la reduccin en el costo de las mismas, el microprocesador se convirti en uno de los dispositivos electrnicos ms importantes en la historia de la electrnica. El lenguaje ensamblador es la forma ms bsica de programar un microprocesador para que ste sea capaz de realizar las tareas o los clculos que se le requieran. El lenguaje ensamblador es conocido como un lenguaje de bajo nivel, esto significa que nos permite controlar el 100 % de las funciones de un microprocesador, as como los perifricos asociados a ste. A diferencia de los lenguajes de alto nivel, por ejemplo "Pascal", el lenguaje ensamblador no requiere de un compilador, esto es debido a que las instrucciones en lenguaje ensamblador son traducidas directamente a cdigo binario y despus son colocadas en memoria para que el microprocesador las tome directamente. Aprender a programar en lenguaje ensamblador no es fcil, se requiere un cierto nivel de conocimiento de la arquitectura y organizacin de las computadoras, adems del conocimiento de programacin en algn otro lenguaje
Que es Lenguaje Ensamblador
Es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Esta representacin es usualmente definida por el fabricante de hardware, y est basada en los mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo tanto especfico a cierta arquitectura de computador fsica (o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto nivel, que, idealmente son portables. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas instrucciones de mquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin. Particularmente, la mayora de los ensambladores modernos incluyen una facilidad de macro (descrita ms abajo), y son llamados macro ensambladores. Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se requiere la manipulacin directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido. Muchos dispositivos programables (como los microcontroladores) an cuentan con el ensamblador como la nica manera de ser manipulados.
Caractersticas
y
El cdigo escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje mquina, es decir, es un lenguaje de bajo nivel. El lenguaje ensamblador es difcilmente portable, es decir, un cdigo escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra mquina distinta. Al cambiar a una mquina con arquitectura diferente, generalmente es necesario reescribirlo completamente. Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho ms rpidos y consumen menos
recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan ms rpidamente y ocupan menos espacio que con lenguajes de alto nivel. Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de cdigo difciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no estn disponibles en los lenguajes de alto nivel. Tambin se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa durante su ejecucin.
Estructura Del Lenguaje Ensamblador
La transformacin del lenguaje ensamblador en cdigo mquina la realiza un programa ensamblador, y la traduccin inversa la puede efectuar un desensamblador. A diferencia de los lenguajes de alto nivel, aqu hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el lenguaje de mquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se expanden en un cdigo de mquina ms extenso a fin de proveer la funcionalidad necesaria y simplificar la programacin. Por ejemplo, para un cdigo mquina condicional como "si X mayor o igual que", un ensamblador puede utilizar una pseudoinstruccin al grupo "haga si menor que", y "si = 0" sobre el resultado de la condicin anterior. Los Ensambladores ms completos tambin proveen un rico lenguaje de macros que se utiliza para generar cdigo ms complejo y secuencias de datos. Para el mismo procesador y el mismo conjunto de instrucciones de CPU, diferentes programas ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el conjunto de mnemnicos o en la sintaxis de su lenguaje ensamblador. Por ejemplo, en un lenguaje ensamblador para la arquitectura x86, se puede expresar la instruccin para mover 5 al registro AL de la siguiente manera: MOV AL, 5, mientras que para otro ensamblador para la misma arquitectura se expresara al revs: MOV 5, AL. Ambos lenguajes ensambladores haran exactamente lo mismo, solo que est expresado de manera diferente. El primero usa la sintaxis de Intel, mientras que el segundo usa la sintaxis de AT&T El uso del ensamblador no resuelve definitivamente el problema de cmo programar un sistema basado en microprocesador de modo sencillo ya que para hacer un uso eficiente del mismo, hay que conocer a fondo el microprocesador, los registros de trabajo de que dispone, la estructura de la memoria, y muchas cosas ms referentes a su estructura bsica de funcionamiento.
Estructura de un programa en ensamblador Para hacer la tarea del programador ms grata, se usan algunas convenciones. Cada uno puede adoptar las que ms le agraden y ayuden para ser ms productivo. En general, las convenciones son cualquier accin que facilita la revisin y comprensin de un programa, especialmente el que uno mismo ha escrito cuando tiene que revisarlo algunos meses despus. Algunas convenciones que usaremos: * Los ficheros de cdigofuente llevarn la extensin *.ASM * Los ficheros de listado llevarn la extensin *.LST * Los ficheros de cdigo objeto llevarn la extensin *.OB] * Los ficheros de errores llevarn la extensin *.ERR * Los ficheros ejecutables en formato Intel Hex llevarn la extensin *.HEX * Comentario descriptivo del programa (utilizar una cabecera estandarizada). * Definir el microcontrolador que se usar (con las directivas LIST e INCLUDE).
Utilidades Disponibles en el Sistema Operativo
Cdigo De InicioEl cdigo de inicio de un programa en ensamblador para el 8086 tiene como propsito declarar losnombres de los segmentos en los que se almacenar el cdigo del programa, los datos y la pila.Tambin establece el modelo de memoria bajo el que se ensamblar el programa y el tamao de la pila.El cdigo de inicio consta de un conjunto de directivas. En el programa de ejemplo tenemos: IdealEl modo ideal es una notacin que emplea el ensamblador Turbo Assembler de Borland Internationalpara simplificar la sintaxis del cdigo inicial de un programa. La directiva ideal le dice a TurboAssembler que utilice el modo ideal. Si se omite se utiliza la notacin empleada por la mayora de losensambladores, por ejemplo el de Microsoft. DossegEsta directiva que forma parte del modo ideal, le instruye al ensamblador que nombre y ordene lossegmentos del programa de la misma forma en que lo hacen los compiladores de alto nivel. Esto esadecuado para la mayora de los programas en ensamblador y sobre todo en las rutinas deensamblador que se van a ligar a un programa en alto nivel.
ModelEsta directiva que debe ir despus de la directiva dosseg, selecciona uno de los 6 modos diferentesque tiene Turbo Assenbler de generar el cdigo de un programa dependiendo del tamao que tiene elcdigo y los datos. Estos modos llamados modelos de memoria, difieren en el tipo de apuntadoresque el compilador genera por omisin y por lo tanto en la rapidez de ejecucin del cdigo. Los seismodelos de memoria son: Pequeito (tiny), pequeo (small), medio (medium), compacto (compact),grande (large) y extenso (huge). Modelo pequeito (tiny)En el modelo pequeito, el cdigo, los datos y la pila deben de estar en un solo segmento, esto es, elprograma completo no debe exceder a 64 KB. Todos los registros de segmento son inicializados almismo valor y permanecen constantes durante la ejecucin del programa. Bajo este modelo elcompilador genera apuntadores cercanos. El cdigo ejecutable producido es el ms pequeo y rpido. Modelo pequeo (small)En el modelo pequeo, el cdigo tiene su propio segmento y los datos y la pila estn en otro segmento,esto es, el cdigo no debe exceder a 64 KB ni tampoco los datos y pila. Los registros de segmentopermanecen constantes durante la ejecucin del programa. El cdigo producido bajo este modelo utilizatambin apuntadores cercanos y es igual de rpido que en el modelo pequeito pero el tamao delprograma puede ser del doble. Normalmente debemos usar este modelo de memoria a menos quenuestro cdigo o datos exceda los 64 KB. Modelo medio (medium)En el modelo medio, el cdigo del programa puede ocupar varios segmentos pero los datos y la pilaocupan un solo segmento, esto es, el cdigo puede exceder a 64 KB pero los datos y pila no. Por lotanto, bajo este modelo el cdigo utiliza apuntadores lejanos y los datos apuntadores cercanos. Debidoa los apuntadores lejanos la velocidad de ejecucin del programa se ve degradada. Los registros delos segmentos de datos y la pila se inicializan al mismo valor y permanecen constantes durante laejecucin del programa. Este modelo se debe usar cuando tengamos un programa de cdigo extenso y Pocos datos. Modelo compacto (compact)En el modelo compacto, el cdigo del programa est limitado a un segmento, los datos pueden ocuparvarios segmentos aunque el total de las variables estticas no pueden exceder los 64 KB. Por lo tanto,bajo este modelo el cdigo utiliza apuntadores cercanos y los datos apuntadores lejanos. Debido a los Apuntadores lejanos tambin hay degradacin en la velocidad de ejecucin del programa. El registro del segmento de cdigo permanece constante durante la ejecucin del programa. Este modelo se debe usar cuando tengamos un programa de cdigo pequeo y muchos datos. Modelo grande (large)En el modelo grande, tanto el cdigo del programa como los datos puede ocupar varios segmentos,aunque el total de las variables estticas
no pueden exceder los 64 KB. Los apuntadores en estemodelo son lejanos tanto para el cdigo como para los datos. Esto hace que la velocidad de ejecucinde un programa compilado bajo este modelo sea ms lenta que cualquiera de las versiones anteriores. Este modelo se debe usar cuando tengamos un programa de cdigo extenso y muchos datos. Modelo extenso (huge).En el modelo extenso, es igual que el modelo grande, slo que el total de las variables estticas sipueden exceder los 64 KB. Sin embargo cada variable esttica en forma individual no puede exceder a64 KB. Los apuntadores en este modelo son lejanos tanto para el cdigo como para los datos. Lavelocidad de ejecucin de un programa compilado bajo este modelo es ms lenta que cualquiera de losotros modelos. StackEsta directiva reserva espacio de memoria para la pila del programa, un rea de memoria que almacenavalores temporales empleados por las subrutinas y las direcciones de regreso de las subrutinas.
Uso del Lenguaje Ensamblador
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. Note que, en el uso profesional normal, el trmino ensamblador es frecuentemente usado tanto para referirse al lenguaje ensamblador como tambin al programa ensamblador (que convierte el cdigo fuente escrito en el lenguaje ensamblador a cdigo objeto que luego ser enlazado para producir lenguaje de mquina). Las dos expresiones siguientes utilizan el trmino "ensamblador":
y y
"El CP/CMS fue escrito en ensamblador del IBM S/360" "El ASM-H fue un ensamblador del S/370 ampliamente usado"
La primera se refiere al lenguaje y la segundo se refiere al programa.
La sintaxis del Lenguaje Ensamblador
[etiqueta] [instruccin|directiva[operandos]] [;comentario]
etiqueta, instruccin/directiva, operandos, comentario,son los campos de la proposicin. Los campos se separan por caracteres blancos: caracteres de espacio y/o de tabulacin. Todos los campos son opcionales, pero el campo operandosslo pueden estar presente si existe el campo instruccin|directiva. etiquetaes un nombre simblico empleado para referirse a nmeros, cadenas de caracteres o localidades de memoria dentro de un programa. Las etiquetas permiten darle nombre a las variables constantes y localidades de una instruccin particular. *Las etiquetas pueden contener los siguientes caracteres: A-Z a-z _ @ $ ? 0-9. Los dgitos 0-9 no pueden usarse como el primer carcter de una etiqueta. Un slo carcter $ o ? no puede usarse como etiqueta ya que tienen un significado especial. *Las etiquetas deben ser nicas. Con excepcin de las definidas con la directiva =, y las etiquetas locales de macros y subrutinas. Las etiquetas pueden usarse como operandos tantas veces como se desee. *Una etiqueta puede aparecer por s sola en una lnea. En este caso el valor asociado a la etiqueta es la direccin de la operacin en la siguiente lnea en el programa. *Las palabras reservadas no pueden usarse como etiquetas. *Las etiquetas que aparecen solas en una lnea y las que van seguidas de una instruccin deben terminar en dos puntos (:). Las dems etiquetas por lo general no terminan en dos puntos. instruccines un mnemnico de una instruccin del procesador. Cada instruccin se traduce directamente a una instruccin del lenguaje mquina del microprocesador. directivaes una instruccin para el ensamblador. No produce cdigo ejecutable, sino que controla varios de los aspectos de cmo opera el ensamblador: el tipo de cdigo generado (8086, 80286, 80386, etc.), los segmentos a usar, etc. operandosconsiste de cero, uno o ms operandos. Un operando le especifica al ensamblador qu valor, registro, localidad de memoria, etc., asociar con cada instruccin. *Hay varias clases de operandos: registros, constantes, etiquetas, variables y cadenas. *El tipo y nmero de operandos depende de la instruccin o directiva. *Si hay dos o ms, van separados por comas (,)
comentarioes cualquier secuencia de caracteres precedidos por un punto y coma (;) y que termina con el fin de la lnea. *Los comentarios son ignorados por el ensamblador *Las lneas en blanco se tratan como comentarios.
Modos de Direccionamiento
Se les llama modos de direccionamiento a las distintas formas de combinar los operandos segn el acceso que se hace a memoria. Dicho de otra manera, un modo de direccionamiento ser una forma de parmetro para las instrucciones. Una instruccin que lleve un parmetro, por lo tanto, usar un modo de direccionamiento, que depender de cmo direccionar (accesar) al parmetro; una instruccin de dos parmetros, combinar dos modos de direccionamiento. Hay varios tipos de direccionamientos Direccionamiento implcito, Modo registro, Modo inmediato, Modo directo, Modo indirecto, Modo indexado de base. Dado que es necesario transferir datos existen los siguientes tipos de direccionamiento.
y y y y y y y
Valor de un registro Ejemplo: MOV AX, DX Constante Ejemplo: MOV BX, 1AB Valor apuntado por una constante Ejemplo: MOV AX, [1000] Apuntado por un registro de segmento y uno de offset (Solo puede ser BX, BP, DI o SI) Ejemplo: MOV CX, ES:[DI] Apuntado por DS y la suma de BX con una constante o apuntado por SS y la suma de BP con una constante Ejemplo: MOV DX, DS:[BP+1000] Apuntado por DS y la suma de DI o SI con una constante Ejemplo: MOV BX, DS:[SI+6F9] Apuntado por DS y la suma de BX y SI o BX y DI con una constante o apuntado por SS y la suma de BP y SI o BP y DI con una constante
Ejemplos MOV AX, DS:[BX][SI]+1FB9 MOV DX, SS:[BP][DI]+C9F8
Conjunto de Instrucciones en Lenguaje Ensamblador Lista Alfabtica de Instrucciones
ACALL ADD ADDC AJMP ANL ANL bit CJNE CLR A CLR bit CPL A CPL bit DA DEC DIV DJNZ INC JB JBC JC JMP @ JNB JNC JNZ JZ LCALL LJMP MOV MOV bit MOVC MOVX MUL NOP ORL AbsoluteCall AddAccumulator AddAccumulatorwithCarry AbsoluteJump Logical AND for byte variables Logical AND for bit variables Compare and Jump if Not Equal Clear Accumulator Clear bit ComplementAccumulator Complement bit Decimal Adjust of Accumulator DecrementRegister Divide Accumulatorby B Decrement Register and Jump if Not Zero IncrementRegister Jumpif Bit Set Jump if Bit Set and Clear Bit JumpifCarry Set JumpindirecttoAddress Jump if Bit Not Set Jump if Carry Not Set Jump if Accumulator Not Zero JumpifAccumulator Zero Long Call Long Jump Move byte variable Move bit MoveCodeMemory MoveExternalMemory MultiplyAccumulatorby B No Operation Logical OR for byte variables
ORL bit POP PUSH RET RETI RL RLC RR RRC SETB SJMP SUBB SWAP XCH XCHD XRL ??
Logical OR for bit variables Pop FromStack PushOntoStack ReturnFromSubroutine ReturnFromInterrupt RotateAccumulatorLeft Rotate Accumulator Left Through Carry RotateAccumulatorRight Rotate Accumulator Right Through Carry Set Bit Short Jump Subtract From Accumulator With Borrow Swap AccumulatorNibbles Exchange Bytes Exchange Digits Exclusive OR UndefinedInstruction
Los microprocesadores 80x86 cuentan con algunas instrucciones bsicas de transferencia de informacin de acuerdo con los modos de direccionamiento explicados en el captulo anterior. Las instrucciones ms representativas del grupo de transferencia son: 1.- MOV.- Transfiere (copia) contenidos. Su formato es MOV OP1,OP2. Esta instruccin copia el contenido de OP2 en OP1 2.- LEA.- Carga un registro con la direccin de desplazamiento de alguna variable en memoria. Su formato es LEA REG, Variable. 3.- LDS.- Inicializa el registro DS LES.- Inicializa el registro ES, Las instrucciones LDS y LES modifican directamente el contenido de los registros de segmento DS y ES, por lo cual se recomienda que slo sean utilizadas por programadores avanzados. 4.- JA o JNBE: Salta si est arriba o salta si no est por debajo o si no es igual, El salto se efecta si la bandera de CF=0 o si la bandera ZF=0. 5.- JE o JZ: Salta si es igual o salta si es cero (jump if equal or jump if zero). El salto se efecta si ZF=1. 6.- JNE o JNZ: Salta si no es igual o salta si no es cero (jump if not equal or jump if not zero). El salto se efecta si ZF=0.
7.- JC: Salta si hay acarreo (jump if carry). El salto se efecta si CF=1. 8.- JP o JPE: Salta si hay paridad o salta si la paridad es par (jump if parity or jump if parity even). El salto se efecta si PF=1. 9.- JS: Salta si hay signo (jump if sign). El salto se efecta si SF=1. 10.- JGE o JNL: Salta si es mayor o igual o salta si no es menor (jump if greater or equal or jump if not less). El salto se efecta si SF=OF. 11.- LOOP ejecuta las instrucciones que se encuentran entre la Etiqueta: y Loop Etiqueta el nmero de veces que indique el campo No_Veces. 12.- ROL y ROR funcionan de forma muy semejante; al ejecutar una instruccin ROL, el bit ms significativo del dato es desplazado hacia la bandera de acarreo y tambin hacia la posicin del bit memos significativo, por lo cual todos los bits restantes son rotados o movidos hacia la izquierda. La instruccin ROR funciona igual, slo que sta trabaja hacia la derecha. 13.- RCL y RCR permiten la rotacin de los bits de una localidad de memoria o registro, considerando tambin el contenido de la bandera de acarreo. En el caso de RCL, el bit ms significativo pasa hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo pasa al bit menos significativo y finalmente los bits restantes son rotados hacia la izquierda. La instruccin RCR funciona igual, pero aplica su rotacin hacia la derecha. 14.- SHL y SHR se utilizan para desplazar los bits de un registro o localidad de memoria, sin considerar el signo de su contenido. 15.- SAL y SAR se utilizan para desplazar los bits de un registro o localidad de memoria, considerando su contenido como una cantidad con signo. 16.- MOVS: Mueve un byte o palabra desde una localidad de memoria a otra. 17.- LODS : Carga desde la memoria un byte en AL o una palabra en AX. 18.- CMPS : Compara localidades de memoria de un byte o palabra. 19.- CLD, la cual permite establecer que el sentido en el que las cadenas sern procesadas ser de izquierda a derecha. 20.- ADD Destino, Fuente.
Registros del Lenguaje Ensamblador
Registros de propsito general AH AL AX (Acumulador) BH BL BX (Base) CH CL CX (Contador) DH DL DX (Datos) Registros ndices SI DI BP SP SourceIndex (ndice origen) DestinationIndex (ndice Destino) Base Pointer (Puntero Base) StackPointer (Puntero de Pila)
Registro de Bandera - - - - O D I T S Z - A - P - C Flags (Banderas) Registros de Segmentos CodeSegment (Segmento CS de Cdigo) Data Segment (Segmento DS de Datos) ExtraSegment (Segmento ES Extra) StackSegment (Segmento SS de Pila) Registro apuntador de instrucciones IP InstructionPointer Modelo de los registros Los registros del i8086 e i8088 se basaron en el diseo del Intel 8080 y el Intel 8085, y de hecho son compatibles a nivel de ensamblador con el i8080. El conjunto de registros tambin es similar al del i8080, pero ampliados a 16 bits. Tanto el i8086 como el i8088 tienen cuatro registros de propsito general de 16 bits, que tambin pueden ser accedidos como ocho registros de 8 bits, y tienen cuatro registros ndice de 16 bits (incluyendo el puntero de pila). Los registros de datos se usan a veces de forma implcita por las instrucciones, haciendo ms difcil la organizacin de los registros para emplearlos con valores temporales.
Los registros del procesador, se dedican a almacenar posiciones de memoria ya que el acceso a los registros es mucho mas rpido que los accesos a memoria, y se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son direccionables por medio de un nombre.
Registros de Propsito General
Los registros de propsito general AX, BX, CX, y DX son los caballos de fuerza del sistema. Son nicos en el sentido de que se les puede direccionar como una palabra o como un byte. Aparte de este uso general de los registros mencionados, existen instrucciones que utilizan solo uno, como se indica a continuacin: y Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. y Registro BX: El registro BX es el registro base, y es el nico registro de propsito general que puede ser un ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos. y Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits. y Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este registro el nmero de puerto de entrada/salida, y en las operaciones de multiplicacin y divisin de 16 bits se utiliza junto con el acumulador AX.
Registros ndice
Los registros SI y DI disponibles para direccionamiento indexado y para sumas y restas. y Registro SI: El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. El SI est asociado con el registro DS. y Registro DI: El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. El DI est asociado con el registro ES.
Registros Apuntadores
Los registros SP (apuntador de pila) y BP (apuntador base) estn asociados con el registro SS y permiten al sistema acceder a datos en el segmento de la pila. y Registro SP: El apuntador de pila de 16 bits est asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que est siendo procesada en la pila. El sistema maneja de manera automtica este registro. y Registro BP: El apuntador base de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va la pila.
Registros de Banderas
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la mquina y el resultado del procesamiento. Muchas instrucciones aritmticas y de comparacin cambian el estado de las banderas y apoyndose de ellas determinan la accin subsecuente. Veamos como se reparten y que bits son los que sirven para indicar el estado actual de la mquina tal y como hemos comentado anteriormente Debemos tener en cuenta que esta tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas y que por convenio los bits de un registro se ordenan de derecha a izquierda, es decir, la posicin 0 la encontraremos a la derecha y la posicin 15 a la izquierda. - - - - OF DF IF TF SF ZF - AF - PF - CF Los bits de las banderas son las siguientes:
y
y y y y
y y
OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera. DF (direccin): Controla la seleccin de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres (1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD. IF (interrupcin): Indica que una interrupcin externa sea procesada o ignorada (1=habilita la interrupcin; 0=deshabilita la interrupcin). El estado de la bandera IF se controla con las instrucciones STI y CLI. TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso) SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo). ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero). AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmtica especializada. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL despus de una suma o resta BCD. PF (paridad): Indica paridad par o impar en una operacin de datos de ocho bits (0=paridad impar; 1=paridad par). CF (acarreo): Contiene el acarreo del bit de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del ltimo bit en una operacin de desplazamiento o de rotacin.
Registros de Segmento
Definen reas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas reas pueden solaparse total o parcialmente. No es posible acceder a una posicin de memoria no definida por algn segmento: si es preciso, habr de moverse alguno.
y
Registro CS: El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, ms un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Para propsitos de programacin normal, no se necesita referenciar el registro CS. Registro DS: La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. Esta direccin, ms un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un byte especfico en el segmento de datos. Registro SS: El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento para manejar el direccionamiento de memoria. El registro ES est asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada.
Registro Apuntador de Instrucciones
El registro IP de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se est ejecutando actualmente en la memoria.
Intel Microprocesador
8085
Procesador Intel 8085AH
Produccin Fabricante(s) Frecuencia de reloj
Mediados de 1970s Intel 3.07Mhz a 5 Mhz
Conjunto de instrucciones pre x86 Zcalo(s) 40 pin DIP
Conclusin
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 computadoras legible por un programador. Desde luego, el lenguaje ensamblador desarroll una mala reputacin en todos los 90's. Avances en tecnologa del compilador, mejoras en el desempeo del CPU, y la "crisis del software" todos conspiraron para sugerir que el ensamblador era un lenguaje "muerto", que no se necesitaba ms. Como el lenguaje ensamblador era un poco ms difcil de aprender que los lenguajes tradicionales de alto nivel, los estudiantes (y los maestros!) gustosamente abrazaron estos nuevos lenguajes rpidamente asimilables, abandonando el difcil-de-aprender ensamblador, en favor de lenguajes de cada vez ms alto nivel. El aprendizaje del lenguaje ensamblador an permanece como la mejor manera de aprender la organizacin fundamental de la mquina. Esos programadores quienes se esfuerzan en dominar el lenguaje ensamblador, llegan a ser de los mejores programadores de lenguaje de alto nivel en estos tiempos. Su habilidad
para elegir instrucciones apropiadas de cdigo eficiente del ms alto nivel, su habilidad para leer cdigo de alto nivel desensamblado, y detectar errores nefastos en un sistema, y su conocimiento de cmo opera todo el sistema en su totalidad, los eleva a ellos a estaturas legendarias entre sus compaeros de trabajo. Estos son los programadores a los que todos van cuando tienen preguntas de cmo implementar algo, Estos son los ingenieros que se ganan el respeto de todos a su alrededor. Esos son los programadores que todos tratan de emular. Estos son los programadores que escriben un gran cdigo
Bibliografa
1. Abel, Peter. Lenguaje Ensamblador y Programacin para PC IBM y Compatibles. Tercera Edicin. Prentice-Hall Hispanoamericana, S. A. Mxico. 1996. 2. Borland Int. Turbo Assembler International.Scotts Valley, CA. 1988. Reference Guide.Version 1.Borland
3. Brey, Barry B. Los microprocesadores Intel: 8086/8088, 80186, 80286, 80386 y 80486. Arquitectura, programacin e interfaces. Tercera Edicin. Prentice-Hall Hispanoamericana, S. A. Mxico. 1995. 4. Godfrey, J. Terry. Lenguaje Ensamblador para Microcomputadoras IBM para Principiantes y Avanzados. Prentice-Hall Hispanoamericana, S. A. Mxico. 1991.