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.