Documente Academic
Documente Profesional
Documente Cultură
PROBLEMAS RESUELTOS
A. Microprocesador 6800
El Motorola MC6800 (6800) es un microprocesador fabricado por Motorola, lanzado al mercado en 1975. La estructura general
del 6800 se presenta en la figura 1.
Página 1
atención de interrupciones.
IRQ! (interrupciones enmascarables): cuando un dispositivo envía un valor lógico 0 a este terminal, el microprocesador
completa la ejecución de la instrucción actual, salva el estado del sistema y ejecuta la rutina de atención de
interrupciones. Esto está sujeto al bit I del Registro de Códigos de Condición (CCR).
+5V: corresponde al terminal positivo de la fuente de alimentación del sistema.
GND: corresponde al terminal negativo de la fuente de alimentación del sistema.
RESET!: este terminal se utiliza para arrancar el microprocesador.
Además el 6800 cuenta con los siguientes registros:
Acumulador A (Acc. A): es un registro de 8 bits que se utiliza para almacenamiento temporario de las operaciones
realizadas por la ALU.
Acumulador B (Acc. B): es un registro de 8 bits que se utiliza para almacenamiento temporario de las operaciones
realizadas por la ALU.
Registro Índice (IDX): es un registro de 16 bits (2 bytes) que se utiliza para modificar direcciones en el modo de
direccionamiento indexado.
Contador de Programa (PC): es un registro de 16 bits (2 bytes) que contiene la dirección de la próxima instrucción a
ejecutarse. Se incrementa automáticamente al iniciar el ciclo de ejecución de la instrucción actual.
Registro Puntero de Pila (SP): registro de 16 bits que contiene la dirección de un segmento de memoria que almacena el
estado de los registros del microprocesador en caso de atender una interrupción o ejecutar un salto a subrutina.
Registro de Códigos de Condición (CCR): es un registro de 8 bits usado por las instrucciones de bifurcación para
determinar si deben producirse o no saltos en la secuencia de un programa. Cabe destacar que los bits del CCR se
modifican con la ejecución de las instrucciones, por lo que cada bit de este registro tiene un significado específico:
1 1 H I N Z V C
7 6 5 4 3 2 1 0
Los bits 6 y 7 toman siempre el valor lógico 1, y no se usan para condicionar bifurcaciones en el programa. El bit H
indica, con valor 1, si una operación aritmética produce un arrastre de medio byte en el resultado. El bit I indica, con
valor 1, que se inhiben las interrupciones enmascarables, y con valor 0 que el microprocesador admite interrupciones
por la línea IRQ!. El bit N asume valor 1 si el resultado de una operación aritmética produce un valor negativo (bit más
significativo 1), 0 en caso contrario. El bit Z asume valor 1 si el resultado de una operación aritmética produce un valor
cero, 0 en caso contrario. El bit V asume valor 1 si como resultado de una operación aritmética se produce desborde del
acumulador, 0 en caso contrario. Finalmente, el bit C asume valor lógico 1 si al ejecutarse una operación se produce un
arrastre desde el bit más significativo del resultado, 0 en caso contrario.
B. Modos de Direccionamiento
El microprocesador 6800 maneja los siguientes modos de direccionamiento:
Inherente, implícito o implicado: la ejecución de instrucciones en este modo no requiere de datos de memoria, se
realiza exclusivamente sobre los registros internos del procesador. Las instrucciones en este modo son de un byte.
Inmediato: en este modo, los datos necesarios para la ejecución de la instrucción se encuentran en la/s siguiente/s
posición/es de memoria a continuación del código de operación (OPCODE). Las instrucciones en este modo son de 2 (en
algunos casos de 3) bytes.
Directo: en este modo, la dirección de memoria que sigue al código de operación contiene la dirección en la que se
encuentra el operando. Las direcciones especificadas son de 8 bits, es decir que sólo pueden referenciarse posiciones
Página 2
en el rango 00 h a FF h. Las instrucciones en este modo son de 2 bytes.
Extendido: en este modo, la dirección de memoria que sigue al código de operación contiene la dirección en la que se
encuentra el operando. Las direcciones especificadas son de 16 bits, de modo que puede accederse a todo el mapa de
direccionamiento del sistema (64 KB). Las instrucciones en este modo son de 3 bytes.
Indexado: en este modo, la dirección de memoria que sigue al código de operación contiene un valor denominado
“desplazamiento” que se suma al valor del registro índice (sin modificar el valor del IDX) para determinar la dirección
efectiva del operando de la instrucción. Las instrucciones en este modo son de 2 bytes.
Relativo: en este modo, la posición siguiente al código de operación contiene un valor denominado “offset” que indica
la cantidad de posiciones de memoria que deben saltarse hacia adelante (offset positivo) o hacia atrás (offset negativo)
para ejecutar la próxima instrucción, en caso de cumplirse la condición analizada por la instrucción de bifurcación. Si tal
condición no se verifica, se continúa la ejecución secuencial. Las instrucciones en este modo son de 2 bytes.
C. Ejemplos
Ejemplo 1: Escriba un programa para M6800 que borre los acumuladores e incremente en 3 el valor del registro índice del
microprocesador. Indique para cada instrucción el modo de direccionamiento utilizado. Además, suponiendo que el programa se
inicia en la dirección $2000, consigne el valor del PC para cada instrucción.
Ejemplo 2: Escriba un programa para M6800 que sume los valores almacenados en el segmento de memoria que va de la
dirección $0000 a $0009. Indique para cada instrucción el modo de direccionamiento utilizado. Además, suponiendo que el
programa se inicia en la dirección $0400, consigne el valor del PC para cada instrucción y el tamaño en bytes de la instrucción.
Página 3
Si bien la suma de los valores del segmento puede realizarse usando un solo modo de direccionamiento, a fines ilustrativos, ésta
se implementa a través de los modos directo, extendido e indexado.
Ejemplo 3: Escriba un programa para M6800 que sume los valores almacenados en el segmento de memoria que va de la
dirección $2000 a $2120, y que guarde este resultado en la posición $1FFF. Indique para cada instrucción el modo de
direccionamiento utilizado. Además, suponiendo que el programa se inicia en la dirección $0100, consigne el valor del PC para
cada instrucción y el tamaño en bytes de la instrucción.
Para obtener el valor del offset que especifica la instrucción de salto se utiliza la siguiente expresión:
𝑃𝐶𝑓𝑖𝑛𝑎𝑙 = 𝑃𝐶𝑎𝑐𝑡𝑢𝑎𝑙 + 2 + 𝑂𝑓𝑓𝑠𝑒𝑡
despejando se obtiene
𝑂𝑓𝑓𝑠𝑒𝑡 = 𝑃𝐶𝑓𝑖𝑛𝑎𝑙 − (𝑃𝐶𝑎𝑐𝑡𝑢𝑎𝑙 + 2)
Para el ejemplo el offset se calcula como sigue:
Offset=$0104 – ($010A+2)
Offset=$0104 – $010C
Offset=-8
Offset=$F8 (en complemento a 2)
PROBLEMAS A RESOLVER
1. Responda:
a) Defina el 𝜇𝑝 6800 desde un punto de vista aislado y desde un punto de vista integrado a la arquitectura general del
sistema; caracterícelo (suministro de energía que necesita, tiempo que le lleva la ejecución de las instrucciones,
velocidad a la que trabaja)
b) Realice un cuadro comparativo con las principales características de las familias de microprocesadores de Intel, a partir
del 8086 a la fecha, estableciendo ventajas y desventajas entre los diferentes modelos.
c) ¿Qué es el registro de código de condiciones (CCR)? ¿Qué situaciones modifican sus bits?
d) ¿Qué es el set de instrucciones del 𝜇𝑝 6800? ¿Cómo se agrupan dichas instrucciones?
e) Describa la estructura genérica de instrucciones (1, 2 y 3 bytes) para todos los modos de direccionamiento del
𝜇𝑝 6800¿Cómo encuentra el valor del operando en los distintos modos de direccionamiento? Proponga dos ejemplos
específicos para cada caso.
Página 4
a) Modo de direccionamiento
b) Tamaño en bytes (#)
c) Ciclos de reloj (~) y
d) Descripción de la operación (consulte el Resumen de Instrucciones del 6800).
Tamaño
Instrucción Modo de Direccionamiento Ciclos de Reloj (~) Operación
(bytes)
a) DEX Inherente 1 4 IDX-1 IDX
b) CMPB #$E0
c) LDAA $05,X
d) LDX $2800
e) ANDA #%10000001
f) BLE $82
g) LDAA #$F3
h) BRA $31
i) DECA
j) BNE $1A
k) TAP
3. Las instrucciones de salto ó bifurcación ayudan a plantear una estructura condicional o iterativa en un programa. En
general, su modo de direccionamiento es el relativo. Se pide:
a) Enumere y describa brevemente las instrucciones de salto
b) En la siguiente tabla complete los valores adecuados de offset y PCfinal utilizados en instrucciones de salto:
c) Dados los siguientes diagramas de flujo, escriba los programas para M6800 que reflejen tales comportamientos:
i) ii)
Página 5
iii) iv)
4. Realice el diagrama de flujo y codificación mnemotécnica de un programa que sume (en complemento a 2) las posiciones
de memoria $1004, $1005, $1006, $1007 y $1008. Considere que el resultado final se almacena en $1000. Además
indique qué ocurre con los bits del registro de códigos de condición tras cada suma parcial.
Contenido Posición Acumulador Bit7 Bit6 H I N Z V C
$10 $1008 $09 1 1 0 0 0 1 0 0
$45 $1007
$F8 $1006
$15 $1005
$C4 $1004
… …
$E3 $1000
5. Dado el siguiente diagrama de flujo determine el propósito del programa y realice la codificación mnemotécnica
correspondiente. Indique el valor del PC para cada instrucción considerando que el programa se almacena a partir de la
dirección $2000. Además, por cada instrucción, consigne tamaño, ciclos y modo de direccionamiento.
6. Realice el diagrama de flujo y codificación mnemotécnica de un programa que compare los valores almacenados en las
posiciones $000A, $000B y $000C, y determine cuál es el mayor. Considere que el resultado de la comparación se
almacena en $000F ($01 si el primero es mayor, $02 si el segundo es mayor o $03 si el tercero es mayor)
Página 6
7. Analice el siguiente programa, determine su propósito y realice el correspondiente diagrama de flujo y codificación
hexadecimal. Además indique el modo de direccionamiento y número de ciclos de cada instrucción, y calcule el offset
correspondiente a las etiquetas UNO y DOS. El programa inicia en $2F00.
9. Realice el diagrama de flujo y codificación mnemotécnica de un programa que determine cuántos valores negativos se
almacenan en el segmento de memoria comprendido entre las direcciones $2000 y $212F.
10. Codifique un programa que cuente los números pares, impares y ceros del segmento de memoria comprendido en el
rango de direcciones $4000 y $5000. Los valores de cuenta deben almacenarse en las 3 posiciones de memoria anteriores
al inicio del rango, respectivamente. Consigne el PC para cada instrucción, considerando que el programa se inicia en la
dirección $63FE.
11. Codifique un programa que determine el máximo valor de una serie de números almacenados en el segmento de
memoria que inicia en la dirección $3C00. Considere que la cantidad de elementos de la serie de datos está indicada en la
posición $21FF y que el máximo obtenido se almacenará en la posición $1010.
12. Codifique un programa que replique el contenido del segmento de memoria comprendido entre las direcciones $2600 y
$28FF, a partir de la dirección inicial del mapa. Indique el PC de cada instrucción, considerando que el programa inicia en
la dirección $4C00.
13. Dado el segmento de memoria comprendido entre las posiciones $000F y $00FF, codifique un programa que determine
cuántas veces se repite el valor almacenado en la dirección $01FF en este segmento. Almacene el resultado en $0100.
Página 7
PROBLEMAS PROPUESTOS
14. Realice el diagrama de flujo y codificación mnemotécnica de un programa que reemplace los valores negativos impares
del segmento de memoria comprendido entre las direcciones $8800 y $88FF por el valor almacenado en la posición
$0014.
17. Codifique un programa que calcule el producto, mediante sumas sucesivas, de las posiciones de memoria $0910 y $0B00.
Considere que los valores son positivos y que el resultado se almacenará en la dirección $1500.
18. Codifique un programa que calcule el cociente, mediante restas sucesivas, de las posiciones de memoria $4300 y $4400.
Considere que los valores son positivos y que el resultado se almacenará en la dirección $1000.
19. Dados 2 segmentos de memoria, de igual tamaño, codifique un programa que intercambie, posición a posición, su
contenido. Considere que el primer segmento se inicia en la dirección $0300, mientras que el segundo se inicia en $0B00,
indicándose su longitud en $02FF.
20. Dado un segmento de memoria que almacena caracteres ASCII codifique un programa que cuente las mayúsculas del
segmento. Considere que la dirección inicial de los datos es $7DE0 y que la final es $8000.
21. Dado un segmento de memoria que almacena palabras (secuencias de caracteres ASCII – letras), codifique un programa
que convierta las letras minúsculas a mayúsculas. Para ello tenga en cuenta que el rango de las mayúsculas es $41-$5A
(“A”-“Z”), mientras que el de las minúsculas es $61-$7A (“a”-”z”). Suponga que el segmento inicia en la dirección $1AAA.
Además tenga en cuenta que los espacios en blanco deben permanecer iguales y que el proceso de conversión finaliza
cuando se encuentra un “.”
Página 8
TÉCNICAS Y ESTRUCTURAS DIGITALES
22. Codifique un programa que copie, en orden inverso, el contenido del segmento de memoria comprendido entre las
direcciones $9A00 y $9EFF. Considere que el segmento se respaldará a partir de la dirección $2B00.
23. Codifique un programa que genere, a partir de los datos de un segmento de memoria, un nuevo segmento con aquellos
que sean menores al valor almacenado en $00F2. Para ello, considere que el segmento original está comprendido entre
las direcciones $2200 y $23FF, y que el nuevo segmento se almacenará a partir de $4C00.
Página 9