1- Obtener el ordinograma, comentarios y hacer el ensayo para varios valores de operandos; de los siguientes programas.
a) CLC b) NOP c) LDA # 03
SED SED AND # 0F
LDA # 03 LDA # 12 STA 32
ADC # 09 STA 1A BRK
STA 0F LDA # 07
BRK STA 1B
LDA 1A
CLC
ADC 1B
STA 1C
BRK
2- Poner a 1 el bit de mas peso de la posición primera de la pagina cero, sin alterar el resto de los bits y depositar el resultado en la posición 1B de la misma pagina.
3- Obtener el ordinograma y concluir lo que hace el siguiente programa en mnemónico.
NOP
LDA 40
CMP 41
BCS 02
LDA 41
STA 42
BRK
4- Realizar un programa de control de tiempo o retardo, consistente en decrementar 99 veces el registro X de forma que por cada decremento de este el registro Y lo hace 99 veces. Además esta temporizaron se repetirá el nº de lista veces, usando la posición de memoria 100 + nº de lista.
Dibujar ordinograma, ensayar y medir el tiempo tanto en el ensamblador como en el sistema de desarrollo.
5- Escribir el programa para el siguiente ordinograma, y experimentarlo en el sistema de desarrollo, sobre la placa de E/S.
CONFG.
PB SALIDA
ENCENDER
LED
TEMPORIZACION
APAGAR
LED
TEMPORIZAR
SOLUCION DE LOS EJERCICIOS
1º - Ejercicio:
CLC
SED
LDA #03
ADC #09
STA 0F
BRK
Primero pone el flag “C” del registro de estado a cero.
Segundo pone el a uno el flag “D” del registro de estado.
Luego carga en el acumulador “A” el dato 03.
A continuación hace una realiza una suma entre; el contenido del acumulador más él
dato 09 y más el carry, el resultado se guarda en el acumulador.
Ya acabando se guarda el contenido del acumulador en la posición de memoria 0F
de la pagina cero.
Por ultimo finaliza el programa.
NOP
SED
LDA #12
STA 1A
LDA #07
STA 1B
LDA 1A
CLC
ADC 1B
STA 1C
BRK
La primera instrucción no opera, es una perdida de 2 microsegundos.
Después pone a uno el flag “D” del registro de estado.
Cargamos en el acumulador el dato 12 en decimal.
El contenido de acumulador pasa a gravarse en la posición 1A de la pagina cero, que
este caso el contenido es doce.
Cargamos en el acumulador el dato 07 en decimal.
Y se carga el contenido del acumulador a la posición 1B de la pagina cero.
Cargamos otra vez en el acumulador el contenido de la posición 1A de la pagina
cero.
Pone a cero el flag “C” del registro de estado; es decir pone a cero el carry.
Realiza una suma entre el contenido del acumulador mas el contenido de la posicion
1B de la pagina cero y más el carry, y el resultado lo guarda en el acumulador.
Grava el contenido del acumulador en la posición 1C de la pagina cero, que en este
caso el resultado de la suma.
Finaliza el programa.
LDA 31
AND #0F
STA 32
BRK
Primero carga en el acumulador el contenido de la posición 31 de la pagina cero.
Luego realiza una multiplicación lógica entre el contenido del acumulador, que en
este caso es el contenido de la posición 31 y el dato 0f.
Posteriormente gravamos el contenido del acumulador, que es el resultado de la
multiplicación en la posición 32 de la pagina cero.
Por ultimo finaliza el programa.
2º - Ejercicio:
LDA 01
ORA #$80
STA 1B
BRK
3º - Ejercicio:
NOP
LDA 40
CMP 41
BCS 02
LDA 41
STA 42
BRK
Este programa inicialmente tiene una orden que no opera, es decir que no hace nada se pone para perder 2 microsegundos de tiempo. Pero lo que realmente hace este programa es comparar el contenido de las posiciones de memoria 40 y 41, ambas de la pagina cero; Y si el contenido de la posición 40 es mayor o igual que el de la posición 41, entonces grava el contenido del acumulador, que en este caso es el contenido de la posición 40, lo grava a la posición 42, y finaliza el programa. Pero si el contenido de la posición 40 es menor que el de la posición 41, entonces grava en el acumulador el contenido de la posición 41 y lo pasa a la posición 42, y luego finaliza.