implementando el modo de direccionamiento directo para una instrucción de carga en una arquitectura mips

1

Dada una máquina Mips con direcciones de 26 bits y rutas de datos de 32 bits, donde la instrucción de carga es la siguiente

| código OPT | rs | rd | inmediato |

| 6 bits | 5 bits | 5 bits | 16 bits |

El código OPT es el tipo de instrucción (lw), rd es donde se cargará el valor, rs es el registro base e inmediato es el desplazamiento. Los Mips solo admiten el modo de desplazamiento, lo que significa:

 lw $t9, ($t7)60

es lo mismo que

 Reg[$t9]<-M[Reg[$t7]+60]

Esta es una carga típica de mips pero, ¿qué ocurre si quisiera implementar la carga indirecta de direcciones en la unidad de control, escribiendo las interpretaciones erróneas para el modo de dirección indirecta similar a una computadora cisc básica? Donde la dirección del valor está en la memoria. ¿Es esto posible hacer en una sola instrucción?

Editar:

Esto es lo que busco en una instrucción:

Reg[$t9]<-M[Addrs]

o mejor aún

Reg[$t9]<-M[M[Addrs]]
    
pregunta PIRATE FIFI

1 respuesta

1

No como una sola instrucción, no. Básicamente, porque MIPS, como una instrucción de 32 bits, no tiene espacio para guardar un código de operación, un registro de destino y una dirección de 32 bits.

Aunque su sistema específico puede tener solo 26 líneas de direcciones físicas, internamente sigue siendo un esquema de direccionamiento de 32 bits. Esas 26 líneas de dirección pueden representar los 26 bits más bajos de una dirección de 32 bits, o pueden asignarse a diferentes áreas del espacio de direcciones de 4GiB a través de una MMU de alguna forma.

Para cargar un valor de una dirección en un registro, primero debe cargar la ubicación en un registro y luego cargar el valor de la memoria en relación con ese registro.

Si el valor que desea se encuentra dentro de los primeros 32768 bytes del espacio de direcciones, entonces puede acceder a él en relación con el registro cero (un desplazamiento está firmado, por lo que solo 15 bits son válidos para la parte más baja) de la memoria). Un desplazamiento negativo desde cero le daría acceso a los 32767 bytes superiores del espacio de memoria (32 bits).

El punto central de RISC en lugar de CISC es que usted tiene algunas instrucciones muy básicas que encadena para hacer lo que quiere, en lugar de una sola instrucción que hace todo por usted. En RISC hay muy pocas instrucciones que requieren más de un ciclo de reloj para ejecutarse (solo que en realidad las instrucciones de bifurcación son más largas), mientras que en CISC las instrucciones pueden demorar muchos más ciclos en ejecutarse. En RISC, solo usa los ciclos de reloj que necesita para esa tarea específica, y no desperdicia los ciclos de reloj en instrucciones de larga duración que hacen lo que quiere más otras cosas que podrían ser útiles en otras situaciones .

Además, RISC hace que la multitarea sea mejor, ya que cada instrucción es generalmente de un solo ciclo, por lo que las interrupciones pueden suceder más rápido. Con CISC, si una instrucción toma, digamos, 20 ciclos para ejecutarse, el sistema no puede ejecutar una interrupción hasta que termine esa instrucción.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas