Anda di halaman 1dari 9

TÉCNICAS Y ESTRUCTURAS DIGITALES

Tema: MP6800 – Modos de Direccionamiento TP


18
Ingeniería Informática – Licenciatura en Sistemas
Apellido y Nombre: LU:
2018 Carrera: Fecha:

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.

Figura 1. Microprocesador 6800.

En la figura pueden identificarse los siguientes terminales:


 A0-A15: bus de direcciones de 16 líneas que permite direccionar 64 KB de memoria
 D0-D7: bus de datos de 8 líneas, para lectura/escritura de datos de 8 bits (registros de memoria)
 BA (buses disponibles): con valor lógico 0 esta línea indica que el microprocesador tiene el control de los buses, y con
valor lógico 1 implica que los buses están disponibles para uso de los dispositivos (el micro está detenido o en espera).
 HALT!: el valor lógico 1 de este terminal implica que el microprocesador funciona normalmente, mientras que el valor
lógico 0 indica que el micro completa la instrucción actual y se detiene.
 VMA (dirección de memoria válida): esta señal indica a los dispositivos del sistema que la dirección presente en el bus
de direcciones es válida.
 Ø2: este terminal es la entrada de la señal de fase 2 del reloj del sistema.
 Ø1: este terminal es la entrada de la señal de fase 1 del reloj del sistema.
 RW!: indica a las unidades del sistema si el microprocesador se encuentra en estado de lectura (valor lógico 1) o de
escritura (valor lógico 0)
 DBE (habilitación de la barra de datos): esta señal (valor lógico 1) permite que los datos se transfieran al bus.
 TSC: cuando esta línea asume valor lógico 1, el bus de direcciones y la línea R/W! pasan a estado de alta impedancia,
mientras que las líneas VMA y BA pasan a nivel lógico 0.
 NMI! (interrupciones no 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

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.

DIAGRAMA DE FLUJO PC Tamaño (bytes) PROGRAMA MODO DE DIRECCIONAMIENTO


$2000 1 CLRA Inherente
$2001 1 CLRB Inherente
$2002 1 INX Inherente
$2003 1 INX Inherente
$2004 1 INX Inherente
$2005 1 SWI Inherente

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.

DIAGRAMA DE FLUJO PC Tamaño (bytes) PROGRAMA MODO DE DIRECCIONAMIENTO


$0400 1 CLRA Inherente
$0401 3 LDX #$0006 Inmediato
$0404 2 ADDA $00 Directo
$0406 2 ADDA $01 Directo
$0408 2 ADDA $02 Directo
$040A 3 ADDA $0003 Extendido
$040D 3 ADDA $0004 Extendido
$0410 3 ADDA $0005 Extendido
$0413 2 ADDA $00,X Indexado
$0415 2 ADDA $01,X Indexado
$0417 2 ADDA $02,X Indexado
$0419 2 ADDA $03,X Indexado
$041B 1 SWI Inherente

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.

DIAGRAMA DE FLUJO PC Tamaño (bytes) PROGRAMA MODO DE DIRECCIONAMIENTO


$0100 1 CLRA Inherente
$0101 3 LDX #$2000 Inmediato
$0104 2 ADDA $00,X Indexado
$0106 1 INX Inherente
$0107 3 CPX #$2120 Inmediato
$010A 2 BLE $F8 Relativo
$010C 3 STAA $1FFF Extendido
$010F 1 SWI Inherente

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.

2. Complete la siguiente tabla, indicando por cada instrucción

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:

PC Actual PC Final Offset


$7F26 $7F44 $1C
$3779 $3777 $FC
$ED8D $ED7F $F0
$BD82 $BDF9 $75
$941D $940A $EB
$8B17 $8B70 $57
$33B6 $3432 $7A

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.

PC Mnemotécnica Modo de Direccionamiento Cantidad Ciclos Hexadecimal


CLRB
LDX #$3200
UNO LDAA $00,X
CMPA #$00
BEQ DOS
ANDA %10000001
CMPA #$00
BNE DOS
ADDB $00,X
DOS INX
CPX #$33FF
BLE UNO
STAB $E000
SWI

8. Dado el siguiente programa


PC Instrucciones Modo de Direccionamiento
a) Determine el propósito del
$1F00 CLRA programa
LDAB $10 b) Indique el valor del PC y modo
LDX #$2000 de direccionamiento de cada
E2 CMPB #$00 instrucción
BEQ E1 c) Calcule el valor de offset para
ADDA $00,X las etiquetas E1 y E2
INX
DECB
BRA E2
E1 STAA $F000
SWI

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.

15. Dado el siguiente programa:


PC Instrucciones Modo de Direccionamiento a) Determine el propósito del programa.
$B3AB LDX #$0000 b) Indique el valor del PC y modo de
LDAA $00,X
NEGA direccionamiento de cada instrucción y
L1 STAA $FF,X c) Calcule el valor del offset
INX correspondiente a la etiqueta.
CPX #$FE
BGE L1
SWI

16. Dado el siguiente programa:


PC Instrucciones Modo de Direccionamiento a) Determine el propósito del programa.
$03B0 LDAB $30 b) Indique el valor del PC y modo de
CLRA
LDX #$5100 direccionamiento de cada instrucción y
L1 CMPB $00,X c) Calcule el valor del offset
BNE L2 correspondiente a las etiquetas L1 y L2.
INCA
L2 INX
CPX #$5BFF
BLE L1
STAA $1000
SWI

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

Anda mungkin juga menyukai