Você está na página 1de 36

ACTIVIDAD: 10 TRABAJO FINAL

CARLOS OSIRIS MNDEZ MANUEL EDUARDO LPEZ ROBERTO ALEXANDER BEZ HUGO ALFONSO GMEZ JUAN FERNANDO BERNAL

TUTOR OSCAR IVN VALDERRAMA

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA (UNAD)

SISTEMAS EMBEBIDOS 208006_7

INGENIERA DE TELECOMUNICACIONES COLOMBIA 09/11/13

INTRODUCCIN El contenido de ste trabajo, es la investigacin de la programacin en c y en assembler de sistemas embebidos, por lo que se desarrollo un pequeo manual el cul no es fiel a como se debera programar cada unos de los posibles casos que se pueden desarrollar en estos sistemas pero si va enfocado a que sea en modo de consulta ya que pues muchas veces se puede saber que es un microcontrolador o un microprocesador, que son las entradas y las salidas, que es un pwm, como se puede usar un I2C, pero tal vez no se tiene un manual que contenga para poder consultar dudas a modo de aclarar dudas mas no de dar la solucin contextual del problema en si. El documento presenta un manual en assembler para microcontroladores y para microprocesadores que en particular es muy eficiente a la hora de usar recursos del microcontrolador o microprocesador pero que al final es muy tedioso. Es por esto que tambin se presenta un manual para la programacin en c de los microcontrolador y microprocesadore, que al final aunque si gastan ms recursos del micro pero que es ms amable a la hora de usar el lenguaje y programar el micro.

Fase 1. Assembler Realice un pequeo manual de cmo programar microcontroladores y microprocesadores en Assembler. Describa los diferentes ensambladores y macroensambladores La informacin que hace que el hardware de la computadora realice una determinada actividad se llama instruccin (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. 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. Por ejemplo una 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 algo. 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. Formatos de instrucciones. En el lenguaje ensamblador existen tres tipos de instrucciones: instrucciones con dos operando, instrucciones con un operando e instrucciones con operando implcitos. El campo nemnico es ocupado por cualquiera de las instrucciones que forman parte del conjunto de la familia x86. Ejemplo: Mov (Transferir) En los dos campos siguientes Reg significa que el operando puede ser un registro, Mem indica que puede ser una direccin de memoria y dato indica que el operando puede ser un dato colocado directamente por el programador. Los campos dos y tres se encuentran entre parntesis cuadrados para indicar que son opcionales en algunas instrucciones. Los siguientes son algunos ejemplos de instrucciones de las tres formas: Instruccin con dos operando: Mov AX,BX En este caso Mov es el nemnico, AX es el operando 1 y BX es el operando 2. Instruccin con un operando: INC BX En este caso INC es el nemnico y BX es el nico operando. Instrucciones con operando implcitos o sin operando: PUSHF Donde PUSHF es el nemnico y nico elemento de la instruccin.

Formato de un programa El cdigo fuente de un programa en lenguaje ensamblador se constituye: .COMMENT ************************************************************************* PRIMERO.ASM Ejemplo de un programa en lenguaje ensamblador. ************************************************************************* .MODEL TINY; Modelo de memoria para el programa .DATA; Declaracin de variables Mensaje db 'Mi primer programa',10,13,'$' .CODE; Cuerpo del programa INICIO:; Punto de entrada al programa mov dx,OFFSET Mensaje ; Direccin de la cadena de texto mov ah,9 ; Funcin para imprimir cadenas int 21h ; Llamada al sistema operativo mov ah,4ch ; Funcin para terminar un programa int 21h ; Llamada al sistema operativo END INICIO; Fin del bloque principal del programa END Un programa en lenguaje ensamblador se compone de las siguientes partes: rea de comentarios Definicin del modelo de memoria rea de datos Cuerpo del programa El rea de comentarios sirve para incluir comentarios acerca del programa que se est elaborando, comienza con la directiva .COMMENT y el comentario es colocado entre dos caracteres *. La definicin del modelo de memoria es la parte donde se indica que tipo de cdigo se va generar (16 o 32 bits). En este trabajo slo se escribirn programas ejecutables .COM, por lo que siempre se usa la directiva .MODEL TINY. El rea de datos es el lugar donde deben ser declaradas las constantes y variables del programa. Las variables son declaradas despus de la directiva .DATA y las constantes despus de .CONST. En el cuerpo del programa es donde se colocan las instrucciones en lenguaje ensamblador que se encargarn de realizar las tareas deseadas. El cuerpo del programa comienza con la directiva .CODE y termina con la directiva END. Esta parte corresponde al Begin y End de un programa en lenguaje Pascal. Adicionalmente se debe indicar un punto de entrada al programa. El punto de entrada se indica por medio de una etiqueta antes de la primera instruccin real del programa. En el ejemplo anterior el punto de entrada es INICIO: y el punto final de las instrucciones se indica por medio de la instruccin END INICIO. Cuando se requiere comentar las instrucciones de un programa, se debe colocar un punto y coma (;) y as el ensamblador interpreta todo lo que sigue como un

comentario de una sola lnea. Si requiere comentarios de ms de una lnea puede usar la directiva .COMMENT. Proceso de ensamble y ligado de un programa. Este proceso es muy sencillo y se describe a continuacin: Si est trabajando en MS-DOS siga estos pasos: 1) Escriba el programa, tal y como aparece en el listado anterior, usando su editor de texto preferido. 2) Gurdelo con algn nombre y la extensin .ASM. 3) En el smbolo del MS-DOS escriba lo siguiente C:\PASS32\BIN\>PASS32 Nombre.ASM t <Enter> 4) Ejecute el programa .COM que se genera. Para probar el programa abra una ventana de MS-DOS y seleccione el programa haciendo doble clic sobre el icono. Directivas de ensamble (Seudo instrucciones) Pass32 cuenta con algunas palabras reservadas que cumplen tareas especiales para facilitar la programacin en ensamblador, estas palabras son llamadas seudo instrucciones o directivas de ensamble. La siguiente es una lista de las directivas de ensamble ms utilizadas en Pass32: DB Reserva un byte en memoria DW Reserva una palabra (Word) en memoria o 2 bytes DD Reserva una palabra doble (Double Word) .EQU Se utiliza para reemplazar smbolos por valores PROC-ENDP Se utilizan para declarar procedimientos en los programas .MACRO-ENDM Se utilizan para declarar macros DUP Sirve para inicializar cadenas de caracteres o arreglos numricos .INCLUDE Se utiliza para obtener datos o subrutinas de otros programas .EXTERN Declara un smbolo como externo, trabaja en conjunto con .INCLUDE .PUBLIC Declara un smbolo como pblico.

