Sunteți pe pagina 1din 19

UNIVERSIDAD NACIONAL DE INGENIERA FACULTAD DE ELECTROTCNIA Y COMPUTACIN

Integrantes: Carlos Fernando Aguirre Salvatierra. Luis Carlos Poveda Valdivia. Materia: Maquinas Computadoras I. 2010-32540. 2010-32766.

Profesor: Ing. Alejandro Aguirre. Tema: Principios bsicos de Lenguaje Ensamblador en microprocesador Intel 8086

Grupo: 4T1-EO. Fecha: 23 de mayo de 2013

Abstract Assembly language is a low level language of programming for computers, microprocessors, and others programmable circuits. Is the closest to machine language. The speed, efficiency, size and flexibility are important features that make it advantageous to program in assembly language. Here are define the main commands that are used for programming in this language. Fundamento El lenguaje ensamblador ha sido una herramienta de desarrollo altamente criticada pero a la vez alabada, sus crticos arguyen la complejidad de programacin y su injerencia en el tiempo de desarrollo de sistemas, mientras sus seguidores se desbordan en elogios en su flexibilidad as como el sentido de podero y conocimiento que este ofrece a aquellos que se atreven a aventurar ms all de un lenguaje de programacin. El lenguaje ensamblador es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, micro controladores y otros circuitos integrados adems constituye una representacin ms directa al cdigo maquina especfico para cada arquitectura legible para el programador tambin permite una optimizacin que no permiten otros lenguajes de programacin por lo cual es un programa de gran utilidad para un ingeniero electrnico y en la materia de mquinas computadoras toma un relevancia an ms importante ya que permite programas muy rpidos , pequeos, adems de un gran control que otros programas no ofrecen basados especficamente en la gama de arquitectura x86. Sin duda el lenguaje ensamblador toma una relevancia importante sobre todo en la ingeniera electrnica, un de las razones por las cuales hemos decidido para este seminario bibliogrfico abordar los principios bsicos del lenguaje ensamblador. Lo que esencialmente nos hizo seleccionarlo sobre otros temas de estudio es que poseamos debilidades en la comprensin de su funcionamiento sabiendo que nos va a ser de utilidad en un futuro decidimos aprovechar dicho trabajo para recopilar informacin y comprender mejor el funcionamiento y estructuracin de este con el propsito de

obtener de una manera ms eficiente los conocimientos bsicos para poder programar en dicho lenguaje. Bsicamente en este seminario bibliogrfico se aborda una visin general de los conceptos bsicos, estructura y funcionamiento de dicho programa.

Objetivos

Objetivo general

Identificar los principios bsicos de la programacin en lenguaje ensamblador.

Objetivos especficos Mencionar las ventajas y las desventajas de programar en lenguaje ensamblador. Explicar los principales comandos de instruccin utilizados en lenguaje ensamblador para el microprocesador Intel 8086. Mostrar ejemplos bsicos de las instrucciones principales utilizadas en lenguaje ensamblador para el microprocesador Intel 8086.

Desarrollo El lenguaje ensamblador es la primera abstraccin del lenguaje de mquina, consiste en tomar los cdigos que la Unidad Central de Procesamiento (CPU) interpreta como instrucciones, llamados opcodes, y asociarlos con palabras claves que faciliten su uso por parte del programador. Un lenguaje ensamblador es especfico para cada tipo o familia de microprocesador o circuito programable, La velocidad, la eficiencia de tamao y la flexibilidad son caractersticas importantes que hacen ventajoso programar en lenguaje ensamblador, ya que a diferencia de los lenguajes de alto nivel, el lenguaje ensamblador resulta ms fcil de interpretar por la mquina, ya que la compilacin requiere menor nivel de actuacin por parte del compilador, siendo las instrucciones en lenguaje ensamblador ms directas y especficas, adems el lenguaje ensamblador permite ejecutar diversas instrucciones relacionadas al hardware durante la ejecucin del programa, como puede ser el cambio de resolucin del monitor, cosa que resulta complicado en otros lenguajes. Otras caractersticas relevantes del lenguaje ensamblador: Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador. Cdigo fuente ms extenso que otros lenguajes ya que suele usar un mayor nmero de instrucciones. El tiempo de programacin suele ser ms extenso por la complejidad de las lneas de cdigo y por consiguiente un cdigo fuente ms extenso. Es difcilmente portable.

