Rango de instrucción MIPS j

3

Entiendo que para MIPS-32, los primeros 4 bits de la dirección para saltar se toman de los primeros 4 bits de la dirección de la instrucción j, lo que significa que tenemos un límite de 2 ^ 28 bits alrededor de la dirección de la instrucción j a la que podemos saltar. En línea dice que este límite es de 256MB pero 2 ^ 28 bits es de 32MB y no de 256MB. ¿Alguien puede explicar por qué es 256 MB?

    
pregunta Vizuna

2 respuestas

4

El direccionamiento en la mayoría de los núcleos de CPU que conozco funciona por byte. No direccionas bits individuales.

El MIPS requiere que sus instrucciones estén alineadas con 4 bytes (palabra) , es decir, las dos LSB s son siempre cero. De esa manera, no están codificadas en las instrucciones.

La respuesta de

@ sherrelbc lo explica bastante bien, aunque me gusta más la semántica de "word-align" , que "word-Address" .

El enlace @valcroft dio también tiene la respuesta a medio página:

  

Direccionamiento pseudo-directo

     

Direccionamiento directo significa especificar una dirección completa de 32 bits en la propia instrucción. Sin embargo, dado que las instrucciones MIPS son de 32 bits, no podemos hacer eso. En teoría, solo necesita 30 bits para especificar la dirección de una instrucción en la memoria. Sin embargo, MIPS usa 6 bits para el código de operación, por lo que todavía no hay suficientes bits para hacer direccionamiento directo verdadero.   En su lugar, podemos hacer direccionamiento pseudo-directo. Esto ocurre en las instrucciones j.

| Opcode  |              Target              |
|---------|----------------------------------|
|  B31-26 |               B25-0              |
| oooo oo | tt tttt tttt tttt tttt tttt tttt |
  

Se usan 26 bits para el objetivo. Así es como se calcula la dirección para el direccionamiento pseudodirecto.

PC <- PC31-28::IR25-0::00

  

Tome los 4 bits principales de la PC, concatene eso con los 26 bits que forman el objetivo y concatene con 00. Esto produce una dirección de 32 bits. Esta es la nueva dirección de la PC.

Entonces, 26 bits a la izquierda desplazados por dos dan un límite de dirección relativo de \ $ 2 ^ {28}. \ $

\ $ 2 ^ {28} bytes \ $ es \ $ 256 MiB \ $, o \ $ 256 * 1024 ^ 2 \ $.

    
respondido por el Dzarda
1

En realidad, los primeros 6 bits de la instrucción son el código de operación . Estos bits son utilizados por el módulo de control en la ruta de datos para determinar qué señales de control se deben afirmar para facilitar la ejecución de la instrucción.

El código de operación se encuentra en los bits 31 a 26, que se muestra alimentando el módulo de control. Como puede ver en la imagen de arriba, los 26 bits inferiores de la instrucción se desplazan a la izquierda dos veces y concatenan con los 4 bits superiores ya contenidos en el Contador de programas (PC). Este es un resultado directo de que MIPS sea palabra direccionada (32 bits = 4 bytes = 1 palabra MIPS) en lugar de byte direccionado , por lo que el doble desplazamiento a la izquierda nos permite abordar 2 ^ 28, o 268,435,456 (256 MiB), palabras de instrucción dentro del rango de los 4 bits más significativos de la PC. Si el código de operación es tal que se va a ejecutar un salto , el mux de arriba a la derecha selecciona este nuevo valor de PC concatenado y la siguiente instrucción que se buscará será en la nueva dirección.

En realidad, la PC ya se incrementó en 4, o en una instrucción, antes de concatenar.

    
respondido por el sherrellbc

Lea otras preguntas en las etiquetas