Instrucciones del microprocesador 6502

Escrito el Sábado 21 de Marzo del 2009 por Ealdor

Hay un total de 56 instrucciones en el 6502, y más en el 65C02. La mayoría de las instrucciones hacen uso de más de un modo de direccionamiento y cada combinacion instrucción/direccionamiento tienen un particular codigo de operación que lo identifica exactamente. Así que:

A9 = LDA #$aa (carga del acumulador con modo de direccionamiento inmediato).
AD = LDA $aaaa (carga del acumulador con modo de direccionamiento absoluto).
etc.

Algunas instrucciones del 6502 hacen uso de lógica de bits (bitwise). Esto incluye AND, OR, y EOR (Exclusive-OR). Las tablas siguiente ilustran los efectos de estas operaciones:

AND    1    1    ->    1    "ambos"
       1    0    ->    0
       0    1    ->    0
       0    0    ->    0

OR     1    1    ->    1    "o uno u otro o ambos"
       1    0    ->    1
       0    1    ->    1
       0    0    ->    0

EOR    1    1    ->    0    "uno u otro pero no ambos"
       1    0    ->    1
       0    1    ->    1
       0    0    ->    0

Por lo tanto, $FF AND $0F = $0F ya que,

1111 1111
0000 1111
0000 1111 = $0F

AND es útil para enmascarar bits. Por ejemplo, para enmascarar los bits de mayor orden de un valor y AND con $0F:

$36 AND $0F = $06

OR es útil para activar un determinado bit:

$80 OR $08 = $88

1000 0000 ($80)
0000 1000 ($08)
--
1000 1000 ($88)

EOR es útil para cambiar bits:

$AA EOR $FF = $55

1010 1010 ($AA)
1111 1111 ($FF)
0101 0101 ($55)

Otras instrucciones del 6502 desplazan bits a la derecha o a la izquierda o los rotan a la derecha o izquierda. Nótese que desplazar a la izquierda una vez un bit es lo mismo que multiplicar por 2 y que desplazar a la derecha una vez un bit es lo mismo que dividir por 2.

[A] Notación aplicada

A       Accumulator                  EOR     Exclusive Or lógico

X, Y    Registros indexados          fromS   Transfiere desde la pila

M       Memoria                      toS     Tranfiere hacia la pila

P       Processor Status Register    ->      Transfiere hacia

S       Puntero de pila              <-      Transfiere desde

/       Cambio                       V       OR lógico

_       Sin cambio                   PC      Contador de programa

+       Adicion                      PCH     Contador de programa alto

/\      AND lógico                   PCL     Contador de programa bajo

-       Substracción                 OPER    OPERANDO

                                     #       Modo de direccionamiento inmediato

[B] Conjunto de la instrucciones

(1) LDA - Load Acumulator with Memory

Cuando la instrucción LDA es ejecutada por el microprocesador, los datos son transferidos desde la memoria a el acumulador y almacenados en el acumulador. LDA afecta al contenido del acumulador, no afecta a la señal (flag) del carry ni del desbordamiento; activa la señal de cero si el acumulador es cero como resultado de la ejecución de LDA, sino pone a resetea la señal cero; activa la señal de negativo si el bit 7 del acumulador es 1, sino resetea la señal de negativo.

Operación:

M -> A

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direccionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   LDA #Oper           |    A9   |    2    |    2     |
|  Zero Page     |   LDA Oper            |    A5   |    2    |    3     |
|  Zero Page,X   |   LDA Oper,X          |    B5   |    2    |    4     |
|  Absolute      |   LDA Oper            |    AD   |    3    |    4     |
|  Absolute,X    |   LDA Oper,X          |    BD   |    3    |    4*    |
|  Absolute,Y    |   LDA Oper,Y          |    B9   |    3    |    4*    |
|  (Indirect,X)  |   LDA (Oper,X)        |    A1   |    2    |    6     |
|  (Indirect),Y  |   LDA (Oper),Y        |    B1   |    2    |    5*    |
+----------------+-----------------------+---------+---------+----------+

(2) STA - Store Accumulator in Memory

Esta instrucción transfiere el contenido del acumulador a la memoria. No afecta a ninguna señal en el registro de estado del procesador y no afecta al acumulador.

Operación:

A -> M

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direccionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Zero Page     |   STA Oper            |    85   |    2    |    3     |
|  Zero Page,X   |   STA Oper,X          |    95   |    2    |    4     |
|  Absolute      |   STA Oper            |    80   |    3    |    4     |
|  Absolute,X    |   STA Oper,X          |    90   |    3    |    5     |
|  Absolute,Y    |   STA Oper, Y         |    99   |    3    |    5     |
|  (Indirect,X)  |   STA (Oper,X)        |    81   |    2    |    6     |
|  (Indirect),Y  |   STA (Oper),Y        |    91   |    2    |    6     |
+----------------+-----------------------+---------+---------+----------+

(3) ADC - Add Memory to Accumulator with Carry

Esta instrucción suma el valor de la memoria y el acarreo de anteriores operaciones al valor del acumulador y almacena el resultado en el acumulador. La instrucción afecta al cumulador; activa la señal de acarreo cuando la suma de una adición binaria excede 255 o cuando la suma de una adición decimal excede 99, sino el carry se resetea. La señal de desbordamiento se activa cuando el signo o el bit 7 es cambiado como resultado de exceder +127 o -128, sino el desbordamiento se resetea. La señal negativo se activa si el acumulador tiene el bit 7 activado, sino la señal se resetea. La señal cero se activa si el resultado del acumulador es 0, sino la señal se resetea.