Operandos del lenguaje ensamblador Los operandos son los sectores que son llamados o utilizados al programar en lenguaje ensamblador, y son indispensables para el funcionamiento del programa. Registro: Estos operandos se refieren directamente al contenido de los registros de la CPU. Las asignaciones de registro varan segn el modelo de microprocesador que se desee programar. Memoria: Estos se refieren a los datos en la memoria. La direccin de los datos puede ser una constante fija en la instruccin o puede ser calculada usando los valores de los registros. Las direcciones son siempre desplazamientos relativos al comienzo de un segmento. Immediato: Estos son valores fijos que estn listados en la instruccin en s misma. Ellos son almacenados en el segmento de cdigo. Implicado: Estos operandos no son mostrados explcitamente. Por ejemplo, la instruccin de incremento (inc) aade uno a un registro o a memoria. El uno est implcito. Ensamblado La transformacin del lenguaje ensamblador en cdigo mquina la realiza un programa ensamblador. El ensamblador suele ser comparado con lo que se denomina compilador en lenguaje de alto nivel. 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. Diferentes programas ensambladores pueden tener variaciones en la sintaxis del lenguaje ensamblador segn el microprocesador que se est programando.

Diseo del lenguaje El lenguaje ensamblador tiene una estructura bsica que permite la secuencia lgica con la que es programado. Son 3 tipos de estructuras o sentencias de instruccin que son usadas para definir las operaciones de un programa: Mnemnicos de opcode: Generalmente, una mnemnico es un nombre simblico para una sola instruccin en lenguaje de mquina ejecutable (un opcode), y hay por lo menos un mnemnico de opcode definido para cada instruccin en lenguaje de mquina. Secciones de datos: son instrucciones usadas para definir elementos de datos para manejar datos y variables. Definen el tipo de dato, la longitud y la alineacin de los datos. Estas instrucciones tambin pueden definir si los datos estn disponibles para programas exteriores (programas ensamblados separadamente) o solamente para el programa en el cual la seccin de datos est definida. Directivas de ensamblador: las directivas del ensamblador son instrucciones que son ejecutadas por un ensamblador en el tiempo de ensamblado, no por un CPU en el tiempo de ejecucin. Instrucciones en ensamblador Una instruccin en ensamblador est conformada por un mximo de cuatro columnas de cdigos o sentencias: etiqueta, operacin, operando y comentario. Columna 1: Etiquetas Las etiquetas se rigen por las siguientes normas: Debe situarse en la primera columna. Debe contener nicamente caracteres alfanumricos.

El mximo de caracteres es de 31. Columna 2: Operacin En esta columna se situarn las instrucciones. El campo del cdigo de operacin es el nico que nunca puede estar vaco; ste siempre contiene una instruccin o una directiva del ensamblador. Columna 3: Operandos El campo de operandos o de direccin puede contener una direccin o un dato, o puede estar en blanco. Normanmente contendr registros o literales con los que se operar (f, l o k , b y w). Columna 4: Comentario El campo del comentario o de etiquetas es opcional. Aqu se situar cualquier comentario personalizado que deseemos. Estos son tiles para saber qu hace un programa sin tener que descifrar el cdigo entero. El compilador (ensamblador) ignorar todo texto ms all del carcter punto y coma ";", seguido del punto y coma ; se escribe el comentario. Microprocesador Intel 8086 Como ya se mencion, el lenguaje ensamblador es especfico para cada

microprocesador, entre los ms utilizados est el Intel 8086. Caractersticas bsicas La CPU original 8086 suministra 4 registros de 16 bits de propsito general AX, BX, CX y DX. Cada uno de esos registros puede ser descompuesto en los registros AL y AH. El registro AH contiene los 8 bits ms significativos de AX y AL contiene los 8 bits menos significativos de AX. A menudo AH y AL son usados como registros independientes de 8 bits, sin embargo, cambiando el valor de AX cambiar AH y AL y viceversa. Los registros

de propsito general son usados en muchos movimientos de datos e instrucciones aritmticas. Hay dos registros de ndice de 16 bits SI y DI. Ellos son a menudo usados como apuntadores, pero pueden ser usados para muchos de los mismos propsitos como los registros generales. Sin embargo, ellos no se pueden descomponer en registros de 8 bits. Los registros de 16 bits BP y SP son usados para sealar a los datos en la pila y son llamados Apuntador Base (Base Pointer) y apuntador a la pila (Stack Pointer), respectivamente. Los registros de 16 bits CS (code segment), DS (data segment), SS (stack segment) y ES (extra segment) son registros de segmento. Ellos sealan qu memoria es usada por diferentes partes de un programa. El registro IP Apuntador a la instruccin (instruction pointer) es usado con el registro CS para obtener la direccin de la siguiente instruccin a ser ejecutada por la CPU. Normalmente cuando se ejecuta una instruccin IP avanza hasta sealar a la siguiente instruccin en memoria. Instrucciones y operaciones bsicas El lenguaje ensamblador cuenta con distintas instrucciones y operaciones bsicas que son utilizadas por el programador para obtener resultados especficos. A continuacin se muestran las instrucciones seguidas de su correcto orden lgico de escritura. Instrucciones y movimiento de datos MOV destino, origen (mover) Sirve para mover un dato desde el origen hasta un destino. Primero se escribe el destino y luego el origen. Destino y origen tienen que tener el mismo tamao XCHG destino, origen (intercambiar)

Intercambia destino con origen; no se puede usar con registros de segmento. Esta instruccin encuentra su utilidad en aquellas instrucciones que tienen asociados registros especficos. Operaciones aritmticas ADD destino, origen (sumar) Suma origen y destino, guardando el resultado en destino. Si al sumar los dos ltimos bits hay un acarreo, el bit de carry se pone a 1 (y si no, a 0). ADC destino,origen (sumar con acarreo) Suma origen, destino y el bit de carry, guardando el resultado en destino. Sirve entre otras cosas para sumar nmeros de ms de 16 bits arrastrando el bit de acarreo de una suma a otra. Sumar con ADC puede generar a su vez un acarreo, con lo que tericamente podramos sumar nmeros enteros de cualquier tamao, propagando el acarreo de una suma a otra. INC destino (incrementar) Incrementa el operando destino en 1. Puede ser un operando de tamao "byte" o superior, tanto un registro como una posicin de memoria. Esta instruccin no modifica el bit de acarreo. SUB destino, origen (resta) Resta a destino lo que haya en origen. SBB destino, origen (restar con llevada) Resta a destino lo que haya en origen. Si el flag (registro temporal) es igual a 1, resta uno ms. Anloga a ADC. DEC destino (decrementar) Igual que INC, pero que resta 1 en vez de sumarlo. IMUL origen (multiplicacin entera con signo) Multiplica origen, entero con signo (en complemento a dos), de longitud byte o Word (comando para especificar una posicin de memoria), por AL o AX respectivamente. Si origen es un byte el resultado se guarda en AX; si es tamao MUL origen (multiplicacin entera sin signo)

Como IMUL, salvo que multiplica enteros sin signo. Slo admite la forma con un nico operando. IDIV origen (divisin entera con signo) Divide nmeros con signo. Calcula el cociente y el resto de dividir AX entre el operando (tamao byte). Si el operando es de 16 bits lo que divide es el par DX-AX. El resto en AH o DX. DIV origen (divisin entera sin signo) Similar a IDIV, pero se utiliza para nmeros sin signo. Ejemplo de una operacin aritmtica: ; Obtener J = 34+F MOV AX, F ; guarda F en AX ADD AX, 34 ; suma 34 a AX MOV J, AX ; J toma el valor de AX Instrucciones lgicas AND (destino,origen) Relaciona dos bits. El resultado es verdadero si y slo si los dos operandos son verdaderos. OR (destino,origen) Condicin que compara si dos o ms bits son verdaderos. XOR (destino,origen) El resultado es verdadero si uno y slo uno de los operandos es verdadero. NOT (destino) Se realiza sobre un bit y consiste en invertir su valor. NOT 0 = 1, NOT 1 = 0 se lee: "no falso = verdadero", "no verdadero = falso" respectivamente.

Instrucciones de comparacin CMP (comparar): operando1, operando2 . Funciona exactamente igual que SUB solamente que sin almacenar el resultado (efecta la operacin operando1-operando2, alterando los flags en consecuencia). Se utiliza para efectuar un salto condicional. CMP reg, reg ; compara registro y registro

CMP reg, mem ; compara registro y memoria TEST (comprobar): operando1, operando2. Funcional igual al comando CMP, pero con la operacin AND en lugar de SUB. Ejemplo: TEST reg, reg ; prueba registro y registro

TEST reg, mem ; prueba registro y memoria Instrucciones de Desplazamiento, Rotacin y adeudos Bsicamente permiten multiplicar y dividir por potencias de 2. Todas las instrucciones de desplazamiento y rotaciones tienen en comn: El ltimo valor desplazado se copia en el flag de acarreo. Si el nmero de desplazamientos es mayor que uno, se debe colocar el valor en el registro CL. Desplazar un nmero a la izquierda de un bit equivale a multiplicar por dos, y desplazarlo a la derecha dividir entre dos.

SHL, SAL desplazar a la izquierda (desplazamiento aritmtico) SHR desplazar a la derecha SAR desplazamiento aritmtico a la derecha ROL rotacin a la izquierda ROR rotacin a la derecha RCL rotacin con acarreo a la izquierda RCR rotacin con acarreo a la derecha CLC borrar acarreo STC poner acarreo a 1 Instrucciones de salto JMP (saltar) Salta a la direccin indicada por una etiqueta. Este salto puede ser etiqueta) o en memoria. Los saltos cortos y cercanos tienen lugar dentro del mismo segmento (intrasegmento). Los saltos lejanos se realizan entre segmentos separados (intersegmentos). El salto se utiliza para ejecutar una instruccin cargada en IP (la zona de memoria que contiene la siguiente instruccin a ejecutar), es decir, se genera un nuevo offset. Sintaxis: JMP label Saltos condicionales Se realiza un salto si existe una condicional previa. Los saltos condicionales siempre son cortos. Sintaxis: <instruccin condicional> JC label corto, lejano o

