Nomenclatura y conjunto de Instrucciones
UNAS PALABRA SOBRE LOS NÚMEROS
Antes de que podamos discutir el conjunto de instrucciones del microprocesador 6502 en sí, necesitamos discutir brevemente algunas abreviaturas utilizadas en todos los ensambladores basados en este procesador. Esto nos permitirá escribir correctamente los números y abreviaturas y entendernos unos a otros.
Siempre que se utiliza un número en una instrucción en lenguaje Ensamblador, debe ir precedido de un signo numérico "#". Por ejemplo, si nos referimos al número 2, debemos escribir #2. Entonces el Ensamblador puede distinguir entre un número y una dirección de memoria específica dentro de la computadora. Cuando el número está precedido por el signo #, el Ensamblador sabe que se refiere a un número, y cuando un número aparece solo, entiende que se refiere a una dirección. Tomemos los siguientes ejemplos:
sumar 2 a SUM | SUM + #2 |
sumar el contenido de la dirección de memoria 2 a SUM | SUM + 2 |
El mayor error que cometen los programadores principiantes en lenguaje Ensamblador es utilizar números como direcciones y direcciones como números. Esto destruirá por completo cualquier programa y, si no está familiarizado con la programación en lenguaje Ensamblador, podría mirar una copia impresa del programa durante días sin detectar el error.
La segunda convención utilizada en la programación en lenguaje Ensamblador implica la base numérica. Siempre que aparece un número solo o precedido sólo por el signo #, el ensamblador sabe que se refiere a Base 10, el sistema decimal. Por ejemplo:
SUM+#11
El Ensamblador interpreta que esto significa que el número decimal 11 debe sumarse al valor de SUM. De manera similar, podríamos escribir esto:
SUM+11
El Ensamblador interpreta que esto significa que el contenido de la ubicación de memoria 11 (en el sistema de numeración decimal) debe sumarse al valor de SUM.
Cuando queremos utilizar el sistema de numeración hexadecimal, anteponemos al número un signo de dólar. Por ejemplo:
SUM+$11
Esta instrucción significa sumar el valor de SUM al contenido de la ubicación de memoria $11 (que es la ubicación 17 en el sistema decimal). La cosa se complica algo más cuando nos referimos a un número hexadecimal. Primero debemos decirle al ensamblador que viene un número y luego decirle que ese número está en el sistema hexadecimal. Nuestro ejemplo ahora se ve así:
SUM+#$11
Esta instrucción significa sumar el número hexadecimal $11 (17 decimal) al valor de SUM. El Ensamblador no puede malinterpretarlo. Desafortunadamente, un principiante en programación en lenguaje Ensamblador puede escribirlo por error en una amplia variedad de formas. Así pues, mejor estar prevenidos. Este tipo de errores al escribir programas en lenguaje Ensamblador son muy comunes y, si sus primeros programas no funcionan, debe verificar primero si tiene este tipo de errores, antes de buscar errores lógicos más complicados.
Rara vez se utiliza un tercer tipo de número reconocido por la mayoría de los ensambladores, pero cuando sea necesario, se alegrará de que esté disponible. Este es el sistema binario, que normalmente va precedido de un signo de porcentaje "%". Por ejemplo,
#%11010110
No puede haber confusión sobre la interpretación de este número, ya que el signo % lo etiqueta claramente como un número binario. Además, el número decimal 11.010.110 es demasiado grande para que las computadoras basadas en el microprocesador 6502 lo aborden directamente.
En resumen, el signo # identifica al término que le sigue como un número, para distinguirlo de una dirección. El signo $ identifica al término que le sigue como un término hexadecimal y si viene A continuación, del signo #, se refiere a un número hexadecimal. El signo % identifica al siguiente término como un término binario y también sigue al signo # en el caso de un número binario. Cuando ni el signo $ ni el signo % preceden al término, se entiende sistema decimal.
EL CONJUNTO DE INSTRUCCIONES DEL 6502
El conjunto de instrucciones 6502 se describe en detalle en el Apéndice 1. Aquí analizaremos brevemente las instrucciones para que se familiarice con la nomenclatura y el uso de las instrucciones. Cada instrucción es una abreviatura de tres letras del nombre completo de la instrucción. Esta abreviatura se llama mnemónico y, una vez aprendida, es bastante fácil de recordar. Cubriremos la forma en que estas instrucciones abordan la memoria en el Capítulo 5.
En esta sección, discutiremos las instrucciones en grupos, concentrándonos en cómo se pueden usar en la programación.
LAS INSTRUCCIONES DE CARGA (LOAD)
Hay tres instrucciones en este grupo:
LDX Cargar el registro X (LoaD the X register)
LDY Cargar el registro Y (LoaD the Y register)
Estas instrucciones son en algunos aspectos similares a la instrucción PEEK en BASIC. La instrucción PEEK recupera el valor almacenado en una ubicación de memoria específica. Cualquiera de las instrucciones LOAD también se puede utilizar para recuperar un valor de la memoria, como en el siguiente ejemplo:
LDA $0243
Este comando toma el valor previamente almacenado en la ubicación de memoria con la dirección $0243 y coloca una copia de ese valor en el Acumulador para su posterior manipulación. Nótese particularmente el uso de la palabra copia en esta oración. Al igual que el comando PEEK en BASIC, las instrucciones LOAD en la programación en lenguaje Ensamblador no cambian el valor almacenado en la ubicación desde donde se realiza la carga. La ubicación $0243 contiene el mismo valor antes y después de que se ejecute la instrucción LDA; Sin embargo, el valor contenido en el Acumulador cambia como resultado de esta instrucción. Podríamos haber elegido transferir este valor desde la ubicación $0243 al registro X o Y; en este caso, la línea anterior habría sido LDX $0243 o LDY $0243, respectivamente.
Como ya sabemos que todos los cálculos, como las suma y la restas, se realizan en el Acumulador, entonces un uso de la instrucción LDA resulta obvio. Por supuesto, existen muchos otros usos para esta instrucción. Las otras dos instrucciones de carga, LDX y LDY, se usan para cargar cualquiera de los registros índice con un valor específico, generalmente antes de usar el registro en alguna otra operación, como un conteo. A lo largo del libro se analizarán muchos ejemplos de instrucciones LOAD.
LAS INSTRUCCIONES DE ALMACENAMIENTO (STORE)
Como comentamos, el comando PEEK de BASIC y las instrucciones LOAD en lenguaje Ensamblador son algo similares. En lenguaje Ensamblador también tenemos comandos análogos al comando POKE de BASIC: los comandos STORE. Dado que hay tres comandos LOAD, no es sorprendente encontrar que también hay tres comandos STORE:
STX Almacenar el Registro X (STore the X register)
STY Almacenar el Registro Y (STore the Y register)
Una línea típica de código en lenguaje Ensamblador que utiliza estas instrucciones podría aparecer de la siguiente manera:
STX $0243
Esta instrucción copia cualquier valor almacenado previamente en el registro X en la ubicación de memoria $0243. La analogía con el comando POKE de BASIC es obvia. Al igual que con las instrucciones LOAD, el valor almacenado en el Acumulador o en los registros, según la instrucción que se utilice, no cambia con la ejecución de la instrucción. Por lo tanto, si quiere almacenar el número 8 en cuatro ubicaciones de memoria diferentes, puede usar el siguiente código:
LDX #8; primero, lo cargamos STX $CC; en la primera ubicación STX $CD; en la segunda ubicación STX $12; en la tercera ubicación STX $D5; y listo
Tenga en cuenta que no tenemos que recargar el registro X con 8 antes de cada comando de almacenamiento. El valor permanece ahí hasta que lo cambiemos. Por supuesto, podríamos haber usado fácilmente el Acumulador o el registro Y para lograr el objetivo anterior de la misma manera.
Un uso muy común de las instrucciones LOAD y STORE es transferir los valores almacenados en una o más ubicaciones de memoria a diferentes ubicaciones. Por ejemplo,
LDA $5982; Obtenga el primer valor STA $0243; Transfiéralo LDA $4903; Obtenga el segundo STA $82; y así sucesivamente...
En el Capítulo 7 veremos cómo usar este tipo de rutina para acelerar sorprendentemente sus programas BASIC.
INSTRUCCIONES DE TRANSFERENCIA DE CONTROL
Dos tipos de instrucciones hacen que el control del programa se desplace de un lugar del programa a otro. Estas son las instrucciones JUMP y las instrucciones BRANCH.
LAS INSTRUCCIONES DE SALTO (JUMP)
Para los propósitos de esta discusión, hemos agrupado dos instrucciones en esta categoría:
JSR Saltar a una subrutina (Jump to a SubRoutine)
Estas dos instrucciones son análogas a los comandos GOTO y GOSUB de BASIC, respectivamente. Ambas instrucciones dan como resultado una transferencia incondicional del flujo del programa. A continuación, se muestra un ejemplo de la instrucción JMP:
JMP SUB1 ;GOTO SUB1 SUB0 LDA #1 ;para inhibir el cursor STA 752 ;almacene un 1 aqui SUB1 LDA #0 ;para restablecer el cursor STA 752 ;almacene un 0 aqui
En este ejemplo, el cursor nunca será inhibido, ya que cada vez que el programa llega a la instrucción JMP, la línea etiquetada SUB1 se ejecuta a continuación. Esta transferencia de control es incondicional; es decir, sucederá siempre. La rutina de 2 líneas etiquetada SUB0 nunca se ejecutará.
Por el contrario, veamos un ejemplo de la instrucción JSR:
JSR SUB1 ; GOSUB SUB1 SUB0 LDA #1 ; para inhibir el cursor STA 752 ; almacene un 1 aqui JMP SUB2 ; para evitar SUB1 SUB1 LDA #0 ; para restablecer el cursor STA 752 ; almacene un 0 aquí RTS ; como RETURN de BASIC SUB2 ... ; mas codigo...
En esta rutina, realizamos un JSR a la subrutina etiquetada SUB1. Luego, el programa ejecuta las líneas en orden, hasta que encuentra una instrucción RTS (Retornar desde la subrutina - ReTurn from Subroutine). El control del programa luego vuelve a la línea que sigue al JSR que envió el control a la subrutina en primer lugar. La instrucción RTS es la contraparte en lenguaje Ensamblador del comando RETURN de BASIC, que también marca el final de una subrutina. En el ejemplo, primero se ejecutará SUB1 y luego SUB0. La instrucción JMP que sigue a SUB0 simplemente evita que SUB1 se ejecute por segunda vez. Existe otra instrucción en lenguaje Ensamblador que es similar a la instrucción RTS: la instrucción RTI (Retornar desde la Interrupción - ReTurn from Interrupt). Esta instrucción se utiliza al final de una rutina de Interrupción para devolver el control al programa principal, tal como la instrucción RTS. Hablaremos detalladamente de las Interrupciones en Capítulos posteriores.
LAS INSTRUCCIONES DE BIFURCACIÓN (BRANCH)
A diferencia de las dos instrucciones de transferencia de control incondicional que acabamos de comentar, el 6502 tiene un amplio conjunto de instrucciones de transferencia de control condicional. Estas se pueden comparar con la construcción IF...THEN del BASIC:
IF X=5 THEN GOTO 710
Esta declaración transferirá el control a la línea 710 solo si X es igual a 5. Si es igual a cualquier otro valor, el control del programa pasará a la siguiente línea de código después de la declaración IF. En cierto sentido, al codificar esta línea hemos permitido que la computadora decida qué hacer, dependiendo de las condiciones que hayamos establecido; y hemos establecido una transferencia de control condicional. Estas son las instrucciones de bifurcación del conjunto de instrucciones del 6502:
BCS - Branch on Carry Set - Bifurcar si se establece la bandera de Acarreo "C"
BEQ - Branch on result EQual to zero - Bifurcar si el resultado es igual a Cero
BMI - Branch on result MInus - Bifurcar si el resultado es menor a Cero
BNE - Branch on result Not Equal to zero - Bifurcar si el resultado es distinto de Cero
BPL - Branch on result PLus - Bifurcar si el resutado es mayor a Cero
BVC - Branch on OVerflow Clear - Bifucar si se borra la bandera de Desbordamiento "V"
BVS - Branch on OVerflow Set - Bifurcar si se establece la bandera de Desbordamiento "V"
Cada una de estas instrucciones depende del valor de una de las banderas en el registro de Estado del Procesador. Que se tome o no la bifurcación depende del valor de esas banderas en ese momento, por lo que se trata claramente de instrucciones de transferencia de control condicionales. Veamos un ejemplo sencillo para ver cómo funcionan estas instrucciones:
LDA #0 ;inicializa BCC SUB4 ;bifurcar si borra la bandera de Acarreo LDA #1 ;si no SUB4 STA $0243 ;almacena el valor aqui
En esta rutina, el valor almacenado en la ubicación de memoria $0243 depende de la condición de la bandera de Acarreo en el registro de Estado del Procesador en el momento en que se ejecuta la instrucción de bifurcación. Si la bandera de Acarreo fue establecida (es igual a 1), entonces no se toma la bifurcación y el Acumulador se carga con el valor 1 antes del comando STA. Si la bandera de Acarreo fue borrada (es igual a cero), se toma la bifurcación, el Acumulador no cambia y se almacena el valor 0 en la ubicación de memoria $0243. La instrucción BCS es lo opuesto a la instrucción BCC: la bifurcación se toma si el bit de Acarreo está establecido y no se toma si el bit de Acarreo fue borrado.
Las instrucciones BEQ y BNE dependen del valor de la bandera Cero en el registro de Estado del Procesador, en lugar del valor de la bandera de Acarreo. Si la bandera Cero fue borrada, no se toma la bifurcación BEQ, pero sí la bifurcación BNE. Si se establece la bandera Cero, se toma la bifurcación BEQ y no la BNE. Por ejemplo, aquí no tomamos la bifurcación:
LDA #0 ;establece la bandera Cero BNE SUB4 ;la bifurcacion no se toma
Pero habríamos tomado la bifurcación a SUB4 si hubiéramos escrito esto:
LDA #1 ;borra la bandera Cero BNE SUB4 ;se toma la bifurcacion
La bandera de Desbordamiento se utiliza de forma análoga para determinar el resultado de las instrucciones BVC y BVS. De manera similar, la bandera Negativo determina el resultado de las instrucciones BMI y BPL. Si las instrucciones anteriores producen una respuesta negativa, entonces se toma una bifurcación basada en la instrucción BMI. Si esta respuesta es positiva o igual a cero, se toma la instrucción BPL. Si se usan apropiadamente, estas ocho instrucciones, que dependen de los valores de cuatro de las banderas en el registro de Estado del Procesador, pueden brindar un control extremadamente preciso sobre el flujo del programa en programas en lenguaje Ensamblador, tal como veremos en Capítulos posteriores.
INSTRUCCIONES DEL REGISTRO DE ESTADO DEL PROCESADOR
Estas instrucciones manipulan directamente los indicadores en el registro de estado del procesador:
CLD - CLear Decimal Flag - Borrar la bandera Decimal
CLI - CLear Interrupt Disable Flag- Borrar la bandera de Deshabilitación de la Interrupción
CLV - CLear OVerflow Flag - Borrar la bandera Desbordamiento
SEC - SEt Carry Flag - Establecer la bandera de Acarreo
SED - SEt Decimal Flag - Establecer la bandera Decimal
SEI - SEt Interrupt Disable Flag - Establecer la bandera de Deshabilitación de la Interrupción
Estas instrucciones realizan las operaciones indicadas directamente en las banderas del registro de Estado del Procesador, y su operación, que se explica por sí misma, se describe con más detalle en el Apéndice 1.
INSTRUCCIONES ARITMÉTICAS Y LÓGICAS
Colocaremos todas las instrucciones de cálculo del procesador 6502 en este grupo de instrucciones.
AND - "AND" Memory with Accumulator - Y lógico entre una ubicación y el Acumulador
ASL - Arithmetic Shift Left - Desplazamiento aritmético a la izquierda
BIT - Test BITs in Memory with Accumulator - Comparar los bits de una ubicación con los del Acumulador
EOR - "Exclusive OR" Memory with Accumulator - O Exclusivo lógico entre una ubicación y el Acumulador
LSR - Logical Shift Right - Desplazamiento lógico a la derecha
ORA - "OR" Memory with Accumulator - O lógico entre una ubicación y el Acumulador
ROL - ROtate Left - Rotar a la izquierda
ROR - ROtate Right - Rotar a la derecha
SBC - SuBtract Memory from Accumulator with Carry - Restar con Acarreo
Todas estas son instrucciones complejas; para una explicación detallada de ellas, consulte el Apéndice 1; para una breve discusión, siga leyendo.
La instrucción ADC es la instrucción de suma fundamental del 6502. Abarca la suma del valor almacenado en el Acumulador, más el bit de Acarreo en el registro de Estado del Procesador, más el número direccionado por la propia instrucción ADC. Por ejemplo, sumemos el contenido de la ubicación de memoria $0434 al contenido de la ubicación de memoria $0435 y almacenemos el resultado en la ubicación de memoria $0436:
CLC; primero borrar el bit de Acarreo LDA $0434; obtener el primer número ADC $0435; sumar el segundo número STA $0436; almacenar el resultado
Usaremos ADC con frecuencia durante el resto de este libro. Su contraparte es la instrucción de resta, SBC. SBC resta el valor direccionado del valor almacenado en el Acumulador, utilizando el bit de Acarreo del registro de Estado del Procesador si se necesita un préstamo para poder realizar la resta. Para restar los mismos valores que sumamos arriba, escribimos esto:
SEC; en caso de que necesitemos un préstamo LDA $0434; obtener el primer número SBC $0435; restarle el segundo STA $0436; almacenar el resultado
Hay cuatro instrucciones SHIFT (de desplazamiento) en este grupo: ASL, LSR, ROL y ROR. Todas estas instrucciones desplazan los bits de un número, pero de diferentes maneras. Las dos instrucciones ROTATE (de rotación) utilizan el bit de Acarreo del registro de Estado del Procesador y literalmente rotan los 8 bits del número direccionado a través de las 9 posiciones (8 en el número mismo y 1 del bit de Acarreo). Gráficamente, esto se parece al siguiente ejemplo:
ROR $0434; rotar a la derecha el contenido de $0434
en $0434 en C
10110100 1
FIN
en $0434 en C
11011010 0
Como puede ver, cada bit rotó una posición hacia la derecha, con el bit 0 terminando en el bit de Acarreo y el bit de Acarreo anterior terminando en el bit 7 de la ubicación $0434.
La instrucción ROL simplemente invierte la rotación hacia la izquierda en lugar de hacia la derecha. Las dos instrucciones de desplazamiento (SHIFT), ASL y LSR, funcionan casi de la misma manera excepto que, aunque el bit final termina en el bit de Acarreo tal como se indicó anteriormente, el cero, en lugar de lo que estaba en el bit de Acarreo, siempre rota hacia el número.
Estas cuatro instrucciones SHIFT se utilizan para multiplicar o dividir por potencias de 2 ya que, al rotar bits hacia la izquierda, duplicamos un número, y al rotar bits hacia la derecha, efectivamente dividimos un número por 2. Sin embargo, hay precauciones que se deben tener al utilizar estas instrucciones para este propósito, tal como se describirá en el Apéndice 1.
Las tres instrucciones lógicas, AND, EOR y ORA, son simplemente tres formas de comparar dos números, bit a bit. Toman las formas binarias de los dos números que se comparan y, dependiendo de si ambos números contienen un uno o un cero en cada bit, producen resultados diferentes. La instrucción AND dice "Si ambos bits son 1, el resultado también tendrá un 1 en esa posición. Si no, el resultado tendrá un cero en esa posición". La instrucción EOR dice "Si uno, y sólo uno, de los números tiene un 1 en esa posición, el resultado también tendrá un 1 en esa posición. Si ambos números tienen un 1 o ambos contienen 0, el resultado tendrá un cero en esa posición" Finalmente, la instrucción ORA dice "Si uno o ambos números tienen un 1 en esta posición, el resultado también tendrá un 1 en esta posición". Estas tres instrucciones lógicas se utilizan de diversas formas. ORA se usa más comúnmente para establecer un bit específico en un número, EOR para complementar un número y AND para borrar un bit específico de un número. Si no está familiarizado con estas tres operaciones lógicas, consulte el Apéndice 1 para obtener más detalles.
La instrucción final de este grupo es BIT, que es una instrucción de comparación. BIT establece la bandera Negativo del registro de Estado del Procesador igual al bit 7 del número que se está comparando, y la bandera de Desbordamiento igual al bit 6 del número que se está comparando. BIT también establece la bandera Cero, dependiendo del resultado de la combinación del número que se está comparando con el almacenado en el Acumulador. Esta instrucción prueba varios aspectos de un número a la vez. Tenga en cuenta que el número en el Acumulador no cambia mediante la instrucción BIT. Siguiendo esta instrucción con una de las instrucciones BRANCH que ya hemos comentado, podemos provocar una bifurcación adecuada en la ejecución del programa.
INSTRUCCIONES DE MANIPULACIÓN DEL 6502
Al igual que las instrucciones LOAD y STORE que analizamos anteriormente, las siguientes instrucciones implican intercambiar información desde una parte de la computadora a otra:
PHP PusH Processor Status register on Stack - Introducir el registro de Estado del Procesador en la Pila
PLA PuLl Accumulator from Stack - Extraer el contenido del Acumulador desde la Pila
PLP PuLl Processor Status register from Stack - Extraer el registro de Estado del Procesador desde la Pila
TAX Transfer Accumulator to Index X - Transferir el contenido del Acumulador al registro Índice X
TAY Transfer Accumulator to Index Y - Transferir el contenido del Acumulador al registro Índice Y
TSX Transfer Stack Pointer to Index X - Transferir el Puntero de la Pila al registro Índice X
TXA Transfer Index X to Accumulator- Transferir el contenido del registro Índice X al Acumulador
TXS Transfer Index X to Stack Pointer - Transferir el registro Índice X al Puntero de la Pila
TYA Transfer Index Y to Accumulator- Transferir el contenido del registro Índice Y al Acumulador
Las funciones de estas instrucciones también se explican por sí solas. Se utilizan para intercambiar información entre los distintos registros del 6502 o para almacenar información en la Pila para su posterior recuperación. Como veremos, las instrucciones PHA y PLA se utilizan frecuentemente para pasar información entre un programa BASIC y una subrutina en Lenguaje de Máquina.
INSTRUCCIONES DE INCREMENTO Y DECREMENTO
Las instrucciones de este grupo pueden aumentar o disminuir en 1 el valor contenido en una ubicación de memoria especificada o en uno de los registros del 6502:
DEX DEcrementar en uno el registro Índice X
DEY DEcrementar en uno el registro Índice Y
INC INCrementar en uno el contenido de una dirección de memoria
INX INcrementar en uno el registro Índice X
INY INcrementar en uno el registro Índice Y
Estas instrucciones son sencillas. A continuación, se muestra un ejemplo de su uso:
LDA #3 ;comienza con 3 STA $0243 ;almacénelo aquí INC $0243 ;ahora es un 4 INC $0243 ;ahora es un 5 DEC $0243 ;ahora es un 4 otra vez
Tenga en cuenta que no hay ninguna instrucción de incremento o decremento que opere sobre el Acumulador. Para aumentar o disminuir un número en el Acumulador debemos utilizar la instrucción ADC o SBC. Por lo tanto, si se requiere un incremento o decremento simple, es más fácil cargar un número en el registro X o Y, en lugar de en el Acumulador, y luego simplemente usar la instrucción de incremento o decremento apropiada.
LAS INSTRUCCIONES DE COMPARACIÓN
Tres instrucciones permiten realizar comparaciones entre dos valores. Según el resultado de la comparación, estas instrucciones condicionan varias banderas en el registro de Estado del Procesador:
CPX ComParar el registro Índice X con la memoria
CPY ComParar el registro Índice Y con la memoria
La forma en que cada uno de estos afecta al registro de Estado del Procesador se describe completamente en el Apéndice 1, pero aquí se proporciona un ejemplo simple para demostrar el uso de las instrucciones COMPARE:
LDA $0243 ;obtenga el 1er número CMP $0244 ;compárelo con el 2do BNE SUB6 ;vaya a SUB6 si $244 >$243 LDA #1 ;de lo contrario, haga esto
LAS INSTRUCCIONES RESTANTES
Las dos instrucciones finales no encajan fácilmente en ningún grupo. Estas son las instrucciones BRK (BReaK) y NOP (NO OPeration). La instrucción BRK se utiliza principalmente para depurar su programa una vez que lo haya escrito. Hace que el programa que se está ejecutando se detenga y es algo similar en este sentido a la instrucción STOP del BASIC. La instrucción NOP no hace nada; su función principal es reservar espacio en un programa para futuros cambios que puedan ser necesarios. Puede ser necesario reservar este espacio, ya que frecuentemente en un programa en lenguaje Ensamblador, la ubicación exacta de la memoria ocupada por una instrucción puede ser crítica, y las instrucciones NOP en el código pueden ser reemplazadas por comandos funcionales sin cambiar la ubicación en la memoria de las instrucciones que le siguen.
Esto completa nuestra breve introducción al conjunto de instrucciones del 6502. Como ya hemos dicho, los detalles sobre cualquiera de estas instrucciones se pueden encontrar en el Apéndice 1. Se recomienda encarecidamente que los principiantes en lenguaje Ensamblador lean el Apéndice 1 detenidamente. Si ya está familiarizado con el conjunto de instrucciones, esta breve discusión debería haber refrescado las instrucciones en su mente y estará listo para continuar.
Índice de Contenido | Capítulo anterior | Siguiente capítulo