Operación:

A + M + C -> A, C

Señales afectadas:

N Z C I D V
/ / / _ _ /

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   ADC #Oper           |    69   |    2    |    2     |
|  Zero Page     |   ADC Oper            |    65   |    2    |    3     |
|  Zero Page,X   |   ADC Oper,X          |    75   |    2    |    4     |
|  Absolute      |   ADC Oper            |    60   |    3    |    4     |
|  Absolute,X    |   ADC Oper,X          |    70   |    3    |    4*    |
|  Absolute,Y    |   ADC Oper,Y          |    79   |    3    |    4*    |
|  (Indirect,X)  |   ADC (Oper,X)        |    61   |    2    |    6     |
|  (Indirect),Y  |   ADC (Oper),Y        |    71   |    2    |    5*    |
+----------------+-----------------------+---------+---------+----------+

(4) SBC - Subtract Memory from Accumulator with Borrow

Esta instrucción substrae el valor de la memoria y el resto del valor del acumulador y almacena el resultado en el acumulador, usando complemento a dos. El resto es definido como la señal de acarreo complementada; luego una señal de acarreo indica que el resto no ha ocurrido. Esta instrucción afecta al cumulador. La señal de acarreo es activada si el resultado es mayor o igual que 0. La señal de acarreo de resetea cuando el resultado es menor o igual a 0, indicando un resto. La señal de desbordamiento se activa cuando el resultado excede de +127 o -127, sino se dessactiva. La señal de negativo se activa si el resultado del acumulador tiene el bit 7 activado, sino se resetea. La señal cero se activa si el resultado del acumulador es 0, sino se resetea.

Operación:

A - M - C -> A (nótese que C = Resto).

Señales afectadas:

N Z C I D V
/ / / _ _ /

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   SBC #Oper           |    E9   |    2    |    2     |
|  Zero Page     |   SBC Oper            |    E5   |    2    |    3     |
|  Zero Page,X   |   SBC Oper,X          |    F5   |    2    |    4     |
|  Absolute      |   SBC Oper            |    ED   |    3    |    4     |
|  Absolute,X    |   SBC Oper,X          |    FD   |    3    |    4*    |
|  Absolute,Y    |   SBC Oper,Y          |    F9   |    3    |    4*    |
|  (Indirect,X)  |   SBC (Oper,X)        |    E1   |    2    |    6     |
|  (Indirect),Y  |   SBC (Oper),Y        |    F1   |    2    |    5     |
+----------------+-----------------------+---------+---------+----------+

(5) AND - Memory with Accumulator

La instrucción AND transfiere el acumulador y la memoria al sumador el cual ejecuta la operación AND bit-a-bit y almacena el resultado en el acumulador. Esta instrucción afecta al acumulador; activa la señal cero si el resultado en el acumulador es 0, sino resetea la señal cero; activa la señal negativo si el resultado en el acumulador tiene el bit 7 activado, sino resetea la señal de signo o negativo. Uno de los usos de la operación AND es la de resetear un bit en memoria.

Operación:

A /\ M -> A

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   AND #Oper           |    29   |    2    |    2     |
|  Zero Page     |   AND Oper            |    25   |    2    |    3     |
|  Zero Page,X   |   AND Oper,X          |    35   |    2    |    4     |
|  Absolute      |   AND Oper            |    2D   |    3    |    4     |
|  Absolute,X    |   AND Oper,X          |    3D   |    3    |    4*    |
|  Absolute,Y    |   AND Oper,Y          |    39   |    3    |    4*    |
|  (Indirect,X)  |   AND (Oper,X)        |    21   |    2    |    6     |
|  (Indirect,Y)  |   AND (Oper),Y        |    31   |    2    |    5     |
+----------------+-----------------------+---------+---------+----------+

(6) ORA - OR Memory with Accumulator

La instrucción ORA transfiere el acumulador y la memoria al sumador el cual ejecuta la operación OR bit-a-bit y almacena el resultado en el acumulador. Esta instrucción afecta al acumulador; activa la señal cero si el resultado en el acumulador es 0, sino resetea la señal cero; activa la señal negativo si el resultado en el acumulador tiene el bit 7 activado, sino resetea la señal negativo.

Operación:

A V M -> A

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   ORA #Oper           |    09   |    2    |    2     |
|  Zero Page     |   ORA Oper            |    05   |    2    |    3     |
|  Zero Page,X   |   ORA Oper,X          |    15   |    2    |    4     |
|  Absolute      |   ORA Oper            |    0D   |    3    |    4     |
|  Absolute,X    |   ORA Oper,X          |    10   |    3    |    4*    |
|  Absolute,Y    |   ORA Oper,Y          |    19   |    3    |    4*    |
|  (Indirect,X)  |   ORA (Oper,X)        |    01   |    2    |    6     |
|  (Indirect),Y  |   ORA (Oper),Y        |    11   |    2    |    5     |
+----------------+-----------------------+---------+---------+----------+

(7) EOR - Exclusive OR with Accumulator

La instrucción EOR transfiere el acumulador y la memoria al sumador el cual ejecuta la operación binaria EXCLUSIVE OR bit-a-bit y almacena el resultado en el acumulador. Esta instrucción afecta al acumulador; activa la señal cero si el resultado en el acumulador es 0, sino resetea la señal cero; activa la señal negativo si el resultado en el acumulador tiene el bit 7 activado, sino resetea la señal negativo. Uno de los usos es el de complementar los bytes.

Operación:

A EOR M -> A

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   EOR #Oper           |    49   |    2    |    2     |
|  Zero Page     |   EOR Oper            |    45   |    2    |    3     |
|  Zero Page,X   |   EOR Oper,X          |    55   |    2    |    4     |
|  Absolute      |   EOR Oper            |    40   |    3    |    4     |
|  Absolute,X    |   EOR Oper,X          |    50   |    3    |    4*    |
|  Absolute,Y    |   EOR Oper,Y          |    59   |    3    |    4*    |
|  (Indirect,X)  |   EOR (Oper,X)        |    41   |    2    |    6     |
|  (Indirect),Y  |   EOR (Oper),Y        |    51   |    2    |    5*    |
+----------------+-----------------------+---------+---------+----------+

(8) SEC - Set Carry Flag

Esta instrucción inicializa la señal de acarreo a 1. Esta operación suele normalmente estar precedida por un bucle SBC. También es útil cuando se usa con una instrucción ROL para inicializar un bit en memoria a 1. Esta instrucción no afecta a ningún registro en el microprocesador y a ninguna señal salvo a la de acarreo que es activada.

Operación:

1 -> C

Señales afectadas:

N Z C I D V
_ _ 1 _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   SEC                 |    38   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(9) CLC - Clear Carry Flag

Esta instrucción inicializa la señal de acarreo a 0. Esta operación suele normalmente estar precedida por un bucle ADC. También es útil cuando se usa con una instrucción ROL para borrar un bit en memoria. Esta instrucción no afecta a ningún registro en el microprocesador y a ninguna señal salvo a la de acerreo que es reseteada.

Operación:

0 -> C

Señales afectadas:

N Z C I D V
_ _ 0 _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   CLC                 |    18   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(10) SEI - Set Interrupt Disable

Esta instrucción inicializa la señal interrupción descativado a 1. Es usada para enmascarar las peticiones de interrupción durante las operaciones de reseteo del sistema y durante los comandos de interrupción. Ningún registro es afectado en el microprocesador y ninguna señal ademas de la señal de interrupción desactivado la cual es activada.

Operación:

1 -> I

Señales afectadas:

N Z C I D V
_ _ _ 1 _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   SEI                 |    78   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(11) CLI - Clear Interrupt Disable

Esta instrucción inicializa la señal interrupción desactivado a 0. Esto permite al microprocesador recibir interrupciones. Ningún registro es afectado en el microprocesador y ninguna señal ademas de la señal de interrupción desactivado la cual es desactivada.

Operación:

0 -> I

Señales afectadas:

N Z C I D V
_ _ _ 0 _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   CLI                 |    58   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(12) SED - Set Decimal Mode

Esta instrucción activa la señal de modo decimal a 1. Esto hace que todas las instrucciones ADC y SBC psteriores operen como operaciones aritmética decimales. SED no afecta a ningún registro en el microprocesador y ninguna señal se ve afectada salvo la señal modo decimal que se pone a 1.

Operación:

1 -> D

Señales afectadas:

N Z C I D V
_ _ _ _ 1 _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   SED                 |    F8   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(13) CLD - Clear Decimal Mode

Esta instrucción activa la señal de modo decimal a 0. Esto hace que todas las instrucciones ADC y SBC psteriores operen como simples operaciones binarias. CLD no afecta a ningún registro en el microprocesador y ninguna señal se ve afectada salvo la señal modo decimal que se pone a 0.

Operación:

1 -> D

Señales afectadas:

N Z C I D V
_ _ _ _ 0 _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   CLD                 |    D8   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(14) CLV - Clear Overflow Felag

Esta instrucción pone la señal desbordamiento a 0. No afecta a ningún registro en el microprocesador y ninguna señal se ve afectada salvo la señal de desbordamiento que se pone a 1.

Operación:

0 -> V

Señales afectadas:

N Z C I D V
_ _ _ _ _ 0

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   CLV                 |    B8   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(15) JMP - Jump to New Location

En esta instrucción, el dato de la localización en memoria localizado en la secuencia del programa después de OP CODE es cargado en el byte bajo del contador de programa (PCL) y el dato de la siguiente localización de memoria es cargado en el byte alto del contador de programa (PCH). La instrucción JMP no afecta a ninguna señal y solo a los registros PCL y al PCB

Operación:

(PC + 1) -> PCL
(PC + 2) -> PCH

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Absolute      |   JMP Oper            |    4C   |    3    |    3     |
|  Indirect      |   JMP (Oper)          |    6C   |    3    |    5     |
+----------------+-----------------------+---------+---------+----------+

(16) BMI - Branch on Result Minus

Esta instrucción toma el salto condicional (branch) si el bit N está activado. BMI no afecta a ninguna señal o a ninguna otra parte de la máquina salvo el contador de programa y solo si el bit N está activado.

Operación:

Branch on N = 1

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BMI Oper            |    30   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(17) BPL - Branch on Result Plus

Esta instrucción es la complementaria a BMI. En esta el salto se produce cuando el bit N está reseteado (0). Esta instrucción no afecta a ninguna señal o a ningún resgitro salvo el contador P y solo afecta el contador P cuando el bit N está reseteado.

Operación:

Branch on N = 0

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BPL Oper            |    10   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(18) BCC - Branch on Carry Clear

Esta instrucción comprueba el estado del bit de acarreo y realiza el salto condicional si el bit de acarreo esta reseteado. No afecta a ninguna señal o registro salvo al contador de programa y solo si la señal C no está activada.

Operación:

Branch on C = 0

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BCC Oper            |    90   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(19) BCS - Branch on Carry Set

Esta instrucción realiza el salto condicional si la señal de acarreo está activada. BCS no afecta a ninguna señal o registros salvo al contador de programa si la señal de acarreo está activada.

Operación:

Branch on C = 1

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BCS Oper            |    B0   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(20) BEQ - Branch on Result Zero

Esta instrucción puede ser también llamada "Branch on Equal". Toma el salto condicional si la señal Z está activada o si el resultado anterior es igual a 0. BEQ no afecta a ninguna señal o registro salvp al contador de programa y solo cuando la señal Z está activada.

Operación:

Branch on Z = 1

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BEQ Oper            |    F0   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(21) BNE - Branch on Result Not Zero

Esta instrucción puede ser también llamada "Branch on Not Equal". Comprueba la señal Z y toma el salto condicional si la señal Z no está activada, indicando que el resultado anterior no es 0. BNE no afecta a ninguna señal o registro salvo al contador de programa y solo si la señal Z está reseteada.

Operación:

Branch on Z = 0

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BNE Oper            |    D0   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(22) BVS - Branch on Overflow Set

Esta instrucción comprueba la señal V y realiza el salto condicional si V está activada. BVS no afecta a ninguna señal o registro salvo al contador de programa y colo cuando la señal de desbordamiento está activada.

Operación:

Branch on V = 1

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BVS Oper            |    70   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(23) BVC - Branch on Overflow Clear

Esta instrucción comprueba la señal V y realiza el salto condicional si la señal no está activada. BVC no afecta a ninguna señal ni registro salvo el contador de programa y solo cuando la señal de desbordamiento está reseteada.

Operación:

Branch on V = 0

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Relative      |   BVC Oper            |    50   |    2    |    2*    |
+----------------+-----------------------+---------+---------+----------+

(24) CMP - Compare Memory and Accumulator

Esta instrucción substrae el contenido de la memoria del contenido del acumulador. El proposito de la instrucción de comparación es permitir al usuario comparar un valor en memoria con el acumulador sin cambiar el valor del acumulador.

Operación:

A - M

Señales afectadas:

N Z C I D V
/ / / _ _ _

Accumulator < Memory : N [Either] | C [Reset] | Z [Reset]
Accumulator = Memory : N [Reset] | C [Set] | Z [Set]
Accumulator > Memory : N [Either] | C [Set] | Z [Reset]

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   CMP #Oper           |    C9   |    2    |    2     |
|  Zero Page     |   CMP Oper            |    C5   |    2    |    3     |
|  Zero Page,X   |   CMP Oper,X          |    D5   |    2    |    4     |
|  Absolute      |   CMP Oper            |    CD   |    3    |    4     |
|  Absolute,X    |   CMP Oper,X          |    DD   |    3    |    4*    |
|  Absolute,Y    |   CMP Oper,Y          |    D9   |    3    |    4*    |
|  (Indirect,X)  |   CMP (Oper,X)        |    C1   |    2    |    6     |
|  (Indirect),Y  |   CMP (Oper),Y        |    D1   |    2    |    5*    |
+----------------+-----------------------+---------+---------+----------+

(25) BIT - Test Bits in Memory with Accumulator

Esta instrucción realiza un AND entre una localización de memoria y el acumulador pero no almacena el resultado de la AND en el acumulador. La instrucción BIT afecta a la señal N (poniendola al mismo valor que el bit 7 de la memoria que se está testeando), a la señal V (poniendola al mismo valor que el bit 6 de la memoria que se esta testeando) y a la señal Z (activandola si el resultado de la operación AND entre el acumulador y la memoria es cero, Z se resetea en caso contrario). No afecta al acumulador.

Operación:

A /\ M, M7 -> N, M6 -> V

Señales afectadas:

N Z C I D V
M7/ / _ _ M6

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Zero Page     |   BIT Oper            |    24   |    2    |    3     |
|  Absolute      |   BIT Oper            |    2C   |    3    |    4     |
+----------------+-----------------------+---------+---------+----------+

(26) LDX - Load Index Register X from Memory

Carga el registro indexado X desde la memoria. LDX no afecta a la señal C o V; activa Z si el valor cargado es cero, sino lo resetea; activa N si el valor cargado tiene el bit 7 a 1; sino N es reseteado, y afecta solo al registro X.

Operación:

M -> X

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   LDX #Oper           |    A2   |    2    |    2     |
|  Zero Page     |   LDX Oper            |    A6   |    2    |    3     |
|  Zero Page,Y   |   LDX Oper,Y          |    B6   |    2    |    4     |
|  Absolute      |   LDX Oper            |    AE   |    3    |    4     |
|  Absolute,Y    |   LDX Oper,Y          |    BE   |    3    |    4*    |
+----------------+-----------------------+---------+---------+----------+

