Вы находитесь на странице: 1из 21

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
0 4 3 15
OpCode
9 15
Rr Rd
4 8 0
OpCode Rr Rd
5 6 15 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
4 8
A
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 r r r r AAAA
b) 0000 11r d dddd r r r r
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



EJ EMPLO 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 EJ M1A.ASM
OPT HC11 * EL AS68 REQUIERE ESTA LINEA!
ORG $C000
INICIO LDX #$CD00 ; X =puntero a bloque fuente
LDY #$D000 ; Y =puntero a bloque destino
LDAB #30 ; B =contador
SIGUE LDAA 0,X
STAA 0,Y
INX ; X apunta a siguiente dato fuente
INY ; Y con nueva direccion destino
DECB
BNE SIGUE ; se copiaron todos los datos?
FIN
END
comentarios
etiquetas
directivas
nemonico
operando
comentario
directiva

EJ EMPLO DE PROGRAMA
comentarios
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 contador
LDI R29, 1 ; R29 R28 son registro Y
LDI R28, 0 ; Se hace Y=$100, inicio del destino
LDI R27, 0 ; R27 R26 son registro X
LDI R26, $60 ; Se hace X =$60 inicio de datos
SIGUE: LD R16, X+ ; se lee el dato y se incrementa X
ST Y+, R16 ; se copia el dato y se incrementa Y
DEC R17
BRNE SIGUE ; Si no se copiaron todos, seguir copiando
FIN: J MP 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 nombreIR.
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.

Capturar
siguiente
instrucci n
INICIO PARADA
Ejecutar
Instruccin

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


Oper aci n di r ecci n Memor i a
Fl ash

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
10i k 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
11i k 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

Вам также может понравиться