El pasado mas presente que nunca

 

CURSO DE ASSEMBLER

Por Willy Soft

7. Comparaciones y saltos (branches).

Ya tenemos claro las primeras instrucciones para interactuar con el Atari. Ahora utilizaremos instrucciones que nos permitirán realizar las primeras decisiones. En el caso del procesador 6502, las decisiones son realizadas principalmente a través de las comparaciones y los saltos (branches).

El 6502 tiene una serie de registros que permiten realizar saltos de instrucciones, ya sean bytes más adelante o bien bytes más atrás. Estos saltos se hacen generalmente después de una comparación. La instrucción que se utiliza para comparar se llama CMP (CoMPare). Su utilización es la que sigue:

CMP #número

CMP dirección

Esta instrucción lo que hace es comparar entre el valor en el acumulador y el valor del argumento, ya sea como el valor en sí (para el caso del #) o bien el valor de memoria almacenada en la dirección especificada.

Ejemplos:

    lda #$04

    cmp #$05

 

 

    lda #$04

    sta $4000

    lda #$05

    cmp $4000

 

De manera análoga, existen las instrucciones CPX y CPY para comparar los registros X e Y, respectivamente.

Ahora, esas comparaciones no servirán de nada si no se toma una decisión al respecto. Dichas decisiones se implementan cuando se realizan branches (saltos). La lista de saltos son:

BEQ dirección (Branch if EQual): salta cuando el resultado de la comparación es igual.

BNE dirección (Branch if Not Equal): salta cuando el resultado de la comparación no es igual.

BPL dirección: salta si el valor en el registro es mayor o igual al comparado.

BMI dirección: salta si el valor en el registro es menor estricto al comparado.

BCS dirección: salta si el valor en el registro es mayor estricto al comparado.

BCC dirección: salta si el valor en el registro es menor o igual al comparado.

 

Ejemplos:

 

    lda #$04

    cmp #$04

    beq salta

 

    lda #$05

    cmp #$04

    bne salta

 

    lda #$08

    cmp #$04

    bpl salta

 

    lda #$03

    cmp #$04

    bmi salta

 

    lda #$04

    cmp #$03

    bcs salta

 

    lda #$07

    cmp #$0a

    bcc salta

 

Ahora, se pueden combinar los saltos, a fin de dar distintas condiciones. Ejemplo:

 

    lda $2fc

    cmp #$0c

    beq salta

    bmi salta.menor

 

Una salvedad: para el caso de las instrucciones BPL y BMI, esta tiene un rango de 128 bytes ($80 en hexadecimal) para considerar “mayor o igual” o “menor estricto”. Veamos estos ejemplos:

 

    lda #$04    ;4 en decimal

    cmp #$83    ;131 en decimal

    bpl rutina2

 

En este caso va a “rutina2”, ya que la diferencia es menor a 128 bytes.

 

    lda #$04

    cmp #$84

    bmi rutina3

 

    En este caso va a “rutina3”, ya que la diferencia es mayor a 128 bytes.

 

Bueno, como este curso es práctico, vamos a ver un ejemplo concreto. Por favor examínenlo, ya que incluye varios conceptos del Atari 8-bits, a saber:

- Lectura de posiciones de memoria de chips del Atari, en este caso, leyendo la posición CONSOL ($D01F en hex, 53279 en decimal)

- Comparaciones con distintos valores.

- Ejecución de rutinas de la ROM en el Atari (en este caso, la dirección $C642 contiene una rutina que sirve para imprimir una línea completa según lo indicado en los registros X e Y. Con eso nos ahorramos el tener que imprimir carácter por carácter.

Click para bajar texto

 

Nos vemos en el siguiente capítulo.

 

PREGUNTA TUS DUDAS O DANOS TUS SUGERENCIAS EN EL FORO

 

IR a capítulo 1  2  3  4  5  6  7  8  9