¿Cómo maneja la CPU XCHG internamente?

2

Al diseñar mi propia CPU de 16 bits, me pregunto cómo se ejecuta internamente la instrucción de registro-registro XCHG. Por informática, conozco el DLX que no proporciona XCHG y, por lo tanto, no necesita acceder a dos registros en la reescritura (¿esto sería posible?), Sino solo el registro de destino. Supongo que esto no se hace en un ciclo, ¿verdad?

Thx por adelantado

    
pregunta Benjoyo

3 respuestas

1

Tienes un par de opciones.

Puede agregar el hardware adicional en la ruta de datos para permitir que ocurra en un ciclo. Esto tiene dificultades en una arquitectura de canalización porque un archivo de registro de puerto dual se usa a menudo para lecturas y escrituras simultáneas para las diferentes etapas. Esto agrega la necesidad de un segundo puerto de escritura. Sin esto, realmente no hay una manera de evitar que ocurra una burbuja en la tubería.

Una opción generalmente mejor es simplemente tener una instrucción multiciclo. Lo importante aquí es asegurarse de evitar que cualquier otra operación, como interrupciones u otros maestros de bus (en el caso de un intercambio de memoria), haga que esto parezca no atómico.

La opción de instrucción multiciclo es lo que generalmente se hace. Por ejemplo, las instrucciones ARM SWP y XCHG son multiciclo.

    
respondido por el caveman
0

Otra opción es alterar el direccionamiento del registro, sospecho que así es como los swaps de opcode Z80 EXX registran los bancos en 4 ciclos. es posible también que EX DE,HL intercambie dos registros de registros en 4 ciclos en el mismo micro el mismo número de ciclos que se necesita para copiar un registro de 8 bits a otro.

    
respondido por el Jasen
0

Lo más probable es que esta instrucción se implemente mediante el cambio de nombre del registro. Con el cambio de nombre del registro, los contenidos del registro se asignan a los nombres de los registros con etiquetas. Esto hace que el intercambio de registros sea muy fácil, simplemente intercambie las etiquetas. No es necesario realizar múltiples escrituras de registro en el mismo ciclo.

Así es como el Z80 implementó la instrucción EX. Consulte: enlace

  

Intercambiar registros a través del cambio de nombre del registro

     

El Z80 tiene varias instrucciones para intercambiar registros o conjuntos de registros. La instrucción EX DE, HL intercambia los registros DE y HL. La instrucción EX AF, AF 'intercambia los registros AF y AF'. La instrucción EXX intercambia los registros BC, DE y HL con los registros BC ', DE' y HL '. Estas instrucciones se completan muy rápidamente, lo que plantea la pregunta de cómo varios valores de registro de 16 bits pueden moverse alrededor del chip a la vez.

     

Resulta que estas instrucciones no mueven nada. Solo alternan un bit que cambia el nombre de los registros apropiados. Por ejemplo, considere intercambiar los registros DE y HL. Si se establece el bit DE / HL, una instrucción que actúa sobre DE usa el primer registro y una instrucción que actúa sobre HL usa el segundo registro. Si se borra el bit, una instrucción DE usa el segundo registro y una instrucción HL usa el primer registro. Por lo tanto, desde la perspectiva del programador, parece que los valores en los registros se han intercambiado, pero en realidad solo se han intercambiado los significados / nombres / etiquetas de los registros. Del mismo modo, un bit selecciona entre AF y AF ', y un bit selecciona entre BC, DE, HL y las alternativas. En total, hay cuatro registros que pueden utilizarse para DE o HL; físicamente no hay registros separados de DE y HL.

     

El hardware para implementar el cambio de nombre del registro es interesante, ya que utiliza cuatro flip flops de alternancia. [7] Estos flip flops se alternan según las instrucciones EX y EXX apropiadas. Un flip flop maneja AF / AF '. El segundo flip flop maneja BC / DE / HL vs BC '/ DE' / HL '. Los dos últimos flip flops manejan DE vs HL y DE 'vs HL'. Tenga en cuenta que se requieren dos flip flops ya que DE y HL pueden intercambiarse independientemente en cualquier banco de registros.

    
respondido por el alex.forencich

Lea otras preguntas en las etiquetas