cercano, y la direccin puede venir dada en valor inmediato (generalmente mediante una

Etiquetas Hacen referencia a una funcin u operacin aritmtica dentro del programa. Es comn utilizarlas junto al comando JMP para saltar hasta la etiqueta. Ejemplo: JMP SUMA ;salta hasta la etiqueta SUMA SUMA: Add AX, BX ;suma AX con BX y el resultado lo guarda en AX Instruccin LOOP Un LOOP (ciclo), es la repeticin de un proceso un cierto nmero de veces hasta que alguna condicin se cumpla. En estos ciclos se utilizan los saltos "condicionales" basados en el estado de las banderas. En la Tabla I se describen las instrucciones y las condiciones existentes para una instruccin de tipo LOOP. Instruccin LOOP LOOPE LOOPNZ LOOPZ Operacin y salto

condicional Decremento CX y salta a la etiqueta s CX0 Decremento CX y salta a la etiqueta s CX0 Y Z1 Decremento CX y salta a la etiqueta s CX0 y Z=0 Decremento CX y salta a la

etiqueta s CX=0 y Z=1 JCXZ Salta a la etiqueta s CX=0 Tabla I: Instruccin LOOP Ejemplo: MOV CX, 100 COMIENZO:

LOOP COMIENZO ;este bucle se repite 100 veces Instrucciones de pila La pila (stack) 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. En la pila se guarda la direccin del programa antes de ejecutar una funcin, para que al finalizar la ejecucin de la misma, el programa retorne a su estado anterior a la ejecucin de la funcin. 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. Las dos instrucciones bsicas del segmento de pila son PUSH y POP. Las instrucciones PUSH y POP almacenan y retiran datos desde el LIFO (last-in, first-out) memoria de pila. La directiva .STACK define el tamao de la pila. Por ejemplo: .STACK 200h ;define una pila de 200h (512) bytes de longitud. PUSH La instruccin PUSH siempre transfiere dos bytes de datos a la pila.

La fuente de los datos pueden ser cualquier registro interno, datos inmediatos, cualquier registro de segmento, o algunos de los dos bytes de memoria de datos. Hay tambin una instruccin PUSHA que copia los contenidos para el juego de registro interno, excepto los segmentos de registros a la pila. La instruccin PUSHA (Push all) copia los registros a la pila en el siguiente orden: AX, CX, DX, BX, SP, BP. SI y DI. El valor para SP pushed a la pila es cualquiera que fue antes ejecutado por la instruccin PUSHA. La instruccin PUSHF (push flags) copia el contenido del registro de bandera a la pila. POP La instruccion POP es la operacin inversa de la instruccin PUSH. La instruccin POP remueve los datos desde la pila en el objetivo del registro, segmento de registro, o una locacin de memoria. La instruccin POPF (pop flags) remueve un nmero de 16bits desde la pila y los sitios en el registro de bandera. La instruccin POPA (pop all) remueve los datos de 16 bits desde la pila y sitios en los siguientes registros en el orden mostrado: DI, SI, BP, SP, BX, DX, CX, y AX. Este orden es el inverso del que usa la instruccin PUSHA. Bsicamente la instruccin PUSH incrementa y la instruccin POP decrementa el registro SP en 2 bytes respectivamente. SS nos indica dnde est ubicado el segmento de pila. Ejemplos: PUSH AX ;enva a la pila AX POP DS ;carga el primer elemento de la pila en DS

Software para programar en lenguaje ensamblador Existen software que facilitan la sintaxis en lenguaje ensamblador, adems que permiten compilar y correr el cdigo y posteriormente tener la opcin de generar un archivo ejecutable. Entre los existentes en la red, se recomienda el emu8086, sin duda uno de los mejores software para una experiencia completa con ensamblador. En la Imagen 1 se muestra una captura de pantalla de la ventana principal del emu8086.

Conclusiones Al finalizar este seminario bibliogrfico reconocemos y contamos con los principios bsicos para programar en lenguaje ensamblador. Identificamos las ventajas del lenguaje ensamblador sobre otros lenguajes de programacin como la velocidad, la flexibilidad, la eficiencia de tamao, entre otros, que hacen de este lenguaje uno de los ms eficientes entre los existentes.

Bibliografa Barry B. Brey. (1997). The Intel Microprocessors. Upper Saddle River, New Jersey: Custom Editorial Productions, INC. Ensamblador 8086/88. (2010). [En lnea]. Espaa: Universidad de Sevilla. Departamento de arquitectura y tecnologa de computadores. Disponible en: http://www.cs.buap.mx/~mgonzalez/asm_mododir2.pdf Conceptos bsicos de lenguaje ensamblador 8086 (2007). [En lnea]. Mxico: Instituto Tecnolgico Superior de Calkin del Estado de Campeche (ITESCAM). Disponible en: http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r86194.PDF The ASM Book. (2011). Keith Kanios. [En lnea]. USA. Disponible en: http://www.asmcommunity.net/

S-ar putea să vă placă și