Desafíos |
Nivel Fácil (1 estrella por Desafío) |
Desafío
1.
Basado en Log de Clase 1.
Explicar:
1.
LDA $1234
2. LDA #$458
3. LDX $1
4. STY #$ 85
Con
este tipo de respuesta:
Setear registro ____ (X/Y/A)?? a modo de ____
(8/16 bits) ?? para esto hay que _______ (reset/set)??
FLAG ___ (z,c,i,m,x) ?? de P.
(Ustedes
deben llenar ____ )
Respuesta
|
Desafío 2.
Escribe las instrucciones respectivas:
1. Si quiero cargar en A el valor 35.
2. Si quiero almacenar
en X el valor que esta dentro de la dirección $1234.
3. Si quiero almacenar
en Y el valor que esta dentro de $FF48FC. (Aquí hay
2 formas posibles, una fácil de una sola instrucción
y otra usando A, a ver si puedes hacer las 2 formas)
Respuesta
|
Desafío 3.
1. ¿Es posible hacer esto?
SEP #$20
LDA $1234
2. ¿y esto?
LDA #$05
STA $811234
Respuesta
|
Desafío 4.
1. Que sucede con A cuando esta en modo de 8 bits
y en modo de 16 bits para estos 2 casos : LDA $1234
y LDA #$1234
2. ¿Cual es el Largo
de un banco (en bytes) y de un Offset? ¿Cuantas direcciones
en TOTAL en la memoria podemos tener?
Respuesta
|
Desafío 5.
Hacer un trozo de código que haga esto:
1. Quiero meter
el valor 100 a la pila, luego meter 20 a $500 y luego
sacar lo de la pila y dejarlo finalmente en A.
2. Que saque de
la dirección $556C un valor y lo deje en X, que a ese
valor le sume 4 y el resultado lo deje en $556D. (que
los bancos no te importen)
Respuesta
|
Desafío 6.
Detectar los 2 errores que hay en este trozo de
código:
Suponer que en $80AABB esta el valor 0x1234 y que este
código empieza a ejecutarse a partir de la instrucción
$01552C.
SEP #$20 -> aquí
estamos en $01552C
LDA #$02
LDY $80AABB
PHK
PHA
STX #$A1F234
PLX x=02
PLY y=01
Como quedan A, X, Y al final?
Respuesta
|
Desafío 7.
1. Al hacer REP #$30 lo que hago es:
____ (cargar/almacenar/setear/resetear) ____(X/Y/A)
para que se pueda ____(almacenar/cargar/setear/resetear)
____ (datos/valores/direcciones/offsets) en modo de
_____(8/16/24) bits.
2. ¿Se podría deducir alguna "regla" a partir
de esta sentencia?
SR[30axy-20a-10xy]
Respuesta
|
|
Medio (2 estrellas) |
Desafío 1.
Hacer un trozo de código que permita: Meter en la
Pila (X + Y - A)*16
pero debes considerar que la Pila esta LLENA.
Respuesta |
Desafío 2.
Si tengo esto en la pila
| 0C |
| 0A |
| 04 |
--------
Hacer un solo trozo
de código que permita dejar la Pila así:
| 0A |
| 04 |
| 0C |
--------
y luego que la deje así:
| 04 |
| 0C + X | -> el resultado de
C0 + lo que tiene el registro X
| 0A |
------------
Respuesta |
Desafío 3.
Escribir un trozo de código que haga esto:
0xB X 0xA = Resultado1
0X05 X 0X04 = Resultado2
hacer luego la división Resultado1/Resultado2, luego
al Resto sumarle 0x7 y dejarlo en X
y al Cuociente restarle 0x3 y dejarlo en Y.
Respuesta |
Desafío 4.
Escribir un trozo de código que haga esto:
A partir de la división 0x16A/0x5, meta en la pila el
resultado de la operación aritmética
[Resto + Cuociente]*0x3 - 0x08 de esa división.
Respuesta |
Desafío 5.
Escribir un trozo de código que haga esto:
(X + 1)^5
Direct Page = RESTO DE ----------
Y
Nota: X debe estar en modo de 8 bits.
Respuesta |
Desafío 6.
Usando ciclos e indexación:
Escribir un trozo de código que saque consecutivamente
los 200 siguientes valores que se encuentren a partir
de la dirección $3000 y los vaya metiendo a partir de
esta otra dirección $5000.
Respuesta |
Desafío 7.
Hacer este algoritmo en asm 65816:
mientras Y < 10
{
si Y = 5
salta a subrutina hola
sino
salta a subrutina chao
} Y++
subrutina hola
meter actual valor de Y a partir de dirección
$1000
subrutina chao
X = 2*Y
meter en pila el valor de X
Respuesta |
|
Alto (3 estrellas) |
Desafío 1.
Escribir un trozo de código que meta en la pila la MULTIPLICACIÓN
de 50 valores hex (de 8 bits) consecutivos partiendo
del que se encuentre en la dirección $4000. Es decir,
que primero saca el valor que esta dentro de $4000 luego
le multiplica el del $4001, luego al resultado se le
multiplica el de $4002,..., así hasta multiplicarle
el que se encuentra en de $4031. Finalmente si esa suma
es Menor a 0x8000 se mete a la pila SINO dividir por
3 esa suma y probar de nuevo con el cuociente, si es
menor o igual a 0x8000 se mete recién en la pila, si
no, seguir dividiendo.
El algoritmo sería
así:
Obtener Multiplicación de 50 valores consecutivos
que se sacan a partir de $4000(sacamos el hex número
0) hasta el de $4031 (hex número 49). El resultado es
nuestro parámetro.
Ciclo (parámetro)
SI parámetro > 8000
Dividir/3
ejecutar Ciclo (resultado
División)
SINO
meter resultado en la
pila
|
Desafío 2.
Hacer un trozo de código que permita meter en la dirección
$1000 en adelante, TODOS los valores PARES o IMPARES
de 1 byte (0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,0x10,0x12,
etc...) que existan. Lo que determina si es par o impar
es que la dirección $10 será nuestro Flag de Paridad
(solo para el ejercicio), si en $10 hay un 0 entonces
metemos PARES, si es 1, entonces metemos los IMPARES.
|
|