Instrucciones de transferencia de datos: Los microprocesadores 80x86 cuentan con algunas instrucciones bsicas de transferencia de informacin de acuerdo con los modos de direccionamiento. Las instrucciones ms representativas del grupo de transferencia son: MOV.- Transfiere (copia) contenidos. Su formato es MOV OP1,OP2. Esta instruccin copia el contenido de OP2 en OP1. Ejemplo: Mov AX,0 ; AX=0LEA.- Carga un registro con la direccin de desplazamiento de alguna variable en memoria. Su formato es LEA REG,Variable. Ejemplo: .Data Mensaje db Hola,$ .Code ------

-----Lea DX,Mensaje ;DS:DX->Mensaje LDS.- Inicializa el registro DS LES.- Inicializa el registro ES Nota: 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. XCHG.- Intercambia contenidos. Su formato es XCHG OP1,OP2. El resultado es que el contenido de OP2 se pasa a OP1 y el de OP1 se pasa a OP2. Ejemplo: XCHG AX,BX ; AX->BX, BX->AX El siguiente programa muestra la forma de usar las instrucciones de transferencia, adems de algunas directivas de ensamble. Inicialmente, el programa define un arreglo de 10 elementos llamado Array1, y lo inicializa con ceros. Despus, utilizando la instruccin Mov, copia el nmero 10 en el registro AX y el 5 en el registro BX. Por medio de la instruccin Lea, el registro DX es cargado con la direccin de memoria donde comienza Array1 y finalmente intercambia el contenido de los registros AX y BX por medio de la instruccin XCHG. Instrucciones aritmticas. Existen 8 instrucciones aritmticas bsicas: ADD (Suma), SUB (Resta), MUL (Multiplicacin sin signo), DIV (Divisin sin signo), IMUL (Multiplicacin con signo), IDIV (Divisin con signo), INC (Incremento unitario) y DEC (Decremento unitario). Las instrucciones ADD y SUB permiten realizar sumas y restas sencillas y tienen el siguiente formato: ADD Destino, Fuente SUB Destino, Fuente En las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino, el cual puede ser un registro o una variable. Las instrucciones INC y DEC permiten incrementar los contenidos de los registros y de las variables almacenadas en memoria. Ejemplos: INC AX ;AX=AX+1 INC VAR1 ;VAR1=VAR1+1 DEC AX ;AX=AX-1 DEC VAR1 ;VAR1=VAR1-1

Multiplicacin

Existen dos instrucciones para la multiplicacin, estas son: MUL e IMUL. MUL permite realizar operaciones de multiplicacin entre operando sin signo e IMUL permite realizar operaciones entre operando con signo. La multiplicacin se puede efectuar entre bytes (8 bits), palabras (16 bits) o dobles palabras (32 bits). Solamente los microprocesadores 386 y posteriores pueden realizar multiplicaciones entre operandos de 32 bits. El producto de una multiplicacin siempre tiene el doble de ancho. Si se multiplican dos nmeros de 8 bits, el resultado ser de 16 bits; si se multiplican dos nmeros de 16 bits, el producto ser de 32 bits y, finalmente, si se multiplican cantidades de 32 bits, el resultado ser un nmero de 64 bits. En la multiplicacin de 8 bits, con o sin signo, el multiplicando est siempre en el registro AL. El multiplicador puede ser cualquier registro de 8 bits o cualquier variable. El resultado de la multiplicacin se almacena en el registro AX, que es de doble ancho que los operandos involucrados. Ejemplos vlidos de operaciones de multiplicacin son los siguientes: MOV BL,5 ;Cargar datos MOV AL,10 ; MUL BL ; AX=AL*BL MOV AL,10 MUL nmero1 ; AX=AL*nmero1 ; donde nmero1 es una variable de tipo byte.

En la multiplicacin de 16 bits, el multiplicando debe ser colocado en el registro AX y el resultado siempre aparece en el par de registros DX:AX. El registro DX contiene los 16 bits ms significativos de producto, mientras que el registro AX contiene los 16 bits menos significativos del resultado.Ejemplos:MOV AX,400 ;Cargar datos MOV CX,100 ; MUL CX ; DX:AX=AX*CX MOV AX,400 ; MUL numero2 ; DX:AX=AX*numero2 Division. Las instrucciones para divisin permiten realizar divisiones de 8, 16 o 32 bits (esta ltima slo est disponible en los microprocesadores 386 y posteriores). Los operandos pueden ser nmeros con signo (IDIV) o nmeros sin signo (DIV). El dividendo siempre tiene el doble de ancho que el operando divisor. Esto significa que en una divisin de 8 bits se divide un nmero de 16 bits entre uno de 8; en una de 16 bits se divide un nmero de 32 bits entre uno de 16, etc. En la divisin de 8 bits, el dividendo es almacenado en el registro AX y el divisor puede ser cualquier registro de 8 bits o cualquier variable declarada de tipo byte. Despus de la divisin, el cociente es cargado en el registro AL y el residuo en el registro AH. Ejemplo de divisin sin signo: MOV AX,10

