Los registros del microprocesador 6510 (parte I)

El microprocesador 6510 es un circuito integrado, un chip. Y como tal tiene una serie de componentes electrónicos internos. Y los componentes más importantes para el programador son sus “registros”, que vienen a ser como variables internas en las que el microprocesador puede leer información (bytes) que proviene de memoria, manipularla (ej. operaciones aritméticas, operaciones lógicas, etc.), y volver a escribirla a memoria. En definitiva, los registros permiten ejecutar los programas y procesar los datos.

Los registros del microprocesador 6510 son:

  • El acumulador (A).
  • El registro X (X).
  • El registro Y (Y).
  • El contador de programa (PC).
  • El registro de estado (P).
  • El puntero de la pila (S).
  • El registro de dirección de datos (DDR).
  • El puerto de entrada/salida (IOP).

Estos registros se describen a continuación.

El acumulador (A)

El acumulador es el registro de propósito más general. Tiene 8 bits.

Sirve para cosas como:

  • Operaciones de lectura de datos desde memoria (instrucción “lda”).
  • Operaciones aritméticas (instrucciones “adc” y “sbc”).
  • Operaciones lógicas (instrucciones “and”, “ora” y “eor”).
  • Operaciones de manipulación de bits (instrucciones “asl”, “lsr”, “ror” y “rol”).
  • Operaciones de comparación de datos (instrucción “cmp”).
  • Operaciones de escritura de datos en memoria (instrucción “sta”).

En el ensamblador del 6510, siempre que se hacen operaciones aritméticas o lógicas, uno de los operandos está en el acumulador y el otro operando está en memoria; el resultado se vuelve a guardar en el acumulador.

El registro X

El registro X también tiene 8 bits. Comparte algunas funciones con el acumulador (leer datos desde memoria, escribir datos en memoria, etc.) pero, además, tiene una función muy importante como índice. Es decir, sirve para hacer bucles y leer/escribir en el acumulador de forma consecutiva varias posiciones de memoria desde una posición de base. Esas posiciones de memoria se van recorriendo según se va incrementando/decrementando X.

Sirve para cosas como:

  • Operaciones de lectura datos desde memoria (instrucción “ldx”).
  • Operaciones para incrementar/decrementar el índice (instrucciones “inx” y “dex”).
  • Operaciones de comparación de datos (instrucción “cpx”).
  • Operaciones de escritura de datos en memoria (instrucción “stx”).
  • Operaciones de movimiento de datos con el acumulador (instrucciones “txa” y “tax”).
  • Operaciones de movimiento de datos con el puntero de la pila (instrucciones “txs” y “tsx”).

El registro Y

El registro Y también tiene 8 bits. Es muy similar al registro X, es decir, permite leer/escribir datos desde memoria y, además, tiene una función muy importante como índice.

Sirve para cosas como:

  • Operaciones de lectura datos desde memoria (instrucción “ldy”).
  • Operaciones para incrementar/decrementar el índice (instrucciones “iny” y “dey”).
  • Operaciones de comparación de datos (instrucción “cpy”).
  • Operaciones de escritura de datos en memoria (instrucción “sty”).
  • Operaciones de movimiento de datos con el acumulador (instrucciones “tya” y “tay”).

El registro Y no es exactamente igual al registro X. Las diferencias más importantes son:

  • Permite algunos modos de direccionamiento distintos. El registro X tiene el modo de direccionamiento indexado indirecto, y el registro Y el indirecto indexado; se verán en detalle más adelante.
  • El registro X permite intercambio de datos con el puntero de la pila (instrucciones “txs” y “tsx”), cosa que no es posible con el registro Y.

Por lo demás, son registros muy parecidos, y que se pueden usar indistintamente con frecuencia.

El contador de programa (PC)

El contador de programa es el registro del microprocesador 6510 que almacena la posición de memoria donde reside la siguiente instrucción que se va a cargar y ejecutar. Por tanto, al ser la memoria del C64 de 64K, necesita tener 16 bits.

El contador de programa normalmente se va incrementando de forma secuencial, salvo cuando se ejecuta alguna instrucción de salto incondicional (ej. instrucciones “jmp” y “jsr”/”rts”) o de salto condicional (ej. instrucciones “beq”, “bne”, “bcc”, “bcs”, “bmi”, “bpl”, “bvc” o “bvs”), en cuyo caso el contador de programa parece saltar de una dirección a otra.

Deja un comentario