Aclaración de los formatos de instrucción de tipo R, I y J en MIPS

0

Me gustaría una aclaración sobre algunos conceptos de los tipos de registro, para saber si lo entiendo correctamente.

Si tuviera una CPU de 32 bits.

Eso significaría que el número máximo de operaciones que puede ejecutar la CPU es: $$ 3 \ times2 ^ {6} = 192 $$

Además, el número de registros en la CPU sería: $$ 2 ^ {5} = 32 $$

Lo que luego haría que la memoria principal sea: $$ 32 \ times 4bits = 64 bits = 8bytes $$

Finalmente, el tamaño máximo de la dirección de destino del tipo J sería: $$ 2 ^ {26} $$

    
pregunta user3067059

1 respuesta

2
  

Eso significaría que el número máximo de operaciones que se pueden ejecutar   por la CPU sea: \ $ 3 \ cdot 2 ^ 6 = 192 \ $

No del todo. La CPU debe poder distinguir si una instrucción es una instrucción de tipo R, I o J del código de operación, por lo que el número de códigos de operación es solo \ $ 2 ^ 6 = 64 \ $. Sin embargo, las instrucciones de tipo R también contienen el campo de 6 bits funct que actúa como otro campo de código de operación para las instrucciones de tipo R. Las instrucciones tipo R siempre tienen un campo de código de operación de 000000 , por lo que su número total de instrucciones es \ $ 2 ^ 6-1 + 2 ^ 6 = 127 \ $, porque tiene \ $ 2 ^ 6 \ $ codificaciones de código de operación, pero usa una para seleccionar la instrucción de tipo R, donde luego tienes \ $ 2 ^ 6 \ $ más instrucciones del campo funct .

  

Además, el número de registros en la CPU sería: \ $ 2 ^ 5 = 32 \ $

Sí, MIPS tiene 32 registros.

  

Lo que luego haría que la memoria principal sea:   \ $ 32 × 4bits = 64bits = 8bytes \ $

No estoy seguro de cómo estás obteniendo esto. El tamaño (máximo) de la memoria principal depende de cuántos bits hay en una dirección * la unidad direccionable más pequeña. MIPS tiene direcciones de 32 bits (eso es lo que generalmente significa una CPU de 32 bits), y la unidad más pequeña direccionable es 1 byte. Eso significa que la cantidad máxima de memoria es $$ 2 ^ {32} bytes = 4,294,967,296bytes = 4GiB $$

Pero, ¿cómo usa una dirección de 32 bits si solo hay 5 bits por campo en una instrucción? MIPS es una arquitectura Load-Store, lo que significa que la mayoría de las instrucciones solo interactúan con los registros, y solo las instrucciones de carga y almacenamiento pueden acceder a la memoria. Por ejemplo, digamos que quiero agregar 5 al int almacenado en la dirección 0x14859868:

lui $8, 0x1485      # load upper 16 bits into register 8
ori $8, $8, 0x9868  # load lower 16 bits into register 8
lw $9, 0($8)        # load register 9 with the contents of memory at 0x14859868
addi $9, $9, 5      # add 5 to the number in register 9
sw $9, 0($8)        # store the contents or register 9 to 
                    # the memory pointed to by register 8

En lugar de especificar la dirección directamente, cargo la dirección en un registro ( $8 ) y la uso como puntero para acceder a la memoria.

    
respondido por el C_Elegans

Lea otras preguntas en las etiquetas