MOV BL,5 DIV BL Ejemplo de divisin con signo: MOV AL,-10 MOV BL,2 CBW IDIV BL En este ltimo ejemplo, el dividendo es cargado en el registro AL, pero debido a las reglas del microprocesador el dividendo debe ser de 16 bits; para lograr esto, se utiliza una instruccin especial. La instruccin CBW (convertir byte a palabra) permite convertir un nmero de 8 bits con signo en AL en un nmero de 16 bits con signo en AX. En la divisin de 16 bits se siguen las mismas reglas que en la divisin de 8 bits, slo que en sta, el dividendo se encuentra en los registro DX:AX. Despus de la divisin el cociente es almacenado en el registro AX y el residuo en el registro DX. En el caso de la divisin con signo, existe una instruccin que permite convertir un nmero con signo de 16 bits en AX en un nmero con signo de 32 bits en DX:AX. Instrucciones para la manipulacin de banderas. El registro de banderas tiene diferentes funciones en cada uno de sus bits, algunos de estos bits (banderas) pueden ser controlados por instrucciones directas de bajo nivel; sin embargo, se debe tener en cuenta que estas banderas estn ntimamente ligadas con funciones internas del microprocesador, por ejemplo la lnea INTR (interrupcin por hardware), acarreos, etc., y que al manipularlas incorrectamente podemos llegar al extremo de bloquear la computadora. Es por esto que se recomienda que slo programadores experimentados modifiquen dichas banderas. En esta seccin se explicarn algunas de las instrucciones ms comunes y sus aplicaciones, pero no se desarrollarn programas por razones de seguridad. Control de interrupcin. La terminal INTR del microprocesador puede ser activada o desactivada directamente por los programas por medio de las instrucciones STI y CLI. STI carga un 1 en IF, con lo cual INTR queda habilitada; por otro lado, CLI carga un cero en IF, con lo cual las interrupciones externas o por hardware quedan deshabilitadas. Control de la bandera de acarreo La bandera de acarreo, CF, es la encargada de indicar cuando ha ocurrido un acarreo o prstamo en operaciones de suma o resta, tambin indica errores en la ejecucin de procedimientos. Existen tres instrucciones bsicas para su manipulacin: STC (activar acarreo), CLC (desactivar acarreo) y CMC (Complementar acarreo). Control de la bandera de direccin

La bandera de direccin, DF, es utilizada para establecer el sentido en el que las cadenas de datos sern procesadas por los programas. Un cero en DF indica procesamiento de izquierda a derecha, mientras que un uno indica procesamiento de derecha a izquierda. Para controlar esta bandera, existen dos instrucciones, CLD (limpiar bandera) y STD (establecer bandera). STD coloca un uno y CLD coloca un cero. Estas instrucciones sern aplicadas ms adelante en el captulo 3, en el cual se desarrollan varios programas para mostrar su uso. Instrucciones de comparacin y prueba Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su funcionamiento es similar al de la instruccin SUB (restar), slo que no modifica el operando de destino, solamente modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF). Por ejemplo: CMP AX,1235 Esta instruccin compara si el valor almacenado en el registro AX es igual que el valor 1235 en decimal. Por otro lado, la instruccin TEST realiza la operacin AND de los operandos especificados sin que el resultado se almacene en algn registro, modificando nicamente ciertas banderas. Su aplicacin ms comn es la de probar si algn bit es cero. Ejemplo: Test AL,1 Esta instruccin prueba si el bit menos significativo de AL es 1 y Test AL,128 prueba si el bit ms significativo de AL es 1. Por lo general estas instrucciones van seguidas de alguna de las instrucciones de salto, las cuales se estudian en otra seccin. Instrucciones de salto En los lenguajes de alto nivel como Pascal y C, los programadores pueden controlar el flujo de los programas por medio de instrucciones condicionales compuestas; por ejemplo, en Pascal el siguiente conjunto de instrucciones permite tomar una decisin sobre el flujo del programa: IF A=5 then write(Error...); else A:=A+1; En contraste, el lenguaje ensamblador no proporciona tales mecanismos. Este tipo de decisiones se realizan por medio de una serie de instrucciones que van teniendo un significado consecutivo; es decir, el efecto de la instruccin siguiente depende del resultado anterior. El lenguaje ensamblador proporciona un conjunto de instrucciones conocidas como instrucciones de salto. Estas instrucciones son utilizadas en conjunto con instrucciones de comparacin y prueba para determinar el flujo del programa.

Existen dos tipos de instrucciones de salto: las instrucciones de salto condicional y las de salto incondicional. Las instrucciones de salto condicional, revisan si ha ocurrido alguna situacin para poder transferir el control del programa a otra seccin, por ejemplo: CMP AX,0 JE otro ........... .......... otro: .......... .......... End En este ejemplo, la instruccin JE (Salta si es igual) revisa si la prueba implcita en la instruccin anterior result positiva, es decir, si la comparacin de AX con 0 fue cierta. En caso de que AX sea igual a 0, JE transfiere el control del programa a las instrucciones que se encuentran despus de la etiqueta "otro". En caso contrario ejecuta las instrucciones siguientes a JE. Por otro lado, las instrucciones de salto incondicional (slo existe una) permiten cambiar el flujo del programa sin verificar si se cumpli alguna condicin. Ejemplo: Mov AX,10 Jmp otro ........ ........ otro: ........ ........ En este ejemplo, inmediatamente despus de cargar el registro AX con el valor de 10, se transfiere el control del programa a la instruccin que sigue despus de la etiqueta "otro". La siguiente es una lista de las instrucciones de salto condicional y su descripcin: JA o JNBE: Salta si est arriba o salta si no est por debajo o si no es igual (jump if above or jump if not below or equal). El salto se efecta si la bandera de CF=0 o si la bandera ZF=0. JAE o JNB: Salta si est arriba o es igual o salta si no est por debajo (jump if above or equal or jump if not below). El salto se efecta si CF=0. JB o JNAE: Salta si est por debajo o salta si no est por arriba o es igual (jump if below or jump if not above or equal). El salto se efecta si CF=1. JBE o JNA: Salta si est por debajo o es igual o salta si no est por arriba (jump if below or equal or jump if not above). El salto se efecta si CF=1 o ZF=1. 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.

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. JG o JNLE: Salta si es mayor o salta si no es menor o igual (jump if greater or jump if not less or equal). El salto se efecta si ZF=0 u OF=SF. 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.JL o JNGE: Salta si es menor o salta si no es mayor o igual (jump if less or jump if not greater or equal). El salto se efecta si SF<>OF JLE o JNG: Salta si es menor o igual o salta si no es mayor (jump if less or equal or jump if not greater). El salto se efecta si ZF=1 o SF<>OF. JC: Salta si hay acarreo (jump if carry). El salto se efecta si CF=1. JNC: Salta si no hay acarreo (jump if no carry). El salto se efecta si CF=0. JNO: Salta si no hay desbordamiento (jump if no overflow). El salto se efecta si OF=0. JNP o JPO : Salta si no hay paridad o salta si la paridad es non (Jump if no parity or jump if parity odd). El salto se efecta si PF=0. JNS: Salta si no hay signo (jump if not sign). El salto se efecta si SF=0. JO: Salta si hay sobreflujo (jump if overflow). El salto se efecta si OF=1. 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. JS: Salta si hay signo (jump if sign). El salto se efecta si SF=1. Instrucciones para ciclos El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la programacin de ciclos finitos, la instruccin LOOP. Esta instruccin trabaja en forma conjunta con el registro contador CX. El formato general de esta instruccin es: Mov CX,No_Veces Etiqueta: ------Loop Etiqueta La instruccin LOOP ejecuta las instrucciones que se encuentran entre la Etiqueta: y Loop Etiqueta el nmero de veces que indique el campo No Veces. Por ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro AX, esto lo repite 10 veces. Mov CX,10 ;10 veces Otro: Inc AX ; AX=AX+1 Loop Otro La instruccin Loop decrementa el registro CX en cada iteracin y se detiene cuando CX es igual a cero.

Instrucciones lgicas El microprocesador 8086 cuenta con un grupo de instrucciones lgicas que operan a nivel de bit, estas instrucciones son: AND, OR, XOR y NOT. Las instrucciones que se enlistan antes requieren dos operandos, a excepcin de la operacin NOT que slo requiere uno. En la figura se puede observar que para la operacin AND, si los dos operandos son 1, el resultado ser 1, en cualquier otra situacin ser 0. La operacin OR establece el resultado a 1 si cualquiera de los dos operandos es 1, de lo contrario el resultado ser 0. La instruccin XOR coloca en 0 el resultado si los operandos son iguales, de lo contrario establece 1. Finalmente, la instruccin NOT cambia de estado todos los bits del operando, los unos por ceros y los ceros por unos. La principal aplicacin de estas instrucciones es el enmascaramiento de informacin. La operacin AND nos permite poner a cero cualquier bit de un dato; la operacin OR nos permite poner a uno cualquier bit de un dato y la operacin XOR permite borrar el contenido de algn registro o localidad de memoria, as como para negar algn bit. Instrucciones de rotacin y desplazamiento El microprocesador cuenta con un conjunto de instrucciones que permiten la manipulacin de las posiciones individuales de los bits dentro de un registro o localidad de memoria, estas instrucciones se encuentran divididas en dos grupos: instrucciones de rotacin e instrucciones de desplazamiento (tambin conocidas como instrucciones para corrimientos). Las instrucciones para rotacin son cuatro y nos permiten mover de forma cclica los bits que forman parte de un registro o localidad de memoria, estas instrucciones son ROL, ROR, RCL , RCR. 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. Las instrucciones 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. Para ilustrar el uso de estas instrucciones, tomaremos como ejemplo la instruccin ROL (Rotacin a la izquierda). Las instrucciones de rotacin y desplazamiento tienen diferentes formas de utilizarse dependiendo del modelo del microprocesador, los siguientes ejemplos muestran estas formas:

En el microprocesador 8086 existen dos formas, con contador implcito y con contador explcito. La forma con contador implcito se utiliza para realizar una sola rotacin a la vez y tiene el siguiente formato: ROL AX,1 ;Rotar AX un bit La forma con contador explcito se utiliza para realizar rotaciones n veces sobre un registro o localidad de memoria: MOV CL,3 ;Nmero de rotaciones ROL AX,CL ; Rotar AX 3 veces En el microprocesador 80386 y superiores existe una variante de contador implcito, la cual nos permite establecer el contador directamente como un operando, su forma es la siguiente: ROL AX,3 ; Rotar AX 3 veces, slo en 80386 y posteriores En el caso de las instrucciones de desplazamiento, tambin existen cuatro: SHL, SHR, SAL, SAR. SHL y SHR se utilizan para desplazar los bits de un registro o localidad de memoria, sin considerar el signo de su contenido. SAL y SAR se utilizan para desplazar los bits de un registro o localidad de memoria, considerando su contenido como una cantidad con signo. Las instrucciones SHL y SHR funcionan de forma idntica, slo que en sentidos opuestos. La instruccin SHL inserta un 0 en la posicin del bit menos significativo y desplaza todos los dems bits una posicin hacia la izquierda, colocando el bit ms significativo en la bandera de acarreo. La instruccin SHR inserta un 0 en la posicin ms significativa, desplaza todos los bits una posicin hacia la derecha y finalmente coloca el bit menos significativo en la bandera de acarreo. Algunos ejemplos de su uso son los siguientes: SHL AX,1 ; Desplaza el contenido de AX una posicin a la izquierda MOV CX,3 ; Nmero de veces SHR AX,CL ; Desplaza AX 3 veces hacia la derecha SHL BX,4 ; Desplaza BX 4 veces hacia la izquierda, slo en 386 y posteriores Las dos instrucciones restantes SAL y SAR son muy parecidas a las instrucciones SHL y SHR, slo que estas dos instrucciones consideran el contenido de los registros como cantidades con signo, por lo cual el bit en la posicin ms significativa del dato (bit de signo) se conserva sin cambio. Instrucciones para la pila La pila es un grupo de localidades de memoria que se reservan con la finalidad de proporcionar un espacio para el almacenamiento temporal de informacin. La pila de los programas es del tipo LIFO (Last In First Out, ltimo en entrar, Primero en salir). Para controlar la pila el microprocesador cuenta con dos instrucciones bsicas: Push (Meter) y Pop (sacar).

El formato de estas instrucciones es el siguiente: Push operando Pop operando Cuando se ejecuta la instruccin Push, el contenido del operando se almacena en la ltima posicin de la pila. Por ejemplo, si AX se carga previamente con el valor 5, una instruccin Push AX almacenara el valor 5 en la ltima posicin de la pila. Por otro lado la instruccin Pop saca el ltimo dato almacenado en la pila y lo coloca en el operando. Siguiendo el ejemplo anterior, la instruccin Pop BX obtendra el nmero 5 y lo almacenara en el registro BX. Manipulacin de cadenas (Strings) Definicin de string En el lenguaje ensamblador el tipo de dato cadena (string) no est definido, pero para fines de programacin, una cadena es definida como un conjunto de localidades de memoria consecutivas que se reservan bajo el nombre de una variable. Almacenamiento en memoria De acuerdo con la definicin anterior, las siguientes lneas en ensamblador declaran cadenas: .DATA Cadena_ASCII db Cadena,13,10,$ Cadena_Enteros dw 5 Dup (0) Las dos lneas anteriores estn declarando variables de tipo cadena. En el primer caso, Cadena_ASCII reserva un total de 9 bytes de memoria (1 byte = 1 Carcter ASCII) incluyendo el carcter $ que indica fin de cadena. En el segundo caso, Cadena_Enteros reserva espacio para almacenar 3 cantidades enteras o lo que es lo mismo 6 bytes de memoria (1 entero = 2 bytes), todas inicializadas con cero. La diferencia en los casos anteriores radica en el tamao del dato que compone la cadena, 1 byte para cadenas de caracteres y 2 o ms bytes para cadenas de datos numricos. Instrucciones para el manejo de strings. El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas: MOVS: Mueve un byte o palabra desde una localidad de memoria a otra. LODS : Carga desde la memoria un byte en AL o una palabra en AX. STOS : Almacena el contenido del registro AL o AX en la memoria. CMPS : Compara localidades de memoria de un byte o palabra. SCAS : Compara el contenido de AL o AX con el contenido de alguna localidad de memoria.

Las instrucciones para cadenas trabajan en conjunto con la instruccin CLD, la cual permite establecer que el sentido en el que las cadenas sern procesadas ser de izquierda a derecha. Otra instruccin importante es el prefijo de repeticin REP, el cual permite que una instruccin para manejo de cadenas pueda ser repetida un nmero determinado de veces. Los registros ndices juegan un papel importante en el procesamiento de cadenas de datos, el par de registros CS: SI indican la direccin de la cadena original que ser procesada, y el par ES: DI contienen la direccin donde las cadenas pueden ser almacenadas. Programacin de e/s Definicin de interrupcin Una interrupcin es un estado en el cual el microprocesador detiene la ejecucin de un programa para atender una peticin especial solicitada por el propio programa o por un dispositivo fsico conectado al microprocesador externamente. Las interrupciones fueron creadas para facilitar al programador el acceso a los diferentes dispositivos de la computadora (puertos de comunicaciones, terminales, impresoras, etc.). Ejecucin de una interrupcin Cuando durante la ejecucin de un programa se produce una interrupcin, el microprocesador realiza los siguientes pasos: 1. Detiene la ejecucin del programa 2. Almacena los registros CS, IP y Banderas en la pila 3. Modifica el CS y el IP para que apunten a la direccin donde se encuentra la rutina de interrupcin. 4. Ejecuta las instrucciones de la rutina de interrupcin. 5. Restablece usando la instruccin RETI los valores originales de los registros CS, IP y Banderas. Continua con la ejecucin del programa en el punto donde fue interrumpido. Las rutinas se almacenan en la memoria de la computadora cada vez que sta es inicializada, a esto se le conoce como vector de interrupciones. Tipos de interrupciones El microprocesador puede atender dos tipos de interrupciones: interrupciones por software e interrupciones por hardware. Las interrupciones por software son llamadas desde los programas y son proporcionadas por el sistema operativo (MS-DOS). Existen dos tipos de estas: las interrupciones del DOS y las interrupciones del BIOS (Basic Input Output System o Sistema Bsico de Entrada/Salida). Estas interrupciones son invocadas con la instruccin INT del ensamblador. Por otro lado, las interrupciones por Hardware son proporcionadas por el propio microprocesador y tambin existen dos tipos: interrupciones por hardware internas y las interrupciones por hardware externas. Las interrupciones internas son invocadas por el microprocesador cuando se produce alguna operacin incorrecta,

