practico4_2014v1

5
UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales Profesorado en Tecnología Electrónica PROCESADORES I ENSAMBLADOR Y SIMULADOR EL LENGUAJE ENSAMBLADOR Programar un uP directamente en lenguaje de máquina resulta, como ya se ha visto, una tarea difícil y propensa al error. El escalón inmediatamente superior lo ocupa el lenguaje assembler, que en esencia es semejante al lenguaje de máquina pero con una serie de mejoras que lo hacen más práctico. El assembler emplea básicamente las mismas instrucciones del uP, solo que el programador no emplea su correspondencia en hexadecimal, sino los nemotécnicos de dichas instrucciones, lo cual resulta más cómodo de manejar ya que se parece un poco al lenguaje humano al que estamos acostumbrados. También está concebido para no tener que recurrir al hexadecimal, o al menos hacerlo lo menos posible por ejemplo en el caso de ingresar un dato o una dirección efectiva. Además de las instrucciones del uP se agregan otras que son propias del lenguaje. Estas nuevas instrucciones conocidas como pseudoinstrucciones o directivas del ensamblador y sirven por ejemplo para indicar la dirección donde ha de ubicarse el programa, el final del mismo, para reservar espacios de memoria, etc. En este lenguaje se usan extensamente las etiquetas (o labels) tanto para efectuar los saltos o bifurcaciones típicas de todo programa como para señalar una dirección en la memoria de datos. También es posible asignar a una etiqueta un valor constante al principio del programa. EJEMPLO DE UN PROGRAMA EN ASSEMBLER (para el uP 8085) Cuando escribimos un programa en assembler lo organizamos en una serie de columnas que nos permiten hacer mas clara su lectura y corrección (para esto nos valemos de la tecla TAB): Columna 1: reservada para etiquetas que señalan por ejemplo una dirección o una subrutina. Columna 2: instrucciones o pseudoinstrucciones. Columna 3: parámetros de instrucción (cuando se requieran). Columna 4: opcionalmente y precedido siempre de ‘;’ (punto y coma) puede ir un comentario Una vez escrito el programa es almacenado normalmente en disco como un archivo de texto (con extensión *.ASM). A este archivo lo denominamos código fuente. El paso siguiente consiste en llevar el código fuente al ensamblador que es la herramienta que lo traducirá al código de maquina. En el ejemplo aparece la etiqueta ‘loop’ que señala a la instrucción ‘add b’. Es el ensamblador el encargado de determinar su valor en el proceso de ensamblado y en función de la dirección de origen de nuestro programa, determinada por la directiva ‘.org’ (en este caso ‘loop’ tomará el valor h’2003). Todo lo escrito después del carácter ‘;’ (punto y coma) es ignorado por el ensamblador, lo cual nos permite incluir comentarios. Cuando programamos en assembler es aconsejable incluir todos los comentarios que creamos necesarios para poder recordar o clarificar el funcionamiento del programa. ; Calcula la suma de los numeros del ; 1 al 17. El resultado queda en A: .org h'2000 mvi b,17 ; inicialmente B := 17 xra a ; hace A := 0 loop: add b ; A := A+B dcr b jnz loop ; salta si B no es cero hlt .end

Upload: bryan-barrezueta

Post on 17-Feb-2016

216 views

Category:

Documents


2 download

DESCRIPTION

Guia de desarrollo

TRANSCRIPT

Page 1: practico4_2014v1

UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales Profesorado en Tecnología Electrónica

 

PROCESADORES I  

ENSAMBLADOR Y SIMULADOR   EL LENGUAJE ENSAMBLADOR 

Programar un uP directamente en lenguaje de máquina resulta, como ya se ha visto, una tarea difícil y propensa al error.  

El  escalón  inmediatamente  superior  lo ocupa  el  lenguaje  assembler, que  en  esencia  es  semejante  al  lenguaje de máquina pero con una serie de mejoras que lo hacen más práctico. 

El  assembler  emplea  básicamente  las  mismas  instrucciones  del  uP,  solo  que  el  programador  no  emplea  su correspondencia en hexadecimal, sino  los nemotécnicos de dichas  instrucciones,  lo cual resulta más cómodo de manejar ya que  se  parece  un  poco  al  lenguaje  humano  al  que  estamos  acostumbrados.  También  está  concebido  para  no  tener  que recurrir al hexadecimal, o al menos hacerlo  lo menos posible por ejemplo en el  caso de  ingresar un dato o una dirección efectiva. 