(27) LDY - Load Index Register Y from Memory

Carga el registro indexado Y desde la memoria. LDY no afecta a la señal C o V; activa Z si el valor cargado es cero, sino lo resetea; activa N si el valor cargado tiene el bit 7 a 1; sino N es reseteado, y afecta solo al registro X.

Operación:

M -> Y

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   LDY #Oper           |    A0   |    2    |    2     |
|  Zero Page     |   LDY Oper            |    A4   |    2    |    3     |
|  Zero Page,X   |   LDY Oper,X          |    B4   |    2    |    4     |
|  Absolute      |   LDY Oper            |    AC   |    3    |    4     |
|  Absolute,X    |   LDY Oper,X          |    BC   |    3    |    4*    |
+----------------+-----------------------+---------+---------+----------+

(28) STX - Store Index Register X in Memory

Transfiere el valor del registro X a la dirección localizada en memoria. Ninguna señal o registro en el microprocesador se ve afectado por la operación de almacenamiento.

Operación:

X -> M

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Zero Page     |   STX Oper            |    86   |    2    |    3     |
|  Zero Page,Y   |   STX Oper,Y          |    96   |    2    |    4     |
|  Absolute      |   STX Oper            |    8E   |    3    |    4     |
+----------------+-----------------------+---------+---------+----------+

(29) STY - Store Index Register Y in Memory

Transfiere el valor del registro Y a la dirección localizada en memoria. Ninguna señal o registro en el microprocesador se ve afectado por la operación de almacenamiento.

Operación:

Y -> M

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Zero Page     |   STY Oper            |    84   |    2    |    3     |
|  Zero Page,X   |   STY Oper,X          |    94   |    2    |    4     |
|  Absolute      |   STY Oper            |    8C   |    3    |    4     |
+----------------+-----------------------+---------+---------+----------+

(30) INX - Increment Index Register X by One

Incrementa X sumando 1 al valor actual del registro X. Se trata de un incremento 8-bit que no afecta a la operación de acarreo, luego, si el valor en X antes del incremento fuera FF, el resultado sería 00. INX no afecta a las señales de acarreo o desbordamiento; activa la señal N si el resultado de incremento tiene a uno el bit 7, sino resetea N; activa la señal Z si el resultado del incremento es 0, sino resetea la señal Z. INX no afecta a ningún otro registro salvo al registro X.

Operación:

X + 1 -> X

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   INX                 |    E8   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(31) INY - Increment Index Register Y by One

Incrementa Y sumando 1 al valor actual del registro Y almacenando el resltado en el reistro Y. INY no afecta a las señales de acarreo o desbordamiento, activa la señal N si el resultado de incremento tiene a uno el bit 7, sino resetea N; activa la señal Z si el resultado del incremento es 0, sino resetea la señal Z.

Operación:

Y + 1 -> Y

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   INY                 |    C8   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(32) DEX - Decrement Index Register X by One

Esta instrucción substrae uno del valor del registro X y almacena el resultado en el registro indexado X. DEX no afecta a las señales de acarreo o desbordamiento, activa la señal N si tiene a uno el bit 7 como resultado del decremento, sino resetea la señal N; activa la señal Z si X está a 0 como resultado del decremento, sino resetea la señal Z.

Operación:

X - 1 -> X

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   DEX                 |    CA   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(33) DEY - Decrement Index Register Y by One

Esta instrucción substrae uno del valor del registro Y y almacena el resultado en el registro indexado Y. El resultado no afecta o considera el acarreo así que el valor en el registro indexado Y es decrementado a 0 y luego a FF. Decrementar Y no afecta a las señales de acarreo o desbordamiento, activa la señal N si tiene a uno el bit 7 como resultado del decremento, sino resetea la señal N; activa la señal Z si X está a 0 como resultado del decremento, sino resetea la señal Z. Esta instrucción solo afecta al registro indexado Y.

Operación:

Y - 1 -> Y

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   DEY                 |    88   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(34) CPX - Compare Index Register X to Memory

Esta instrucción substrae el valor de la dirección localizada en memoria del contenido rel registro X usando el sumador pero no almacena el resultado; luego, solo se usa para activar las señales N, Z y C para permitir la comparación entre el registro indexado X y el valor en memoria. La instrucción CPX no afecta a ningún registro en la máquina; tampoco afecta a la señal de desbordamiento. La señal de acarreo se activa si el valor del registro indexado X es igual o mayor que el dato en memoria. Si el valor de la memoria es mayor que el contenido del registro X, el acarreo se resetea. Si el resultado de la substracción tiene activado el bit 7, la señal N es activada, si no, es reseteada. Si el valor en memoria es igual al alor en el registro indexado X, la señal Z se activa, sino se resetea.

Operación:

X - M

Señales afectadas:

N Z C I D V
/ / / _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   CPX *Oper           |    E0   |    2    |    2     |
|  Zero Page     |   CPX Oper            |    E4   |    2    |    3     |
|  Absolute      |   CPX Oper            |    EC   |    3    |    4     |
+----------------+-----------------------+---------+---------+----------+

(35) CPY - Compare Index Register Y to Memory

Esta instrucción realiza un susbtracción en complemento a dos entre el registro indexado Y y la localización de memoria especificada. El resultado de la substracción no se almacena en ningún lugar. CPY no afecta a ningún registro en el microprocesador y tampoco afecta a la señal de desbordamiento. Si el valor en el registro indexado Y es igual o mayor que el valor en memoria, la señal de acarreo se activa, sino se resetea. Si el resultado de la substracción contiene el bit 7 activado la señal N se activa, sino se resetea. Si el valor en el registro indexado Y y el valor en la memoria son iguales, la señal cero se activará, sino se reseteará.

Operación:

Y - M

Señales afectadas:

N Z C I D V
/ / / _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Immediate     |   CPY *Oper           |    C0   |    2    |    2     |
|  Zero Page     |   CPY Oper            |    C4   |    2    |    3     |
|  Absolute      |   CPY Oper            |    CC   |    3    |    4     |
+----------------+-----------------------+---------+---------+----------+

(36) TAX - Transfer Accumulator to Index X

Esta instrucción toma el valor del acumulador A y lo transfiere o carga en el registro indexado X sin cambiar el contenido del acumulador. TAX solo afecta al registro indexado X, no afecta a las señales de acarreo y desbordamiento. La señal N es activada si el resultado en el registro indexado X tiene el bit 7 activado, sino N se resetea. La señal Z se activa si el contenido en el registro X es 0 como resultado de la operación, sino se resetea.

Operación:

A -> X

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   TAX                 |    AA   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(37) TXA - Transfer Index X to Accumulator

Esta instrucción mueve el valor que está en el registro indexado X al acumulador A sin modificar el contenido del registro indexado X. TXA no afecta a ningún registro salvo al acumulador y no afecta a las señales de acarreo o desbordamiento. Si el valor resultante en el acumulador es 0, la señal Z es activada, sino es reseteada.

Operación:

X -> A

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   TXA                 |    8A   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(38) TAY - Transfer Accumulator to Index Y

Esta instrucción mueve el valor del acumulador al registro indexado Y sin afectar al acumulador. La instrucción TAY solo afecta al registro Y u no afecta ni a la señal de acarreo ni a la de desbordamiento. Si el registro indexado Y tiene el bit 7 activado, la señal N se activa, sino se resetea. Si el contenido del registro Y es igual a 0 como resultado de la operación, Z se activa, sino se resetea.

Operación:

A -> Y

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   TAY                 |    A8   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(39) TYA - Transfer Index Y to Accumulator

Esta instrucción mueve el valor que está en el registro ondexado Y al acumulador A sin afectar al contenido del registro indexado Y. TYA no afecta a ningún otro registro salvo al acumulador y no afecta a las señales de acarreo o desbordamiento. Si el resultado en el acumulador A tiene el bit 7 activado, la señal N es activada, sino es reseteada. Si el valor resultante en el acumulador es 0, la señal Z se activa, sino se resetea.

Operación:

Y -> A

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   TYA                 |    98   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(40) JSR - Jump to Subroutine

Esta instrucción transfiere el control del contador de programa a una localización de subrutina pero deja un puntero de regreso en la pila para permitir al usuario volver para realizar la siguiente instrucción en el programa principal después de que la subrutina se haya completado. Para conseguir esto, la instrucción JSR almacena la dirección del contador de programa la cual apunta al última byte de la instrucción jump en la pila usando el puntero de pila. La instrucción JSR no afecta a las señales, debido a que el puntero de pila es decrementado por 2 y substituidos nuevos valores en el contador de programa bajo y en el contador de programa alto.

Operación:

PC + 2 toS, (PC + 1) -> PCL
            (PC + 2) -> PCH

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Absolute      |   JSR Oper            |    20   |    3    |    6     |
+----------------+-----------------------+---------+---------+----------+

(41) RTS - Return from Subroutine

Esta instrucción carga el contador de programa bajo (PCL) y el contador de programa alto (PCH) desde la pila al contador de programa e incrementa el contador de programa de tal manera que apunte a la siguiente instrucción despues de JSR. El puntero de pila es ajustado incrementandolo dos veces. La instrucción RTS no afecta a ninguna señal y solo afecta a PCL y PCH.

Operación:

PC fromS, PC + 1 -> PC

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   RTS                 |    60   |    1    |    6     |
+----------------+-----------------------+---------+---------+----------+

(42) PHA - Push Accumulator on Stack

Esta instrucción transfiere el valor del acumulador a la siguiente localización en la pila, automaticamente decrementando la pila para apuntar a la nueva localización vacía. Esta instrucción solo afecta al registro puntero de pila el cual es decrementado a 1 como resultado de la operación. No afecta a señales.

Operación:

A toS

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   PHA                 |    48   |    1    |    3     |
+----------------+-----------------------+---------+---------+----------+

(43) PLA - Pull Accumulator from Stack

Esta instrucción añade 1 al valor del puntero de pila y carga el contenido de la pila en el registro A- La instrucción PLA no afecta a las señales de acarreo o desbordamiento. Activa la señal N si el bit 7 esta activado en el acumulador A, sino se resetea. Si el acumulador A es cero como resultado de la PLA, entonces la señal Z se activa, sino se resetea. La instrucción PLA cambia el contenido del acumulador A al contenido de la localización de memoria en el registro de pila más 1 y también incrementa el registro de pila.

Operación:

A fromS

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   PLA                 |    68   |    1    |    4     |
+----------------+-----------------------+---------+---------+----------+

(44) TXS - Transfer Index X to Stack Pointer

Esta instrucción transfiere el valor en el registro indexado X al puntero de pila. TXS solo cambia el puntero de pila, haciendolo igual al contenido del registro indexado X. No afecta a ninguna señal.

Operación:

X -> S

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   TXS                 |    9A   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(45) TSX - Transfer Stack Pointer to Index X

Esta instrucción transfiere el valor del puntero de pila al registro indexado X. TSX no afecta a las señales de acarreo o desbordamiento. Activa N si el bit 7 está activado en el registro indexado X como resultado de la instrucción, sino se resetea. Si el registro X es cero como resultado de TSX, la señal Z se activa, sino se resetea. TSX cambia el valor del X, haciendolo igual que el contenido del puntero de pila.

Operación:

S -> X

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   TSX                 |    BA   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+

(46) PHP - Push Processor Status on Stack

Esta instrucción transfiere el contenido del procesador de registros de estados a la pila, governada por el puntero de pila. La instrucción PHP no afecta a ningún registro o señal en el microprocesador.

Operación:

P toS

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   PHP                 |    08   |    1    |    3     |
+----------------+-----------------------+---------+---------+----------+

(47) PLP - Pull Processor Status from Stack

Esta instrucción transfiere el siguiente valor en la pila al procesador de registros de estados, cambiando todas las señales poniendolas al valor de la pila. La instrucción PLP no afecta a registros en el procesador salvo al registro de estados. La instrucción puede afectar a todas las señales en el registro de estados.

Operación:

P fromS

Señales afectadas:

N Z C I D V
 From Stack

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   PLP                 |    28   |    1    |    4     |
+----------------+-----------------------+---------+---------+----------+

(48) RTI - Return from Interrupt

Esta instrucción transfiere desde la pila al microprocesador el procesador de estados y la localización del contador del programa para la instrucción que fué interrumpida. La instrucción RTI reinicializa todas las señales a la posición a la que fueron obtenidas en el momento de la interrupción y pone el contador de programa de vuelta al estado en antes de la interrupción. No afecta a otros registros en el microprocesador.

Operación:

P fromS PC fromS

Señales afectadas:

N Z C I D V
 From Stack

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   RTI                 |    4D   |    1    |    6     |
+----------------+-----------------------+---------+---------+----------+

(49) BRK - Break Command

El contador de programa del segundo byte después de BRK es automaticamente almacenada en la pila junto con el procesador de estados al comienzo de la instrucción break. Luego el microprocesador transfiere el control al vector interruptor. La instrucción break solo cambia el contador de programa, ningún otro registro o señal se ve afectado.

Operación:

Forced Interrupt PC + 2 toS P toS

Señales afectadas:

N Z C I D V
_ _ _ 1 _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   BRK                 |    00   |    1    |    7     |
+----------------+-----------------------+---------+---------+----------+

(50) LSR - Logical Shift Right

Esta instrucción desplaza o el acumulador o un posición especifica de memoria 1 bit a la derecha, con el bit más alto puesto a 0, y el bit más bajo es desplazado a la señal de acarreo. La instrucción LSR afecta o al acumulador desplazandolo 1 a la derecha o es una instrucción de lectura/modificación/escritura la cual cambia una especifica localización de memoria pero no afecta a ningún registro interno. No afecta a la señal de desbordamiento. La señal M se resetea siempre. La señal Z es activada si el resultado del desplazamiento es 0 y reseteada sino. El acarreo es puesto al mismo valor que el bit 0 de la entrada.

Operación:

     +-+-+-+-+-+-+-+-+
0 -> |7|6|5|4|3|2|1|0| -> C
     +-+-+-+-+-+-+-+-+

Señales afectadas:

N Z C I D V
0 / / _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Accumulator   |   LSR A               |    4A   |    1    |    2     |
|  Zero Page     |   LSR Oper            |    46   |    2    |    5     |
|  Zero Page,X   |   LSR Oper,X          |    56   |    2    |    6     |
|  Absolute      |   LSR Oper            |    4E   |    3    |    6     |
|  Absolute,X    |   LSR Oper,X          |    5E   |    3    |    7     |
+----------------+-----------------------+---------+---------+----------+

(51) ASL - Arithmetic Shift Left

La instrucción de desplazamiento a la derecha desplaza el acumulador o una dirección de memoria 1 bit a la izquierda, con el bit 0 siempre puesto a 0 y el bit 7 que sale almacenado en la señal de acarreo. ASL o desplaza el acumulador 1 bit a la izquierda o es una instrucción de lectura/modificación/escritura que afecta solo a la memoria. La instrucción no afecta la señal de desbordamiento. Pone N al mismo valor que el bit 7, activa la señal Z si el resultado es igual a 0, sino se resetea y se almacena el bit 7 de entrada en la señal de acarreo.

Operación:

     +-+-+-+-+-+-+-+-+
C <- |7|6|5|4|3|2|1|0| <- 0
     +-+-+-+-+-+-+-+-+

Señales afectadas:

N Z C I D V
/ / / _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Accumulator   |   ASL A               |    0A   |    1    |    2     |
|  Zero Page     |   ASL Oper            |    06   |    2    |    5     |
|  Zero Page,X   |   ASL Oper,X          |    16   |    2    |    6     |
|  Absolute      |   ASL Oper            |    0E   |    3    |    6     |
|  Absolute, X   |   ASL Oper,X          |    1E   |    3    |    7     |
+----------------+-----------------------+---------+---------+----------+

(52) ROL - Rotate Left

La instrucción de rotación a la izquierda desplaza o el acumulador o una dirección de memoria 1 bit a la izquierda, con el acarreo almacenado en el bit 9 y con el bit 7 puesto en la señal de acarreo. La instrucción ROL o desplaza el acumulador 1 bit a la izquierda y almacena el acarreo en el bit 0 del acumulador o no aecta a ningún registro interno. La instrucción ROL pone el acarreo al mismo valor que el bit 7, pone N al mismo valor que el bit 6 entrante, activa la señal Z si el resultado de la rotación es 0, sino resetea Z y no afecta a la señal de desbordamiento.

Operación:

+------------------------------+
|         M o A                |
|   +-+-+-+-+-+-+-+-+    +-+   |
+-< |7|6|5|4|3|2|1|0| <- |C| <-+
    +-+-+-+-+-+-+-+-+    +-+

Señales afectadas:

N Z C I D V
/ / / _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Accumulator   |   ROL A               |    2A   |    1    |    2     |
|  Zero Page     |   ROL Oper            |    26   |    2    |    5     |
|  Zero Page,X   |   ROL Oper,X          |    36   |    2    |    6     |
|  Absolute      |   ROL Oper            |    2E   |    3    |    6     |
|  Absolute,X    |   ROL Oper,X          |    3E   |    3    |    7     |
+----------------+-----------------------+---------+---------+----------+

(53) ROR - Rotate Right

La instrucción de rotación a la derecha desplaza o el acumulador o una dirección de memoria a la derecha 1 bit con el bit 0 desplazado al acarreo y el acarreo desplazado al bit 7. La instrucción ROR o desplaza el acumulador 1 bit a la derecha y almacena el acarreo en el bit 7 del acumulador o no afecta a ningún registro interno. La instrucción ROR pone el acarreo al mismo valor que el bit 0, pone N al mismo valor que el acarreo entrante y activa Z si el resultado de la rotación es 0; sino resetea Z y no afecta a la señal de desbordamiento.

Operación:

+------------------------------+
|                M o A         |
|   +-+    +-+-+-+-+-+-+-+-+   |
+-> |C| -> |7|6|5|4|3|2|1|0| >-+
    +-+    +-+-+-+-+-+-+-+-+

Señales afectadas:

N Z C I D V
/ / / _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Accumulator   |   ROR A               |    6A   |    1    |    2     |
|  Zero Page     |   ROR Oper            |    66   |    2    |    5     |
|  Zero Page,X   |   ROR Oper,X          |    76   |    2    |    6     |
|  Absolute      |   ROR Oper            |    6E   |    3    |    6     |
|  Absolute,X    |   ROR Oper,X          |    7E   |    3    |    7     |
+----------------+-----------------------+---------+---------+----------+

(54) INC - Increment Memory by One

Esta instrucción suma 1 al contenido de la dirección de memoria. La instrucción de incremento de memoria no afecta a ningún registro interno y no afecta a la señal de acarreo o desbordamiento. Si el bit 7 está activado como resultado del incremento, N es activado, sino es reseteado; si el incremento hace que el resultado sea 0, la señal Z es activada, sino es reseteada.

Operación:

M + 1 -> M

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Zero Page     |   INC Oper            |    E6   |    2    |    5     |
|  Zero Page,X   |   INC Oper,X          |    F6   |    2    |    6     |
|  Absolute      |   INC Oper            |    EE   |    3    |    6     |
|  Absolute,X    |   INC Oper,X          |    FE   |    3    |    7     |
+----------------+-----------------------+---------+---------+----------+

(55) DEC - Decrement Memory by One

Esta instrucción substrae 1, en complemento a dos, del contenido de la dirección de memoria. La instrucción de decremento no afecta a ningún registro interno en el microprocesador, No afecta a la señal de acarreo o desbordamiento, Si el bit 7 está activado como resultado del decremento, la señal N es activada, sino es reseteada. Si el resultado del decremento es 0, la señal Z es activada, sino es reseteada.

Operación:

M - 1 -> M

Señales afectadas:

N Z C I D V
/ / _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Zero Page     |   DEC Oper            |    C6   |    2    |    5     |
|  Zero Page,X   |   DEC Oper,X          |    D6   |    2    |    6     |
|  Absolute      |   DEC Oper            |    CE   |    3    |    6     |
|  Absolute,X    |   DEC Oper,X          |    DE   |    3    |    7     |
+----------------+-----------------------+---------+---------+----------+

(56) NOP - No Operation

Instrucción de no operación.

Operación:

No Operación

Señales afectadas:

N Z C I D V
_ _ _ _ _ _

Modos de direcionamiento permitidos:

+----------------+-----------------------+---------+---------+----------+
| Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
+----------------+-----------------------+---------+---------+----------+
|  Implied       |   NOP                 |    EA   |    1    |    2     |
+----------------+-----------------------+---------+---------+----------+