CURSO DE ASSEMBLER
Por Willy Soft
8. Indexación Indirecta.
Continuamos con este “emocionante” curso de Assembler de 8-bits. Vimos hasta ahora que se pueden hacer animaciones con el computador, modificando el set de caracteres en una secuencia de tiempo. Esto permite mostrar diferentes cuadros mostrados en intervalos de tiempo regulares, lo que es la base de la animación. Ahora veremos que el procesador 6502 tiene una herramienta tremendamente útil: la indexación indirecta.
Hasta ahora vimos que podemos acceder a tablas fijas que tengamos insertadas en nuestro código. Pero, ¿qué pasa si requerimos tener una tabla con tablas de direcciones?. Es decir, utilizar una tabla con punteros que nos dirijan a otras tablas como, por ejemplo, datos de pantalla, animaciones más complejas, redireccionamiento de otras pantallas, etc. Para ello, se diseñó en el 6502 un conjunto de instrucciones que permitan trabajar con dicha necesidad. El formato más utilizado es el siguiente
lda (puntero),y
sta (puntero),y
Este modo se llama indirecto indexado.
Hay que tener en cuenta lo siguiente
1. El puntero es una posición de memoria entre 0 y 255. NO SE PUEDE UTILIZAR POSICIONES SUPERIORES.
2. En este caso, SÓLO SE INDEXA CON EL ÍNDICE Y. Es decir, NO EXISTE LA INSTRUCCIÓN “lda (puntero),x”. Va a generar error
¿Qué hace esta instrucción? Veamos con ejemplos.
Ejemplo 1:
Dirección |
Valor |
puntero |
$00 |
puntero+1 |
$20 |
ldy #$00
lda (puntero),y
Esta última instrucción equivale a un “lda $2000”
Ejemplo 2:
Dirección |
Valor |
puntero |
$85 |
puntero+1 |
$45 |
ldy #$00
lda (puntero),y
Esta última instrucción equivale a un “lda $4585”
Ejemplo 3:
Dirección |
Valor |
puntero |
$00 |
puntero+1 |
$40 |
ldy #$05
lda (puntero),y
Esta última instrucción equivale a un “lda $4005”. Notar que aquí el índice Y está en 5, por lo tanto se indexa según los valores dados en “puntero” y “puntero+1”
Si se fijan, todos los ejemplos los expresé en hexadecimal. Esto es así porque es más fácil interpretar a qué dirección representa. Les recomiendo encarecidamente utilizar este formato. Si fuese en decimal, sería así:
Dirección |
Valor |
Valor en decimal |
puntero |
$85 |
133 |
puntero+1 |
$45 |
69 |
Y la instrucción “lda (puntero),y” sería equivalente a “lda 133*256+69,y”, según lo visto en el capítulo 2 del mismo curso.
Existe otro modo: el indexado indirecto. Se lee parecido, pero no es lo mismo. Su formato es:
lda (puntero,x)
sta (puntero,x)
Notar que aquí se utiliza el puntero x, pero adentro del paréntesis. Aquí lo que hace es indexar primero, y después se dirige a la posición guardada en puntero+x y puntero+x+1. Pero esta forma no es muy utilizada, se usa más la primera.
Como ejemplo de uso práctico, les adjunto un programa más complejo, que anima 40 objetos en pantalla (nada de movimiento fino, sólo caracteres), de modo de utilizar el direccionamiento indirecto indexado. Si lo estudian bien, verán el uso práctico.
![]() |
PREGUNTA TUS DUDAS O DANOS TUS SUGERENCIAS EN EL FORO