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. Mips admite solo 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é pasaría si quisiera implementar la carga indirecta de dirección en la unidad de control, escribiendo las construcciones erróneas para el modo indirecto de dirección similar a una computadora cisc básica? Donde la dirección del valor está en la memoria. ¿Es posible hacerlo en una sola instrucción?
Editar:
Esto es lo que estoy buscando en una instrucción:
Reg[$t9]<-M[Addrs]
o mejor aún
Reg[$t9]<-M[M[Addrs]]
No como una sola instrucción, no. Básicamente porque MIPS, como instrucción de 32 bits, no tiene espacio para contener 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 dirección física, 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, puede acceder a él en relación con el registro cero (se firma un desplazamiento, 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 objetivo de RISC a diferencia de CISC es que 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 toman más de un ciclo de reloj para ejecutarse (solo las instrucciones de bifurcación son realmente más largas), mientras que en CISC las instrucciones pueden tomar muchos más ciclos para ejecutarse. En RISC, usa solo los ciclos de reloj que necesita para esa tarea específica, y no desperdicia ciclos de reloj en instrucciones de longitud extendida que hacen lo que quiere, además de otras cosas que podrían ser útiles en otras situaciones.
Además, RISC permite una mejor multitarea, ya que cada instrucción generalmente es solo un ciclo, por lo que las interrupciones pueden ocurrir más rápido. Con CISC, si una instrucción tarda, digamos, 20 ciclos en ejecutarse, el sistema no puede ejecutar una interrupción hasta que finalice esa instrucción.
Majenko
Reg[$t9]<-M[addr]
lo que buscas?FIFI PIRATA