Además  de  las  instrucciones  del  uP  se  agregan  otras  que  son  propias  del  lenguaje.  Estas  nuevas  instrucciones conocidas como pseudoinstrucciones o directivas del ensamblador y sirven por ejemplo para indicar la dirección donde ha de ubicarse el programa, el final del mismo, para reservar espacios de memoria, etc. 

En este  lenguaje se usan extensamente  las etiquetas (o  labels) tanto para efectuar  los saltos o bifurcaciones típicas de todo programa como para señalar una dirección en  la memoria de datos. También es posible asignar a una etiqueta un valor constante al principio del programa.  EJEMPLO DE UN PROGRAMA EN ASSEMBLER (para el uP 8085)                 

Cuando escribimos un programa en assembler lo organizamos en una serie de columnas que nos permiten hacer mas clara su lectura y corrección (para esto nos valemos de la tecla TAB): 

Columna 1:  reservada para etiquetas que señalan por ejemplo una dirección o una subrutina. 

Columna 2:  instrucciones o pseudoinstrucciones. 

Columna 3:  parámetros de instrucción (cuando se requieran). 

Columna 4:  opcionalmente y precedido siempre de ‘;’ (punto y coma) puede ir un comentario 

  Una vez escrito el programa es almacenado normalmente en disco como un archivo de texto (con extensión *.ASM). A este archivo lo denominamos código fuente.   El paso siguiente consiste en llevar el código fuente al ensamblador que es la herramienta que lo traducirá al código de maquina. 

En  el ejemplo  aparece  la etiqueta  ‘loop’ que  señala a  la  instrucción  ‘add   b’. Es el ensamblador el encargado de determinar su valor en el proceso de ensamblado y en función de la dirección de origen de nuestro programa, determinada por la directiva ‘.org’ (en este caso ‘loop’ tomará el valor h’2003).  

Todo  lo escrito después del carácter  ‘;’ (punto y coma) es  ignorado por el ensamblador,  lo cual nos permite  incluir comentarios. Cuando programamos en assembler es aconsejable incluir todos los comentarios que creamos necesarios para poder recordar o clarificar el funcionamiento del programa. 

; Calcula la suma de los numeros del ; 1 al 17. El resultado queda en A: .org h'2000 mvi b,17 ; inicialmente B := 17 xra a ; hace A := 0 loop: add b ; A := A+B dcr b jnz loop ; salta si B no es cero hlt .end

Page 2: practico4_2014v1

UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales Profesorado en Tecnología Electrónica

 EL ESQUEMA DE TRABAJO                   Código de máquina en hexa                             (archivo PEPE.OBJ)           Código fuente                         (archivo PEPE.ASM)                      Reporte del ensamblador                            (archivo PEPE.LST)  

A partir del archivo original (PEPE.ASM) o código fuente que uno escribió, después del proceso de ensamblado se generan dos nuevos archivos:  

El  primero  (PEPE.LST)  es  un  archivo  de  texto  donde  el  ensamblador  genera,  a modo  de  reporte,  un  listado  de  cada instrucción del código fuente acompañada de la dirección y el código de máquina que le corresponde. También contiene los valores ya resueltos de las etiquetas usadas y una indicación de los errores si los hubiera. 

 

El archivo (PEPE.OBJ) es el resultado de la traducción de nuestro programa al código de máquina y consiste en una serie de números expresados en hexadecimal. Este archivo podría ser importado por una aplicación que lo grabe en una memoria EPROM por ejemplo (haciendo uso de un dispositivo grabador), o podríamos cargarlo en otra aplicación que sea capaz de simular la ejecución que haría un �P 8085, como veremos mas adelante. 

 SIMULADOR DEL 8085  

Se trata de una aplicación que es capaz de simular todas las funciones del �P 8085  en combinación con bloques de memoria  ROM  o  RAM  (e  incluso  con  algunos  periféricos  como  el  ppi  8155).  He  aquí  algunas  de  las  características  del simulador: 

Muestra  en  pantalla  en  todo  momento,  el  contenido  de  los  registros,  de  partes  de  la  memoria  y  las instrucciones que están siendo ejecutadas. 

Permite la ejecución de un programa de forma continua, paso a paso, o con el uso de breakpoints. 

Permite modificar en cada paso el contenido de cualquier registro o memoria.  Se ejecuta escribiendo AVSIM85 en la línea de comandos.  Algunos de los comandos de teclado mas usados son:  

ESC: mueve el cursor de la parte inferior o menú a la parte superior donde se encuentran todos los registros, flags, memoria, etc. FLECHAS: permiten recorrer  las distintas opciones del menú o  los distintos campos hexadecimales según donde se encuentre el cursor. ENTER: selecciona una opción del menú. CTRL‐C: vuelve al menú principal. F10: simulación paso a paso. F9: retrocede una instrucción. F1: ejecuta el programa de forma continua 

 

Para cargar un programa debemos: ir al menú opción Load y luego Program. Ingresar el nombre del programa incluyendo la extensión (ejemplo EJE1.OBJ).  

Reset del 8085: ir al menú opción Reset y luego Cpu.  

Para ver una porción de memoria: ir al menú opción Dump, seleccionar el área de pantalla 1 o 2, opción Absolute e ingresar la dirección inicial (por ejemplo 1000h). 

Editor de texto (Ej. EDIT)

Ensamblador (A85)

Page 3: practico4_2014v1

UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales Profesorado en Tecnología Electrónica

 PRÁCTICO 4: ENSAMBLADOR Y SIMULADOR 

 OBJETIVO: Conocer el uso de  los programas ensamblador y simulador. Realizar ejercicios de programación con el conjunto completo  de  instrucciones.  Ejercitar  los  distintos modos  de  direccionamiento  así  como  también  el  uso  de  los  registros generales, registros pares y flags. Realizar retardos en tiempo real considerando la relación entre las instrucciones y los ciclos de reloj. Hacer  uso de los terminales SID y SOD y de las interrupciones.  ELEMENTOS NECESARIOS: 

- Contar con una tabla de instrucciones del uP 8085 y conocer los distintos registros de uso general y específico. - PC con editor de textos y programas A85 (ensamblador) y AVSIM85 (simulador). 

  

EJERCICIOS (Los ejercicios marcados con ** se deben simular) 

 **1) Realizar un programa en assembler del 8085 que realice la suma de dos números de 8 bits que están en las direcciones 20FFh y 20FEh. El resultado, si es distinto de cero, debe quedar almacenado en la dirección F000h, en caso de ser igual a cero poner en la dirección F001h el valor FFh:   a) Utilizar el comando EDIT para crear y editar el programa y guardarlo en el disco con el nombre EJE1.ASM   b) Ensamblar el programa con el comando A85.   c) Corregir los errores de sintaxis si los hubiera analizando el archivo de salida EJE1.LST   d) Repetir los puntos a), b) y c) pero ubicando el programa a partir de la dirección 1000h.  **2) Realizar un programa para sumar los números impares desde 1 a 20.  3)  Sumar  10  números  que  se  toman  de  un  bloque  de  la  RAM  a  partir  de  la  dirección  2000h  y  colocar  el  byte menos significativo del resultado en la dirección 5000h y el byte mas significativo en la dirección 5001h de la RAM.  **4) Realizar un programa para el 8085 que sume los primeros 4 números impares (de 8 bits) que se encuentran en un bloque de 50 bytes de la memoria RAM  a partir de la dirección 3000h. El resultado debe quedar en el registro B.  5) Si el valor actual de los registros del 8085 es el siguiente: A=02h; B=57h; C=7Eh; D=35h; E=F1h; H=02h; L=20h y la memoria RAM tiene los siguientes valores: dir 2002h:  A1h dir 0220h:  1Ch ¿Como quedarán los valores indicados luego de la instrucción?   MOV M,A ¿Que estado tomará el pin IO/M del 8085 durante cada ciclo de máquina de la instrucción?.  6) Realizar un programa que  indique cuantos números impares o menores que 7Fh o iguales a 07h hay en la memoria RAM desde la dirección 1F00h hasta la 1FFFh. El valor obtenido se debe guardar en la dirección 2000h. NOTA: Se supone que los números almacenados en memoria son positivos y de 8 bits.  **7) Realizar un programa para el 8085 que  indique cuantos bits de    los valores almacenados desde  la dirección 2000h a  la 2003h inclusive son iguales a uno  ( en el reg B ) y cuantos son iguales a cero (en el reg C). NOTA: Se supone que los números almacenados en memoria son  de 8 bits.   Ejercicios con retardos, terminales SID y SOD:  8) Realizar un programa para el 8085 que incremente el registro B cada segundo, suponer que el cristal usado por el µP es de:  a) 2 Mhz   b) 6 Mhz NOTA: Utilizar una subrutina para realizar el retardo, en ambos casos.  

Page 4: practico4_2014v1

UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales Profesorado en Tecnología Electrónica

9) Realizar un programa que envíe por la pata SOD del 8085 una señal cuadrada de una frecuencia de:   a) 1 seg   b) 1.5 seg NOTA: El cristal es de 1 Mhz. Utilizar una subrutina para realizar el retardo, en ambos casos.  10) Realizar un programa que incremente el registro B en cada flanco ascendente de la pata SID y que ponga este registro en cero cuando la entrada SID se mantenga en alto por un tiempo mayor a 100 ciclos de reloj.   Ejercicios con interrupciones:  11) Realizar un programa para el 8085 con un cristal de 2 Mhz que indique la presencia de un número máximo de personas dentro de un local. Cuando este número es igual 10, se debe poner en el pin SOD del µP el valor lógico alto, si el numero es menor de 10 el pin SOD debe tener un valor lógico bajo. Se dispone de dos señales, una asociada a la entrada de personas y otra a la salida, cada una de ellas envía un pulso de 1 ms cuando se activa.   Implementar lo solicitado usando las interrupciones del 8085.  12) Realizar un programa que incremente el registro B cada vez que llegue una interrupción RST 7.5 y que ponga este registro en cero cada vez que llega una interrupción RST 5.5.    EJERCICIOS COMPLEMENTARIOS  1) Se tienen 80 bytes de datos en la memoria RAM a partir de la dirección 5000h. Realizar un programa que indique en el registro B cuantos de ellos son divisibles por 2 y en el registro C cuantos son divisibles por 4.  2) Realizar un programa para el 8085 que sume  los números  impares menores que 10h y mayores que 02h, el resultado se debe enviarse al puerto de salida en la dirección 50h (no tener en cuenta si hay overflow). Los datos a considerar ingresan en forma sucesiva por el puerto de la dirección 60h y finalizan cuando uno de ellos toma el valor FFh.  3) Realizar un programa que copie la región de memoria apuntada por el par HL y de extensión indicada por B, a la dirección de RAM apuntada por el par DE.  4)  Realizar  un  programa  en  assembler  que  sume  3  números  de  16  bits  sin  signo,  los  datos  se  encuentran  a  partir  de  la dirección 3000h de la memoria RAM, organizados de la siguiente manera: 3000h byte bajo DATO1,  3001h byte alto DATO1 3002h byte bajo DATO2,  3003h byte alto DATO2 3004h byte bajo DATO3,  3005h byte alto DATO3 Colocar el resultado en la memoria RAM, a partir de la dirección 3006h, el byte menos significativo. Tener en cuenta que el resultado puede tener mas de 16 bits, en cuyo caso habrá que darle el valor correcto a la dirección 3008h.   5) Si el valor actual de los registros del 8085 es el siguiente: A=03h; B=E7h; C=3Eh; D=2Fh; E=00h; H=03h; L=30h y la memoria RAM tiene los siguientes valores: dir 3003h:  A0h dir 0330h:  0Ch ¿Como quedarán los valores indicados luego de la instrucción?   ORA M ¿Que estado tomará el pin IO/M del 8085 durante cada ciclo de máquina de la instrucción?  6) Se tienen 10 datos de 8 bits sin signo a partir de la dirección 2000h de la memoria RAM. Encontrar la suma de todos aquellos no comprendidos entre 10h y A4h inclusive. (dato < 10h   ó   A4h < dato) Colocar el resultado en el registro B.   

Page 5: practico4_2014v1

UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemáticas y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales Profesorado en Tecnología Electrónica

7) Realizar un programa en assembler que ordene de mayor a menor  los datos de 8 bits que están en  la memoria desde  la dirección 1F00h hasta la 1F1Fh los valores ordenados deben ubicarse en la memoria RAM a partir de la dirección 2000h.  8)  Realizar  un  programa  para  el  8085  que  genere  por  la  pata  SOD  una  onda  cuadrada  cuya  frecuencia  en  kilohertz  está determinada por el valor almacenado en la dirección 1234h de la memoria RAM, usando un cristal de 2 Mhz NOTA: Utilizar una subrutina para realizar el retardo  9) Realizar un programa para el 8085 que multiplique el contenido del registro A con el del registro L y deje el resultado en el par HL. Considere todos los datos sin signo. NOTA: Utilizar una subrutina para realizar la multiplicación de los registros.  10) La pata SID del 8085 se encuentra conectada a un generador de onda cuadrada. Realizar un programa que mida el periodo de  esta  onda. Decir  entre  que  frecuencias  debe  estar  comprendida  la  onda  de  entrada  para  que  la medición  pueda  ser realizada. Suponer un cristal de 1 Mhz.  11)  Realizar  un  programa  para  el  uP  8085  utilizando  interrupciones,  que  muestre  en  el  registro  BC  la  cantidad  de microsegundos  que  estuvo  en  alto  una  entrada  conectada  al  pin  INT5.5.  Si  la  señal  permaneció  en  alto más  de  65535 microsegundos se debe poner el pin SOD en alto y en bajo en caso contrario. Se supone que el uP trabaja con un cristal de 2 Mhz.