Por DaRKWiZaRDX
La mayoría de movimiento de datos que harás en ASM será a través de registros. Se trata de pequeñas zonas de memoria (8 bits cada uno) que están contenidas DENTRO del procesador y no están en la RAM, su tiempo es acceso es miles de veces más corto que el acceso a ROM o a RAM, por lo que se los usa para casi todo, en la NES cuentas con varios registros y cada uno tiene su utilidad.
A (Acumulador)
Éste será el registro que más uses, por lejos, ya que es el único registro sobre el
que se pueden
hacer operaciones aritméticas, y además suele usarse para modificar a los que no
pueden
usarse con tal fin, una vez que veas algo de código (si no lo viste aún) verás
lo útil que
llega a ser este registro (realmente es vital :P).
X (Indexer X) / Y (indexer Y)
Son registros muy útiles, que se usan para "indexar" direcciones (ya veremos qué
significa
eso más adelante), para hacer bucles (tambien llamados "ciclos"), no
puedes
realizar ninguna operación aritmética sobre X e Y, excepto las de incremento y decremento
(por 1),
que es lo útil para los bucles, cuando empecemos a ver direcciones indexadas
veremos la utilidad de estos registro.
S (puntero de pila)
Es un registro ***QUE NO DEBE SER MODIFICADO A MENOS QUE SEPAS MUY BIEN LO QUE
HACES***,
contiene la dirección de memoria del último lugar usado en la pila, es el
puntero al
próximo valor que se sacará con un PLA. A menos que te dediques a la
programación alienígena deja este registro en paz, que se controla bastante bien
solito :)
PC (Program counter)
Es un registro que contiene la dirección actual del código que se ejecuta,
generalmente
está constantemente cambiando a alta velocidad, por lo que para ver su actual
valor habría
que detener al procesador de alguna manera (un bucle infinito tal vez).
El registro P es también conocido como registro de flags, y tiene varios usos,
los 8 bits
de este byte tienen cada uno una función distinta, en realidad se usan para ver
los
resultados de una operación aritmética y hacer bucles y otras cosas, aunque
tiene usos
muy variados.
Los flags son cada uno de los valores (bits), que pueden ser 1 o 0, si el flag
está
"activado" es 1, y "desactivado" es 0.
Bits 7 6 5 4 3 2 1 0
Nombres S V B D I Z C
Bit 0 -> Carry flag: Este bit se activa si la última operación
dio un
acarreo y de lo contrario se pone a 0, si en una comparación el operando es
mayor al registro utilizado se pone a 1, si es menor se pone a 0.
Bit 1 -> Zero flag: Éste bit se activa si la última operación
dio como
resultado 0, y se desactiva si el resultado no fue 0.
Bit 2 -> Interrupt flag: Éste es el flag de anulación de interrupciones. Si este
flag
está a 1, los interrupciones están desactivadas, sino están activadas (duh).
Bit 3 -> Decimal flag: Éste es el flag de modo decimal. Si está activado, las
operaciones
ADC y SBC usan los valores fuentes como BCD (binary coded decimal).
Bit 4 -> Break flag: Éste flag se pone a 1 si se está ejecutando una
interrupción de
software (BRK).
Bit 5 -> No se utiliza, supuestamente debe estar siempre a 1.
Bit 6 -> Overflow flag: Cuando una operación aritmética produce un resultado que
no se
puede representar en 1 byte, el flag se activa.
Bit 7 -> Sign flag: Se activa si el último resultado
fue negativo, se
desactiva si fue positivo.
Los flags usados más comúnmente son C, Z, y V.
Es importante que entiendas la importancia de los registros y cuáles no deben ser modificados (lo digo más que nada por el registro de pila, S). A, X e Y serán, por lejos, los registros que más uses, pero eso lo entenderás mejor cuando veas algo de código.