capitulo1parte2rev9

Upload: jorge-palma-lara

Post on 16-Oct-2015

6 views

Category:

Documents


0 download

TRANSCRIPT

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 1 21/03/2006

    CAPTULO 1 PARTE II

    Instrucciones

    Introduccin En un computador el componente encargado del control del mismo es el CPU. El CPU lo hace mediante la ejecucin de un programa, el cual lee de la memoria (por tanto, el programa debe haberse grabado previamente en la memoria). Una memoria est constituida por registros, y se ha visto que los registros son un conjunto de celdas de memorias, cada una de las cuales almacena un valor binario. En resumen, podramos decir que en la memoria slo pueden estar almacenados nmeros. Si el CPU lee instrucciones de la memoria., entonces necesariamente estas instrucciones tienen que estar codificadas como nmeros, pues es lo nico que se podr leer, y como la memoria se lee registro por registro, dichas instrucciones necesariamente ocuparn un nmero entero de registros. La codificacin mencionada debe ser tal y como la espera el CPU. Dicha codificacin ha sido creada por el equipo diseador del CPU, y hay tantas codificaciones de instrucciones como procesadores y microcontroladores hay en el mercado. Sin embargo todas ellas tienen algo en comn: se representan con nmeros, que sern grabados en la memoria al formar parte de un programa. As como las instrucciones estn codificadas como nmeros, tambin tiene que estarlo cualquier tipo de dato que se desee sea procesado por el computador. Un ejemplo es el cdigo ASCII que permite representar como nmeros de 7 u 8 bits las letras y signos de puntuacin del alfabeto (todos estos denominados caracteres). Otro ejemplo lo son los nmeros con signo (sino, cmo representaran el signo menos?). En el presente captulo se define a una instruccin, se describe cmo se codifican como nmeros, y cmo se almacenan stos en la memoria. Se ver que algunas instrucciones ocupan ms espacio de memoria que otras, pero siempre la cantidad de bits que ocupan ser un mltiplo de la longitud de palabra de los registros de la memoria. Finalmente se muestra cmo el CPU ejecuta una instruccin, y cmo es que logra ejecutarlas de manera secuencial.

    Instruccin (instruction) Una instruccin es un conjunto de bits que le indican al CPU qu operacin debe realizar, cmo acceder a los datos que se van a utilizar en la operacin (operandos) y dnde almacenar los resultados.

    Ejercicio: Indicar qu representa el siguiente nmero binario: 01100001 Si: a) Es un cdigo ASCII b) Representa a un nmero sin signo c) Representa a un nmero decimal en formato BCD empaquetado.d) Representa a un nmero en formato de signo y magnitud.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 2 21/03/2006

    Dependiendo del CPU, este conjunto de bits puede estar agrupado en bytes (como en el caso de los CPUs de 8 bits como el del microcontrolador 68HC11 de Motorola) o en palabras (como en el caso del CPU del ATmega8 de la compaa Atmel en el que la mayora de instrucciones son de una palabra de 16 bits, y algunas de dos palabras de 16 bits). En general toda instruccin consta de dos partes: cdigo de operacin y campo de referencia de operandos.

    Cdigo de operacin (OpCode, Operation Code) Indica la operacin a ejecutar, la longitud de la instruccin (cuntos bytes o palabras tiene la instruccin), y cmo interpretar lo campos de referencia de operandos (denominados modos de direccionamiento), si es que la instruccin los tiene. En el caso del 68HC11, las instrucciones tienen cdigos de operacin de uno o dos bytes, siendo la mayora de un byte. En cambio, en el ATmega8, los cdigos de operacin son de 4 a 12 bits.

    Campo de referencia de operando: En este campo est la informacin requerida por el CPU para acceder al dato, o datos a utilizar en la operacin. Algunas instrucciones no tienen un campo de referencia de operando pues, por ejemplo, los operandos y el resultado estn en registros internos del CPU. En el caso del ATmega8, en el que la memoria de programa est constituida por registros de 16 bits, este campo es de 4 a 12 bits en las instrucciones de una palabra de longitud, y de 16 bits en las de dos palabras de longitud.

    Los operandos pueden estar en registros del CPU, en la memoria, o en algn dispositivo de entrada/salida.

    Por qu se requieren cdigos de operacin? El CPU es un circuito digital, y como tal lo nico que reconoce son valores binarios. Para ser ms exactos, lo que realmente reconoce son dos rangos de voltaje, que por facilidad les asignamos los nmeros 0 y 1. Como se ha visto en secciones anteriores, el CPU espera encontrar las instrucciones en una memoria, y por lo tanto lo nico que puede leer de la memoria es lo que le llega por las lneas de datos. En el caso del ATmega8, la memoria de programa tiene un bus de datos de 16 bits y por lo tanto slo puede leer nmeros de 16 bits. Como lo nico que reconoce son valores binarios, las instrucciones tienen que representarse con nmeros (patrones de bits). Y para poder distinguir una operacin de otra, a cada una se le debe asignar un patrn de bits diferente. Pero no basta con distinguir las operaciones, sino tambin la manera como se accede al operando. Se ver en el prximo captulo, que hay varias maneras diferentes de indicar al CPU cmo acceder al operando, y cada una de esas maneras se denomina modo de direccionamiento.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 3 21/03/2006

    Formatos de instrucciones Cada instruccin es representada por un patrn de bits. cada patrn consta de cdigo de operacin y campos de referencia a operandos. Al momento de disear el CPU, el diseador tiene que definir cmo se representarn las instrucciones: - Cuntos bits para los cdigos de operacin y qu bits - Cuntos bits para referenciar a cada operando, y cuntos operandos. A cada manera diferente en que pueden representarse las instrucciones del CPU se le denomina formato de instruccin, y toda instruccin del CPU corresponder a uno de dichos formatos. Por ejemplo, en el ATmega8, se tienen los siguientes formatos de instrucciones (slo se muestran algunos de ellos). En gris oscuro se muestra el cdigo de operacin.

    OpCode Rd

    04 315

    OpCode

    915Rr Rd

    48 0

    OpCode Rr Rd

    5615 9

    OpCode Rr/Rd A

    15 11 9 3 0

    0

    OpCode (parte 1)

    Direccin dato

    Rr/Rd

    31

    15

    25 24 16

    0

    OpCode (parte 2)

    20

    OpCode

    9

    Rd

    3

    48A

    8

    Fig. 1 Algunos formatos de instrucciones del ATmega8 No todas las instrucciones tienen cdigos de operacin de la misma cantidad de bits, y adems puede apreciarse que el cdigo de operacin est separado en dos partes en el primer y ltimo formato. En el primer formato, el cdigo de operacin es de 11 de bits, y el campo de referencia a operando de 5 bits. En el segundo formato el cdigo de operacin es de 7 bits y hay dos campos de referencia a operandos de 5bits (uno de los campos, Rd est constituido por dos partes, una de 1 bit y otra de 4 bits). En el tercero, el cdigo de operacin es de 7 bits, un campo de referencia de operando es de 3 bits (Rr) y el otro es de 6 bits (Rd). En el cuarto formato el cdigo de operacin es de 5 bits, y tiene dos campos de referencia de operando, uno de 5 bits, y el otro de 6 bits (campo A, que est constituido por dos partes). En el ltimo formato la instruccin es de 32 bits, el cdigo de operacin es de 11 bits y la instruccin tiene dos campos de referencia a operandos: Rr/Rd de 5 bits y "Direccin dato" de 16 bits. En todos los casos, en los campos de referencia a operandos el bit ms significativo es el de ms a la derecha, y el menos significativo el de la izquierda.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 4 21/03/2006

    Nomenclatura de las operaciones de una instruccin Para representar en forma abreviada las operaciones que se efectan con las instrucciones, se emplea la nomenclatura que se explica a continuacin.

    Representacin de nmeros: Bases numricas Para diferenciar las bases numricas se emplean prefijos, como se indica en la tabla. sta es la manera como tendrn que escribir los nmeros en sus programas. Nmero a representar

    Base Prefijo Observaciones Ejemplos

    binario 2 0b es el dgito 0, no la letra o 0b1100, es el nmero 12 octal 8 0 es el dgito 0 010, es el nmero 8 hexadecimal 16 $

    0x dgito 0, como en lenguaje C

    $C 0xC son el nmero 12

    decimal 10 ninguno no debe comenzar con cero 27 Por ejemplo, 0b1001, 0011, 0x9 y $9 representan al nmero 9.

    Registros Los registros del CPU tienen un nombre con el cual se identifican. Es el fabricante del microcontrolador el que define los nombres para dichos registros, aunque algunos de ellos, por su funcin particular, tienen un nombre comn, como PC, e IR (Ver seccin: ejecucin de instrucciones, para una explicacin de la finalidad de estos registros). PC es el contador de programa IR es el registro de instrucciones SP es el puntero de pila (stack pointer) En el microcontrolador Atmega8, hay 32 registros de 8 bits denominados de propsito general (general purpose), con los nombres R0, R1, hasta R31. En el microcontrolador 68HC11 hay un par de registros que se denominan A y B (conocidos como acumuladores).

    Ejercicio: 1. A cul de los formatos anteriores corresponde cada una de las siguientes instruccin del microcontrolador ATmega8? cada carcter representa un bit. Un 0 o 1 corresponde a un bit del cdigo de operacin. Una misma letra corresponde al mismo campo de referencia de operando. a) 1011 1AAr rrrr AAAA b) 0000 11rd dddd rrrr c)1111 00kk kkkk k101 d)1001 010d dddd 0110 e)0111 KKKK dddd KKKK

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 5 21/03/2006

    Numeracin de bits en los registros Siempre la numeracin de los bits en un registro comienza a partir de 0. Por ejemplo, un registro de 8 bits, tendr los bits del 0 al 7, siendo el bit 0 el menos significativo y el bit 7 el ms significativo.

    Transferencia de datos Para indicar que el contenido de un registro se copia en otro registro se emplea el smbolo . La flecha apunta al registro en el cual se copiar el dato. Ejemplo: Copiar el contenido del registro R3 en el registro R7 Se representara as: R7 R3 En general, equivale al smbolo de asignacin de los lenguajes C y Pascal (en lenguaje C es =, en lenguaje Pascal es :=) Ejemplo: Incrementar en una unidad el registro R9 Se representara as: R9 R9+1 Ejemplo: Copiar en el registro R14 el nmero $23 R14 $23 Transferencia de contenidos de una direcciones de memoria Cuando el registro cuyo dato se quiere transferir es un registro de memoria, se especifica la direccin del mismo dentro de parntesis ( ). cualquier expresin dentro de parntesis representa una direccin de memoria. Ejemplo: Copiar en el registro R21 el contenido de la direccin 120 de la memoria de datos. Se representara as: R21 (120) La direccin tambin podra estar almacenada en un registro. Ejemplo: Copiar en el registro IR el contenido de la direccin de memoria almacenada en registro PC. IR (PC) Interpretacin: Si por ejemplo, el registro PC tuviese almacenado el valor $60, lo que se grabara en el registro IR es el contenido de la direccin $60 de la memoria. En cambio, si el valor contenido en PC fuese $100, se grabara en IR el contenido de la direccin $100 de la memoria. Ejemplo: Escribir en la direccin de memoria $60 el contenido del registro R31 Se representara as: ($60) R31

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 6 21/03/2006

    Seleccin de un bit Para especificar un bit en particular de un registro, se coloca primero el nombre del registro seguido del nmero de bit entre parntesis. Ejemplo: Para especificar el bit 4 del registro R31: Se representara as: R31(4) Ejemplo: Poner a 1 el bit 3 del registro SREG. Se representara as: SREG(3) 1 Copia de un rango de bits El rango de bits se especifica con el nombre del registro seguido del rango entre parntesis. El rango se especifica con dos nmeros separados con ... Ejemplo: Copiar los bits 0, 1 y 2 del registro de nombre R1, a los bits 5, 6 y 7 de otro registro

    de nombre R2. Se representara as: R2(5..7) R1(0..2) Esto significa que el bit 0 de R1 se copia en el bit 5 de R2, el bit 1 de R1 se copia en el bit 6 de R2 y el bit 2 de R1 se copia en el bit 7 de R2.

    Registros concatenados A veces hay instrucciones que hacen uso de dos registros para formar un nmero de mayor longitud, y lo utilizan as en las operaciones. Para representarlos se coloca primero el nombre del registro que representar a los bits ms significativos, luego el carcter : y a continuacin el nombre del registro que representar a los bits menos significativos. Ejemplo: R24 y R25 son registros de 8 bits. Representarlos como un registro de 16 bits donde

    el byte ms significativo ser el contenido de R25. Se representara as: R25:R24. Ejemplo: Copiar $4756 en R25:R24 Se representara as: R25:R24 $4756 Esto significa que en R25 se copiar el valor $47 y en R24 el valor $56. Ejemplo: Incrementar en una unidad el contenido de R25:R24. Se representara as: R25:R24 R25:R24 + 1

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 7 21/03/2006

    Ejercicio: El ATmega8 cuenta con 32 registros de 8 bits de propsito general, llamados R0..R31. A continuacin se muestran las operaciones y codificacin de dos instrucciones y su formato, tal y como aparecen en el manual de instrucciones del microcontrolador ATmega8. a) Qu representa la d en Rd? Operacin: Rd Rr Codificacin de la instruccin: 0010 11rd dddd rrrr b) Qu representa K en la operacin? Operacin: Rd K Codificacin de la instruccin: 1110 KKKK dddd KKKK

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 8 21/03/2006

    Lenguajes y herramientas de desarrollo (ensamblador, compiladores cruzados)

    Lenguaje Mquina (machine language) Un lenguaje escrito es un conjunto de smbolos y reglas cuyo objetivo es lograr la comunicacin entre dos o ms personas que conocen dichas reglas y smbolos. En el caso de un CPU, se denomina lenguaje mquina al conjunto de instrucciones que reconoce el CPU. En este caso, haciendo analoga con un lenguaje escrito, los smbolos seran los valores ledos de la memoria (nmeros binarios) y las reglas: los formatos de las instrucciones, y que las instrucciones son ledas en secuencia. Es decir, en la instruccin misma ya estn de manera implcita las reglas, por la definicin de instruccin dada anteriormente. Las instrucciones en este lenguaje, estn codificadas como nmeros. Dado que cada fabricante disea sus CPUs de forma diferente, en general los lenguajes mquina para CPUs diferentes sern diferentes.

    Cdigo Mquina (machine code) Es el conjunto de instrucciones (en lenguaje mquina) que conforman un programa.

    Cdigo mquina de una instruccin Es la representacin binaria, o en general numrica, de una instruccin, es decir, la instruccin tal y como est almacenada en la memoria del computador. Ejemplo: Se muestra una porcin de la tabla de instrucciones del ATmega8. nemonic Operands Description Operation Flags Cycles Machine Coding Notes

    ADC Rd,Rr Add with Carry Rd Rd + Rr + C Z,C,N,V,H,S 1 0001 11rd dddd rrrr ADD Rd,Rr

    Add without Carry Rd Rd + Rr Z,C,N,V,H,S 1 0000 11rd dddd rrrr

    La columna de nombre machine coding muestra la codificacin mquina de cada instruccin. la columna operation muestra la operacin que efecta la instruccin, con la nomenclatura mostrada anteriormente. En este par de instrucciones se representan a los registros R0 a R31 con 5 bits. El cdigo mquina de la instruccin que efecte la operacin: R22 R22 + R17 sera: 0000111101100001 Pues el registro R17 se representa con el nmero binario 10001 y el registro R22 con el nmero binario 10110. Se ha resaltado en negrita los bits que representan a R17

    Lenguaje de ensamblaje (Assembly language) Debido a la dificultad que desde los inicios de las computadoras tuvieron los programadores para desarrollar programas directamente en lenguaje mquina, stos comenzaron a ponerles

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 9 21/03/2006

    nombres cortos a las instrucciones del computador, que reflejaran la operacin que efectuaba la instruccin. Estos nombres cortos eran abreviaturas en ingls (pues eran de habla inglesa los programadores), y cada programador creaba sus propios nombres nemotcnicos y sus propias reglas de cmo indicar los datos en cada instruccin. Los programadores escriban sus programas en papel usando estas abreviaturas o ayudas nemotcnicas, y luego los traducan manualmente al lenguaje mquina, es decir, los convertan a nmeros que escriban en papel. Eran estos nmeros los que luego introducan en la memoria del computador. De esa manera les era ms fcil visualizar un programa, revisarlo, y depurarlo. No pas mucho tiempo hasta que se decidi crear un lenguaje que unificara esos nemotcnicos y la manera de representar en papel los datos de las instrucciones, de manera que los programadores no tuviesen necesidad de inventar sus propias abreviaturas, y al mismo tiempo permitir que otros pudiesen leer los programas escritos por alguien. A este lenguaje se le llam lenguaje de ensamblaje. Al mismo tiempo se cre un programa que se encargara de traducir el programa escrito en lenguaje de ensamblaje a lenguaje mquina. A este programa se le llam ensamblador. El lenguaje de ensamblaje es un lenguaje que representa las instrucciones en lenguaje mquina del CPU de una manera simblica, que se supone es ms fcil de manejar por parte de un programador (lo cual es cierto, pero si sabe ingls). Siempre es el fabricante del microprocesador o microcontrolador el que define el lenguaje de ensamblaje, a excepcin de las directivas, que pueden variar, y cuya definicin se da en esta parte. Por eso, hay tantos lenguajes de ensamblaje como CPUs hay en el mercado (sea como parte de un microcontrolador o microprocesador). Sus principales caractersticas son : Existe una correspondencia biunvoca (para la mayor parte de las instrucciones) entre una

    instruccin escrita en lenguaje de ensamblaje y una instruccin en lenguaje mquina. Es decir, una instruccin en lenguaje de ensamblaje representa a una nica instruccin en lenguaje mquina.

    Al igual que en los lenguajes de alto nivel (como PASCAL o C) los programas estn formados por lneas de texto (lneas de instruccin).

    En una lnea de texto se representa una nica instruccin del CPU. Cada lnea de instruccin est formada por uno o ms de los siguientes campos:

    campo de etiqueta (label field) campo de nemnico (mnemonic field) campo de operandos (operand field) campo de comentarios (comment field)

    Antes de explicar el contenido de estos campos, hay que definir dos trminos: Etiqueta (label): Es una secuencia de caracteres (smbolo) al cual se le asocia un nmero. Cuando sta est en el campo de etiqueta, representa la direccin de inicio (nmero asociado a la etiqueta) de la instruccin que est en dicha lnea, en caso de haber una instruccin en sta.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 10 21/03/2006

    Nemnico (mnemonic): es una palabra que representa la operacin que realiza una instruccin del CPU. Es el fabricante del microcontrolador el que define los nemnicos para las instrucciones del CPU. El campo de etiqueta est al comienzo de una lnea de texto y en ella va una etiqueta. En el campo de nemnico, que sigue al campo de etiquetas, se escriben los nemnicos de las instrucciones. En el campo de operandos, que va luego del campo de nemnicos, se escriben los operandos, que son los valores utilizados por la instruccin del CPU. Se utilizan ciertas reglas para indicar el modo de direccionamiento involucrado. En el campo de comentarios puede haber cualquier texto que permita entender la funcin del programa, tanto por parte del programador como de cualquier otra persona que lea el programa. Los comentarios deben ser breves e indicar lo que hace cada porcin de programa en relacin con el algoritmo implementado. Es una mala prctica de programacin colocar como comentario lo que el CPU hace en una instruccin, pues eso lo indica claramente el nemnico y operandos de la instruccin. Adems de lo antes mencionado, para facilitar la programacin, y en algunos casos para poder especificar sin ambigedades un programa, este lenguaje cuenta con una serie de palabras (smbolos) llamados directivas (directives), las cuales no representan instrucciones del CPU, y que permiten especificar cosas como : direccin de inicio de un programa, si se desea generar un listado del programa, definir tablas de datos, etc. Los lenguajes de ensamblaje son diferentes para CPUs diferentes pues, en general, tendrn registros a los que los fabricantes les ponen nombres diferentes y nemnicos diferentes. Incluso para un mismo CPU, pueden haber lenguajes de ensamblaje diferentes, pero lo sern slo en las directivas, mas no en los nemnicos. En la primera figura se muestra un programa escrito en lenguaje de ensamblaje del ATmega8, y en la siguiente figura se muestra, para comparacin, un programa escrito en lenguaje de ensamblaje del 68HC11. En ambas se indican sus diferentes partes. Como se puede apreciar, casi todo es diferente. Ese es un inconveniente de la programacin en lenguaje de ensamblaje: hay que aprender uno por cada familia de microcontroladores que se desee utilizar.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 11 21/03/2006

    EJEMPLO DE PROGRAMA

    ** PROGRAMA QUE COPIA UN BLOQUE DE 30 DATOS DE 8 BITS* DE DIRECCION $CD00 A LA DIRECCION $D000* EL PROGRAMA COMIENZA EN DIRECION $C000** ESTE PROGRAMA CORRIGE EL ERROR DE EJM1A.ASM

    OPT HC11 * EL AS68 REQUIERE ESTA LINEA!

    ORG $C000

    INICIO LDX #$CD00 ; X = puntero a bloque fuente

    LDY #$D000 ; Y = puntero a bloque destinoLDAB #30 ; B = contador

    SIGUE LDAA 0,XSTAA 0,YINX ; X apunta a siguiente dato fuenteINY ; Y con nueva direccion destinoDECBBNE SIGUE ; se copiaron todos los datos?

    FINEND

    comentarios

    etiquetas

    directivas

    nemonico

    operando

    comentario

    directiva

    EJEMPLO DE PROGRAMAcomentarios

    etiquetas

    directivas

    nemonico

    operandos

    comentario

    ; PROGRAMA QUE COPIA UN BLOQUE DE 30 DATOS DE 8 BITS; DE LA DIRECCION $60 A LA DIRECCIN $100; EL PROGRAMA COMIENZA EN LA DIRECCIN $0000

    .INCLUDE "m8def.inc"

    .CSEG.ORG 0

    INICIO: LDI R17, 30 ; R17 se usa como contadorLDI R29, 1 ; R29 R28 son registro YLDI R28, 0 ; Se hace Y=$100, inicio del destinoLDI R27, 0 ; R27 R26 son registro XLDI R26, $60 ; Se hace X = $60 inicio de datos

    SIGUE: LD R16, X+ ; se lee el dato y se incrementa XST Y+, R16 ; se copia el dato y se incrementa YDEC R17BRNE SIGUE ; Si no se copiaron todos, seguir copiando

    FIN: JMP FIN ; Si.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 12 21/03/2006

    Compilador (compiler) Es un programa que recibe como entrada un archivo que tiene un programa escrito en un lenguaje, y genera como resultado un archivo con el mismo programa pero escrito en otro lenguaje.

    Ensamblador (assembler) Es un compilador (programa) que acepta como entrada un archivo que tiene un programa escrito en lenguaje de ensamblaje, y genera como salida un archivo con el cdigo mquina del programa.

    Ensamblador cruzado (cross-assembler) Es un ensamblador que se ejecuta en un computador basado en cierto microprocesador o microcontrolador, y genera cdigo mquina para un microprocesador o microcontrolador diferente al del computador. Tambin se denomina as a los ensambladores que se ejecutan en un computador basado en cierto microprocesador y generan cdigo para computadoras de diferente arquitectura pero basadas en el mismo microprocesador. Por ejemplo, el AS68 es un ensamblador cruzado, que se ejecuta en un computador compatible IBM, pero genera cdigo mquina para el microcontrolador 68HC11. El AVR Assembler 2.0 de Atmel, es tambin un ensamblador cruzado; se ejecuta en un computador compatible IBM, pero genera cdigo mquina para microcontroladores de la familia AVR, como el ATmega8, ATmega32, AT90S8535, etc.

    Compilador cruzado de C (C cross-compiler) Es un compilador de lenguaje C que se ejecuta en un computador, y genera cdigo mquina para un computador diferente. La diferencia puede ser en el tipo de procesador, microcontrolador o microprocesador que emplee la computadora, o de contar con el mismo procesador, en la arquitectura del computador. Por ejemplo, el Ht-6811 es un compilador cruzado de C. Es un programa que se ejecuta en una computadora personal (IBM compatible) y genera cdigo mquina para cualquier computador basado en el 68HC11. El programa "CodeVision AVR C Compiler" es un entorno de desarrollo para la familia de microcontroladores AVR8 de Atmel, y cuenta con un compilador cruzado de C para dicha familia de microcontroladores (existe una versin reducida, gratuita de dicho programa). La gran diferencia entre un compilador cruzado y otro que no lo es, estriba en que el primero genera cdigo independientemente de la arquitectura del computador en el que se ejecutar dicho cdigo. Los compiladores usados en las computadoras personales (por ejemplo Borland C, DevC++, Visual CPP) son compiladores que generan archivos que se ejecutan sobre un sistema operativo determinado, por ejemplo DOS o Windows XP, y los programas ejecutables que generan no pueden ser utilizados sobre cualquier otro sistema operativo que no sea compatible con los mencionados.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 13 21/03/2006

    Tipos de instrucciones, ejecucin de instrucciones

    Tipos de Instrucciones El microcontrolador ATmega8 cuenta con los siguiente tipos de instrucciones

    Instrucciones de transferencia de datos: Permiten copiar el contenido de un registro del CPU a otro registro (del CPU, de memoria de datos, de memoria de programa, o de una interface de entrada/salida) o viceversa.

    Instrucciones aritmticas: Permiten efectuar operaciones de suma, resta y multiplicacin con los registros del CPU.

    Instrucciones lgicas: Para efectuar operaciones lgicas bit a bit (O, O exclusivo, Y, complemento a 1).

    Instrucciones de rotacin y desplazamiento: Para cambiar de posicin los bits de un registro del CPU (por ejemplo, desplazarlos un bit a la derecha, a la izquierda)

    Instrucciones de Entrada/Salida (E/S): Para poder manejar los registros de Entrada/Salida del microcontrolador. La mayora de dichos registros son para el manejo de las interfases de entrada salida con que cuenta el microcontrolador.

    Instrucciones de manejo de bits: Permiten analizar el estado de un bit en particular de un registro del CPU, o ponerlo a 1 a 0.

    Instrucciones de control de flujo de programa: Estas instrucciones permiten que el programa no siga la orden normal de ejecucin de instrucciones que es secuencial. Hay dos tipos de instrucciones: instrucciones de salto: Permiten al CPU continuar la ejecucin del programa a

    partir de la direccin indicada en el campo de referencia de operando de la instruccin de salto. Estas instrucciones permiten implementar las estructuras condicionales de los lenguajes de alto nivel (if-else, while, repeat, for, etc.)

    Instrucciones de llamada y retorno de subrutinas: Permiten al CPU ejecutar un bloque de instrucciones (subrutina) y luego retomar la ejecucin del programa a partir del punto donde se qued. Estas instrucciones permiten implementar las funciones de los lenguajes de alto nivel.

    Instrucciones de control: Estas instrucciones permiten controlar algunas caractersticas del microcontrolador. Por ejemplo, hacer que entre a un modo de ahorro de energa.

    Pasos en la ejecucin de una instruccin En general, se suelen distinguir dos fases en la ejecucin de una instruccin: Bsqueda del cdigo de operacin, tambin llamado ciclo de captacin, o Ciclo fetch (op-

    code fetch) Decodificacin/ejecucin La primera fase consiste en la lectura del cdigo de operacin y su grabacin en un registro especial, denominado comnmente registro de instrucciones (IR, instruction register). La segunda consiste en la lectura y procesamiento de las dems palabras de la instruccin (si las hubiera), lectura de datos, procesamiento de stos, y grabacin del resultado.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 14 21/03/2006

    El CPU siempre comienza la ejecucin de una instruccin con la bsqueda del cdigo de operacin, luego realiza la decodificacin y ejecucin de sta. A continuacin, efecta un nuevo ciclo de bsqueda de cdigo de operacin, repitindose el ciclo.

    Ejecucin de instrucciones El CPU para poder ejecutar las instrucciones de manera secuencial tiene que saber en todo momento en qu registro de la memoria est la siguiente instruccin a ejecutar. Para ello cuenta con un registro especial denominado contador de programa (program counter) y que suele tener el nombre abreviado PC, el cual tiene almacenada la direccin del registro de la memoria de programa que contiene la siguiente instruccin a ejecutar. Cada vez que el CPU capta una instruccin, incrementa dicho contador, de manera que al finalizar la ejecucin de la instruccin actual, capte la siguiente instruccin de la direccin de memoria inmediata superior. Para poder ejecutar una instruccin primero tiene que leerla de la memoria de programa y almacenarla temporalmente dentro del CPU para decodificarla, para lo cual internamente cuenta con un registro denominado registro de instrucciones (instruction register) y que suele tener el nombre IR. Adems de estos registros, tiene los registros de propsito general (general purpose registers), cuyos contenidos son utilizados como operandos en la mayora de instrucciones con que cuenta el CPU. Antiguamente los CPUs contaban con uno o dos de estos registros, a los cuales se les denominaba acumuladores. En la figura se muestra un diagrama simplificado del microcontrolador Atmega8, en el que, por simplicidad, no se muestran las interfaces de entrada/salida.

    Capturarsiguiente

    instruccinINICIO PARADAEjecutarInstruccin

    Fig. 1 Ejecucin de instrucciones

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 15 21/03/2006

    En la figura se muestra que:

    El microcontrolador cuenta con 1KB de memoria RAM esttica, 8KB de memoria de programa, en un arreglo de 4Kx16, y 512 bytes de memoria EEPROM.

    El microcontrolador cuenta con 32 registros de propsito general, y se puede seleccionar el contenido de uno o dos de ellos para efectuar operaciones con el ALU.

    Las salidas del contador de programa, PC, estn conectadas a las lneas de direcciones de la memoria de programa.

    Algunas salidas del registro de instrucciones IR, pueden conectarse a las lneas de direcciones de la memoria de datos.

    Es posible utilizar las salidas de dos registros de propsito general como direcciones de la memoria de datos.

    Las lneas de control, que son salidas del decodificador de instrucciones, son las que permiten:

    o leer o escribir en la memoria SRAM o leer la memoria de programa o grabar un valor en uno de los registros de propsito general, o en el registro IR o seleccionar la operacin matmatica en el ALU, y el registro en el que se

    grabar el resultado de la operacin o seleccionar si un par de registros de propsito general se utilizar para

    seleccionar el registro de la memoria SRAM, o si se utilizarn los bits del registro IR.

    Estas caractersticas determinan que: El valor a grabar en el registro IR, quede determinado por el contenido del contador de

    programa. Pues el contenido del registro PC indica la direccin de memoria que se leer, y por tanto, la instruccin que leer.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 16 21/03/2006

    Si se va a leer un registro de la memoria de datos, la direccin est determinada por un grupo de bits del registro IR, o por un par de registros de propsito general.

    Las seales de control que van a las lneas de control de las memorias, registros y el ALU son generadas por el decodificador de instrucciones.

    A continuacin se muestra un ejemplo de programa, grabado en la memoria Flash a partir de la direccin $000, que efecta la suma de los contenidos de los registros R0, R1 y R2 almacenando el resultado en R16. Se muestra, al lado izquierdo, la operacin que efecta cada instruccin. El programa consta de cuatro instrucciones, cada una ocupando un registro de la memoria Flash. Los dems registros de la memoria Flash no han sido grabados y por tanto estn en blanco. 1 Operacin direccin Memoria

    Flash R16 R0 $000 $2D00 R16 R16 +R1 $001 $0D01 R16 R16 + R2 $003 $0D02 PC PC-1 $004 $CFFF $005 $FFFF ... ... $FFF $FFFF

    Cmo ejecuta el microcontrolador el programa Como se indic en la seccin anterior, la ejecucin de cada instruccin consta de dos etapas: captacin y decodificacin/ejecucin.

    Ciclo de captacin: Se efecta la lectura de la instruccin, cuya direccin est indicada por el contenido del contador de programa, y se incrementa el contador de programa, para que apunte a la siguiente instruccin a ejecutar.

    1. IR (PC) 2. PC PC+1

    Ciclo de ejecucin: En el ciclo de ejecucin efecta las operaciones mostradas en la figura de arriba para cada una de las instrucciones. Visto en secuencia, el CPU efecta las operaciones indicadas en la siguiente tabla, en la que se muestra en la segunda columna la operacin que se efecta, y en las dos columnas siguientes los nuevos valores que se graban en el contador de programa PC, y en el registro de instrucciones IR. Inicialmente el contador de programa tiene el valor $000.

    1 Se dice que una memoria Flash est en blanco cuando ha sido borrada elctricamente o es nueva y no se le ha grabado nada an. Una memoria Flash en blanco tiene almacenado en todas sus celdas de memoria el valor 1. Por tanto, una memoria Flash de 16 bits si est en blanco tendr almacenado en todos sus registros el valor $FFFF. Esto tambin se aplica a las memorias EPROM y EEPROM.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 17 21/03/2006

    Paso PC IR Descripcin

    1 IR (PC) 0 $2D00 ciclo fetch PC PC+1 1 2 R16 R0 ejecucin primera instruccin 3 IR (PC) $0D01 ciclo fetch PC PC+1 2 4 R16 R16 + R1 ejecucin segunda instruccin 5 IR (PC) $0D02 ciclo fetch PC PC+1 3 6 R16 R16 + R2 ejecucin tercera instruccin 7 IR (PC) $CFFF ciclo fetch PC PC+1 4 8 PC PC -1 3 ejecucin cuarta instruccin 9 IR (PC) $CFFF ciclo fetch PC PC+1 4 10 PC PC -1 3 ejecucin cuarta instruccin ... ... Puede observarse que:

    El ciclo fetch siempre es el mismo, independiente de la instruccin a ejecutar. A pesar de ser el mismo, se lee la instruccin que est en la direccin siguiente de

    memoria, pues el contador de programa PC se increment. Una vez ejecutadas las primeras tres instrucciones, el CPU se queda ejecutando

    repetidamente, y por siempre, la cuarta instruccin. Ello debido a la particularidad de dicha instruccin: observar que decrementa en una unidad el contenido del contador de programa, y con ello, vuelve a tener la direccin de la cuarta instruccin.

    La ltima instruccin es un ejemplo de instruccin de salto, y ha permitido que el CPU no ejecute la instruccin que est a continuacin (direccin $005).

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 18 21/03/2006

    Computador hipottico Para mostrar la secuencia que sigue un CPU para ejecutar las instrucciones, se va a considerar un computador hipottico con arquitectura Harvard, el cual consta de un CPU hipottico de 8 bits que puede direccionar 512 registros de memoria de datos (RAM) y 1024 registros de memoria de programa. Las instrucciones son de 12 bits, y por tanto, los registros de la memoria de programa tambin son de 12 bits. Cuenta con los siguientes registros:

    PC Contador de programa de 10 bits IR Registro de instrucciones de 12 bits R0 acumulador de 8 bits R1 acumulador de 8 bits MAR Registro de almacenamiento temporal de 9 bits el cual almacena la direccin

    del registro de la memoria de datos que se quiere acceder. En la figura se muestra un diagrama simplificado de este computador hipottico con los registros mencionados, la memoria de programa y la memoria de datos.

    En la figura se intenta mostrar lo siguiente:

    Las salidas del contador de programa, PC, van conectadas a las lneas de direcciones de la memoria de programa.

    Las salidas del registro MAR van conectadas a las lneas de direcciones de la memoria SRAM (memoria de datos).

    Las lneas de datos de la memoria de programa van conectadas a las entradas del registro IR.

    Algunas salidas del registro IR van conectadas a las entradas del registro MAR. Slo se han conetado los registros R0 y R1 al ALU. Las lneas de control, que son salidas del decodificador de instrucciones, son las que

    permiten: leer o escribir en la memoria SRAM, leer la memoria de programa, grabar

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 19 21/03/2006

    un valor en los registros R0, R1, MAR, seleccionar la operacin matmatica en el ALU.

    No se muestra la seal de reloj, pero sta llega a todos los registros, pues el CPU es un circuito sncrono.

    Estas caractersticas determinan que:

    El valor a grabar en el registro IR, quede determinado por el contenido del contador de programa. Pues el contenido del registro PC indica la direccin de memoria que se leer, y por tanto, la instruccin que leer.

    Si se va a leer un registro de la memoria de datos, dicho registro ser el que tenga una direccin numricamente igual al contenido del registro MAR.

    Que ciertos bits del registro IR puedan grabarse en el registro MAR permite implementar instrucciones que lean o escriban en la memoria de datos.

    En este CPU hipottico slo se pueden efectuar operaciones aritmticas con los contenidos de los registros R0 y R1. Por tanto, para efectuar cualquier operacin matemtica, necesariamente deben copiarse antes los valores en estos registros.

    Las seales de control que van a las lneas de control de las memorias, registros y el ALU son generadas por el decodificador de instrucciones,

    Consideremos adems que este CPU hipottico reconoce tres instrucciones, cuya operacin y codificacin en binario se muestra en la tabla, donde se ha resaltado en negrita el cdigo de operacin de cada instruccin. Instruccin Nombre

    abreviado Operacin Descripcin de operandos Codificacin binaria

    Copiar en un acumulador el contenido de un registro de la memoria de datos

    COPA Ri (K) K: direccin del registro de la memoria de datos a leer (9 bits) Ri: uno de los registros R0 R1

    10ik kkkk kkkk i=0, registro R0 i=1 registro R1 k..k: la direccin

    Sumar contenido de R0 y R1 y almacenar resultado en R0

    SUMA R0 R0+R1 0100 0000 0000

    Copiar en un registro de la memoria de datos el contenido de un acumulador

    COPM (K) Ri K: direccin del registro de la memoria de datos a leer (9 bits) Ri: uno de los registros R0 R1

    11ik kkkk kkkk i=0, registro R0 i=1 registro R1 k..k: la direccin

    Por ejemplo, si se quiere copiar el contenido de la direccin $21 (0b000100001) en el registro R1, debe emplearse la primera instruccin codificada en binario as: 1010 0010 0001

    Pasos en la ejecucin de cada instruccin: Usando la nomenclatura previamente vista, y del diagrama simplificado, se muestra la secuencia de pasos que ejecutara el CPU internamente, para ejecutar cada instruccin. Cada paso, por simplicidad, asumiremos que toma un ciclo de reloj.

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 20 21/03/2006

    Ciclo de captacin: El ciclo de captacin consiste en la lectura de la instruccin, y el incremento del contador de programa, para que apunte a la prxima instruccin a ejecutar. Este ciclo es el mismo para cualquier instruccin.

    1. IR (PC) 2. PC PC +1

    Ciclo de ejecucin de la instruccin: La ejecucin es diferente para cada instruccin. Se muestran la secuencia para cada instruccin.

    Instruccin: COPA, con registro R0 1. MAR IR[0..8] 2. R0 (MAR)

    Instruccin COPA, con registro R1 1. MAR IR[0..8] 2. R1 (MAR)

    Instruccin: SUMA 1. R0 R0 + R1

    Instruccin COPM, con R0 1. MAR IR[0..8] 2. (MAR) R0

    Instruccin COPM, con R1 1. MAR IR[0..8] 2. (MAR) R0

    Ejemplo Se quiere hacer un programa para el computador hipottico que sume dos nmeros de 8 bits contenidos en las direcciones $37 y $38 de la memoria de datos. El resultado debe almacenarce en la direccin $40. El programa debe comenzar en la direccin $000. Una solucin, utilizando las instrucciones de la tabla es:

    1. Copiar en R0 el contenido de la direccin $37 2. Copiar en R1 el contenido de la direccin $38 3. Sumar R0 y R1 y guardar resultado en R0

  • Curso: Sistemas Digitales Especialidad: Ing. Electrnica Profesor: Ing. Hugo Pratt Pontificia Universidad Catlica del Per rea de circuitos y sistemas

    Captulo1Parte2 rev. 9 21 21/03/2006

    4. Copiar R0 en direccin $40. Utilizando la representacin abreviada:

    1. R0 ($37) 2. R1 ($38) 3. R0 R0 + R1 4. ($40) R0

    Como el programa debe comenzar en la direccin $000, la primera instruccin debe grabarse en la direccin $000 de la memoria de programa, la segunda en la direccin 1, y as sucesivamente. En la tabla se muestran las instrucciones

    Operacin direccin de memoria de programa

    contenido de la memoria (binario)

    R0 ($37) $000 1000 0011 0111 R1 ($38) $001 1010 0011 1000

    R0 R0 + R1 $002 0100 0000 0000 ($40) R0 $003 1100 1000 0000