como por ejemplo, un intento de dividir por cero o una transferencia de datos entre registros de diferentes longitudes. Las interrupciones externas son provocadas por los dispositivos perifricos conectados al microprocesador. Para lograr esto, a cada dispositivo perifrico se le asigna una lnea fsica de interrupcin que lo comunica con el microprocesador por medio de un circuito integrado auxiliar, el cual se conoce como controlador programable de interrupciones (PIC). Las computadoras basadas en el microprocesador 8086/8088 cuentan solamente con un PIC, con lo cual pueden proporcionar hasta 8 lneas de interrupcin (IRQ), las cuales son llamadas IRQ0 a IRQ7, por otro lado, las computadoras basadas en el microprocesador 80286 y posteriores cuentan con dos chips controladores, con los cuales pueden proporcionar hasta un mximo de 16 lneas IRQ, las cuales son llamadas IRQ0 a IRQ15. La siguiente es una lista de las interrupciones por software disponibles por el sistema operativo. Interrupciones del BIOS Manejo de dispositivos perifricos INT 10H Manejo de la pantalla. INT 13H Manejo de unidades de disco. INT 14H Manejo de los puertos de comunicaciones (RS232). INT 15H Manejo de cinta magntica. INT 16H Manejo del teclado. INT 17H Manejo de la impresora. Manejo del estado del equipo INT 11H Servicios de la lista de elementos de la computadora. INT 12H Servicios para el clculo del tamao de la memoria. Servicios de fecha y hora INT 1AH Manejo del reloj. Impresin de pantalla INT 5H Impresin de la informacin contenida en la pantalla. Servicios especiales INT 18H Activacin del lenguaje Interprete Basic de la ROM. INT 19H Activacin de la rutina de arranque de la computadora. Interrupciones del DOS INT 20H Termina la ejecucin de un programa. INT 22H Direccin de terminacin. Guarda la direccin donde se transfiere el control cuando termina la ejecucin del programa.

INT 23H Direccin de la interrupcin que se ejecuta cuando se presiona Ctrl-Break. INT 24H Manejo de errores crticos. INT 25H Lectura directa de sectores del disco. INT 26H Escritura directa de sectores del disco. INT 27H Terminar un programa y devolver el control al DOS sin borrar el programa de la memoria. INT 21H Esta interrupcin proporciona una gran cantidad de funciones, las cuales deben ser invocadas en conjunto con el registro AH. A continuacin se mostrarn algunos programas que utilizan llamadas a diferentes interrupciones por software tanto del BIOS como del DOS. Macros Una de las principales desventajas de la programacin en lenguaje ensamblador es la repeticin constante de ciertos grupos de instrucciones. Por ejemplo el siguiente conjunto de instrucciones nos permite imprimir una variable de tipo cadena en la pantalla: Lea DX,Cadena ;Direccionar la cadena Mov AH,09h ;Usar la funcin 09h para imprimir cadenas Int 21h ;llamada a la interrupcin 21h del DOS Si necesitamos que en nuestro programa se muestren mensajes constantemente, es obvio que debemos duplicar este conjunto de instrucciones por cada mensaje que se desea enviar a pantalla. El principal problema que esto nos ocasiona es que el tamao de nuestro programa crece considerablemente, y mientras ms grande sea el programa, ms difcil ser encontrar la causa de algn error cuando ste ocurra. La mejor solucin en estos casos es el uso de las MACROS. Una macro es un conjunto de instrucciones que se agrupan bajo un nombre descriptivo (macroinstruccin) y que slo es necesario declarar una vez (macrodefinicin). Una vez que la macro ha sido declarada, slo es necesario indicar su nombre en el cuerpo del programa y el ensamblador se encargara de reemplazar la macroinstruccin por las instrucciones de la macro (expansin de la macro). El formato general de una macro es el siguiente: .MACRO Nombre [(parametro1, parametro2, etc.)] INSTRUCCIONES ENDM Nuevamente, lo que se encuentra entre parntesis cuadrados es opcional. De acuerdo con esto, la macro para imprimir cadenas quedara de la siguiente forma: .MACRO Imprime_Cad(Cadena)

Lea DX,Cadena Mov Ah,09h Int 21h ENDM

Parmetros y etiquetas Dentro de las propiedades ms importantes de las macros se deben destacar la posibilidad de utilizar parmetros y etiquetas. Los parmetros permiten que una misma macro pueda ser usada bajo diferentes condiciones, por ejemplo, se puede crear una macro para posicionar el cursor en diferentes coordenadas de la pantalla e indicar sus coordenadas por medio de parmetros. La siguiente macro nos muestra esta propiedad: .MACRO gotoxy (x,y) xor bh,bh ;Seleccionar pgina cero de video mov dl,x ;Columna mov dh,y ;Rengln mov ah,02h ;Funcin 02h para posicionar cursor int 10h ;llamada a la int 10h del BIOS ENDM Tambin existen situaciones en las que los parmetros no son necesarios, es por esta razn que los parmetros son opcionales en la declaracin de la macro. Esta macro realiza una pausa en el programa hasta que una tecla es; presionada. .MACRO tecla mov ah,10h int 16h ENDM Por otro lado, las etiquetas tambin son tiles dentro de las macros. Suponga que se desea crear una macro que imprima una cadena un nmero n de veces, esta macro podra ser declarada de la siguiente forma: .MACRO Imprime_nCad (Cadena, Cuantos) Mov CX,Cuantos ;Iniciar Contador Lea DX,Cadena ;Direccionar la cadena que se va a imprimir Mov Ah,09h ;Usar la funcin 09h Otra: ;Etiqueta interna Int 21h ;Imprimir la Cadena n veces Loop Otra ;Siguiente Impresin ENDM

Assembler para microcontroladores. El cdigo fuente Est compuesto por una sucesin de lneas de texto. Cada lnea puede estructurarse en hasta cuatro campos o columnas separadas por uno o ms espacios o tabulaciones entre s. Campo de etiquetas. Expresiones alfanumricas escogidas por el usuario para identificar una determinada lnea. Todas las etiquetas tienen asignado el valor de la posicin de memoria en la que se encuentra el cdigo al que acompaan. Campo de cdigo. Corresponde al nemnico de una instruccin, de una directiva o de una llamada a macro. Campo de operandos y datos. Contiene los operandos que precisa el nemnico utilizado. Segn el cdigo, puede haber dos, uno o ningn operando. Campo de comentarios. Dentro de una lnea, todo lo que se encuentre a continuacin de un punto y coma (;) ser ignorado por el programa ensamblador y considerado como comentario.

