6502 Basico – Saltos, Branches, Subrutinas

Instrucciones de salto

Las instrucciones de salto son el equivalente al GOTO del BASIC, con la diferencia que algunas son condicionales, o sea, ejecutan el salto si ocurre algo, generalmente en el registro de STATUS. Generalmente hacemos uso de las mismas luego de alguna operacion de comparacion, o simplemente un incremento o decremento de un registro.
A continuacion tenemos una tabla con las mas comunes, si queres ver todas anda a Branch Instructions.

Instruccion Accion
JMP – JuMP Hace un salto a la direccion de memoria que indiquemos. equivalente a GO TO en BASIC
BEQ – Branch on EQual zero

BNE – Branch on Not Equal zero
Salta si el resultado de la ultima operacion es igual a cero para BEQ, o o distinto a cero para BNE. La longitud de los saltos no puede ser menor a 127 bytes de distancia hacia atras, o 128 hacia adelante. Esto es asi porque el operando es un byte con signo, que establece cuantos bytes tiene que saltar (el salto es relativo, por lo tanto el codigo es relocalizable de esta manera). Por suerte en el macro assembler solo ponemos la etiqueta hacia donde queremos saltar, y el calculo lo realiza el programa.
JSR – Jump to SubRoutine
RTS – ReTurn from Subroutine
Hace un salto hacia la direccion de memoria, guarda el valor del Program Counter en el Stack, y cuando llega al RTS retorna a la posicion de memoria siguiente que se ejecuto la instruccion. El equivalente del GO SUB de BASIC.

No pongo mas, porque para los objetivos proximos de este tutorial son mas que suficientes, y si encuentro alguna otra instruccion explicaré que hace… tampoco es cuestion de llenar de teoria, con que sepas esto es suficiente.

Instrucciones de comparación

Voy a explicar la instruccion CMP, que compara un valor (segun su direccionamiento) con el acumulador. Elijo esta porque es la que tiene mas modos de direccionamiento, CPX y CPY son iguales, salvo que solo tienen los modos de direccionamiento Inmediato, Zero page y Absoluto.

Las instrucciones de comparacion setean los flags del STATUS como si se hubiese llevado a cabo una resta, Si el valor en el acumulador es igual se establece el flag Zero. Si queremos hacer comparaciones tipo ‘menor’, ‘mayor’, etc… hay que jugar un poco mas con los bits de STATUS…

Los modos de direccionamiento soportados son muy similares a los de la instruccion LDA, por lo que no considero que haya que explicar mucho. Si entendiste lo anterior, ya sabes esto.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s