Campo de cdigo Puede corresponder ese cdigo a: Instrucciones: son aquellos nemnicos que son convertidos por el ensamblador en cdigo mquina que puede ejecutar el ncleo del microcontrolador. En la gama media (PIC16xxx) cada nemnico se convierte en una palabra en la memoria de programa Directivas. Pseudoinstrucciones que controlan el proceso de ensamblado del programa, pero no son parte del cdigo. Son indicaciones al programa ensamblador de cmo tiene que generar el cdigo mquina Macros: Secuencia de nemnicos que pueden insertarse en el cdigo fuente del ensamblador de una manera abreviada mediante una simple llamada.

Campo de Operandos y Datos El ensamblador MPASM (distribuido por Microchip) soporta los sistemas de numeracin decimal, hexadecimal, octal, binario y ASCII. Los nemnicos que tengan una constante como operando debern incluirla respetando la sintaxis que se indica a continuacin. TIPO SINTAXIS Decimal D<valor> d<valor> .<valor> Hexadecimal H<valor> h<valor> 0x<valor> <valor>H <valor>h Octal O<valor> o<valor> Binario B<valor> b<valor> ASCII A<carcter> a<carcter> <carcter> Cadena <cadena> Las constantes hexadecimales que empiecen por una letra deben ir precedidas de un cero para no confundirlas con una etiqueta. Ejemplo: movlw 0F7h. El juego de instrucciones: SEGN SU FUNCIONALIDAD. Instrucciones de CARGA NEMNICO DESCRIPCIN FLAGS AFECTADOS clrf f 00 (f) Z clrw 00 (W) Z movf f,d (f) (destino) Z movlw k k (W) Ninguno movwf f (W) (f) Ninguno Instrucciones de BIT

NEMNICO bcf f,b bsf f,b

DESCRIPCIN Pone a 0 el bit b del registro f Pone a 1 el bit b del registro f

FLAGS AFECTADOS Ninguno Ninguno

NEMNICO addlw k addwf f,d decf f,d incf f,d sublw k subwf f,d

Instrucciones ARITMTICAS DESCRIPCIN FLAGS AFECTADOS (W) + k (W) C DC Z (W) + (f) (destino) C DC Z (f) - 1 (destino) Z (f) + 1 (destino) Z K - (W) (W) C DC Z (f) - (W) (destino) C DC - Z Instrucciones LGICAS DESCRIPCIN (W) AND k (W) (W) AND (f) (destino) (/f) (destino) (W) OR k (W) (W) OR (f) (destino) Rota (f) a izquierda (destino) Rota (f) a derecha (destino) Intercambia nibbles (f) (destino) (W) XOR k (W) (W) XOR (f) (destino) Instrucciones de SALTO DESCRIPCIN Salta si el bit b de f es 0 Salta si el bit b de f es 1 (f) - 1 (destino) y salta si es 0 (f) + 1 (destino) y salta si es 0 Salta a la direccin k

NEMNICO andlw k andwf f,d comf f,d iorlw k iorwf f,d rlf f,d rrf f,d swap f,d xorlw k xorwf f,d

FLAGS AFECTADOS Z Z Z Z Z C C Ninguno Z Z

NEMNICO btfsc f,b btfss f,b decfsz f,d incfsz f,d goto k

FLAGS AFECTADOS Ninguno Ninguno Ninguno Ninguno Ninguno

NEMNICO call k retfie

Instrucciones de manejo de SUBRUTINAS DESCRIPCIN FLAGS AFECTADOS Llamada a subrutina Ninguno Retorno de una interrupcin Ninguno

retlw k return

Retorno con un literal en (W) Retorno de una subrutina

Ninguno Ninguno

NEMNICO clrwdt nop sleep

Instrucciones ESPECIALES DESCRIPCIN FLAGS AFECTADOS Borra Timer del Watchdog /TO - /PD No operacin Ninguno Entra en modo de bajo consumo /TO - /PD

Directivas de MPASM Controlan el proceso de ensamblado del programa, pero no son parte del mismo (tambin se conocen como pseudoinstrucciones). Hay ms de 50 directivas reconocidas por MPASM, las ms usadas: END Es la nica directiva obligatoria. Indica al ensamblador dnde debe detener el proceso. Debe colocarse en la ltima lnea del programa. <etiqueta> EQU <expresin> El valor <expresin> es asignado a <etiqueta>. Estas directivas se suelen colocar al principio del programa y habitualmente se usan para definir constantes y direcciones de memoria. [<etiqueta>] ORG <expresin> Las instrucciones del cdigo fuente que siguen a esta directiva se ensamblan a partir de la posicin indicada por <expresin>. CONFIG <expresin> [& <expresin> & ... & <expresin>] Permite indicar la configuracin elegida para la grabacin del PIC. Ejemplo: __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC LIST P=16F877 Indica el tipo de microcontrolador utilizado. INCLUDE <p16F877.inc> o INCLUDE p16F877.inc Incluye en el programa un fichero donde se definen las etiquetas con las que se nombra a los diferentes registros y sus bits. Este fichero se encuentra en el directorio principal del programa ensamblador. Puede usarse esta directiva para incluir cualquier otro fichero (Ojo! El fichero de inclusin no puede terminar con una directiva END). DT <expr1> [, <expr2>, ... , <exprN>] Genera una instruccin retlw por cada expresin que incluya la directiva. Si la expresin es del tipo cadena, se generar una instruccin retlw por cada carcter de la misma. Macroensambladores. Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto. Puede variar la complejidad de los

mismos, dependiendo de las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes. Microensambladores. Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones, es decir, que el intrprete de las mismas interpretaba de igual forma un determinado cdigo de operacin. El programa que indica al intrprete de instrucciones de la UCP cmo debe actuar se denomina microprograma. El programa que ayuda a realizar ste microprograma se llama micro ensamblador. Existen procesadores que permiten la modificacin de sus microprogramas, para lo cual se utilizan micro ensambladores.

Fase 2. Software Code Warrior Descargue e instale el software Code Warrior y realice la prctica planteada en la leccin 10 de la unidad 2. Desarrollo de software para sistemas embebidos, captulo 5. Prcticas bsicas y aplicaciones. Anexe informe y capturas de pantalla del proceso realizado.

Primero descargar el archivo y luego se ejecuta, y se siguen las instrucciones.

DESARROLLO DE LA PRCTICA DE LA LECCIN 10 UNIDAD 2

Se inicia el programa siguiendo la ruta: Inicio -> Todos los Programas -> Freescale Code Warrior -> CW Development Studio For Microcontrollers V6.3

Para crear un proyecto nuevo

Se escoge Create New Project y se despliega la siguiente pantalla

se selecciona la opcin HC08, donde se selecciona la opcin JK/JL Family y se marca la opcin MC68HC908JL3

Se escoge el tipo de conexin que es Full Chip Simulation y va al siguiente paso, en este se desmarcan todas las opciones excepto Absolute assembly

Se da clic en finalizar.

Se crean los siguientes archivos junto con el proyecto:

El cdigo en assembler se digita en el archivo main.asm de la carpeta Sources debajo de la instruccin main Loop:

Este es el cdigo:

LOOP0 LOOP1

LDA INCA CMP BNE LDA LDHX LDHX LDHX LDX

#$FF

; A = $FF ;A=A+1

#3 LOOP1 #$FF #$1234 #$4321 #0 #$FF

; A = 3? ; Salto a LOOP1 si A!=3. ; A = $FF = 255 ; H:X = $1234 ; H:X = $4321 ; H:X = $0000 ; X = $FF ;X=X+1

LOOP2

INCX CPX BNE JMP #4 LOOP2 LOOP0

; X = 4? ; Salto a LOOP1 si A!=4. ; Salto a LOOP0 (Se Repite el Ciclo)

Se procede a la compilacin del proyecto:

1 2

Los botones marcados con los nmeros corresponden a 1 = Make y 2 = Debug, se presionan estos botones y si no existe ningn error en el cdigo se despliega una ventana para la revisin y simulacin del cdigo fuente

FASE 3. PROGRAMACIN EN C PROGRAMACIN EN LENGUAJE C ESTRUCTURA BSICA DE UN PROGRAMA EN LENGUAJE C Un programa en C consiste en una o varias Funciones. Basado en est afirmaciones debe existir un mecanismo que garantiza que todos los programas inicialicen de una misma forma, por lo tanto hay una funcin que debemos llamar Sintaxis: main() //primera funcin a ser ejecutada { // inico del cuerpo de la funcin <comandos>; // otras funciones pueden ser adicionadas } // fin del cuerpo de la funcin

Vale nombrar tambin que existen algunas reglas bsicas que deben ser seguidas en relacin a los conceptos de lenguaje. Toda funcin de C debe ser iniciada por una llave ( { ) y cerrada por otra llave ( } ). Los parntesis y las llaves son elementos obligatorios de una funcin. Todas las instrucciones deben estar dentro de dos llaves. Las instrucciones en C siempre encerradas por un punto y coma (;). Vale nombrar tambin que las llaves sirven para separar un bloque de instrucciones.

COMENTARIOS Existen dos maneras de comentar en C. Podemos usar // que sirve para comentar una linea o usar /* y */ para comentar un bloque de comentarios. Ejemplo: /* MCElectronics-Fabricante de Herramientas para PIC Este es un ejemplo de comentario. */ Char contador ; // contador de uso general En el ejemplo insertamos un comentario usando /* y */ para las lineas.En el segundo ejemplo usamos para comentar // para comentar la declaracin de una variable contador.

IDENTIFICADORES Un identificador es una palabra usada para declarar una constante o una variable. Algunas reglas para los identificadores: Un identificador no puede tener smbolos grficos, con excepcin de un (_). No puede tener acentuacin grfica ( acento grave, acento agudo, tilde etc). Un identificador no puede iniciar nunca con un nmero. No puede ser una palabra reservada pues ella son slo uso estricto del compilador. PALABRAS RESERVADAS DEL LENGUAJE C

Auto Default Flota Register Struct Volatile

break do for return swich while

case double goto short typedef

char else if signed union

const enum int sizeof unsigned

continue extern long static void

Otras palabras pueden ser reservadas, como nombres de directivas especificas de cada compilador. REPRESENTACIN NUMRICA Y ALFANUMRICA Las constantes pueden ser representadas conforme a los siguientes ejemplos: TABLA - REPRESENTACIN NUMRICA EN LENGUAJE C Representacin numrica Decimal Hexadecimal Binario Octal Caracteres String

Ejemplo 250 0x55 0b10100011 73 & teste

BIBLIOGRAFA http://www.lawebdelprogramador.com/cursos/Ensamblador/6964Lenguaje_de_bajo_nivel._Ensamblador.html [consulta 05 de noviembre de 2013]. ATE-Universidad de Oviedo (2013) Programacin en Ensamblador. Disponible en URL: http://www.unioviedo.es/ate/alberto/TEMA3Ensamblador.pdf [consulta 05 de noviembre de 2013].

Armando Portela Duarte (2008) Sistemas Universidad Nacional Abierta y a Distancia.

Embebidos.

Sogamoso:

Você também pode gostar