2011-09-18 22 views

Respuesta

8

Parece que el desplazamiento de 16 bits es un número 2's complement con signo, es decir, puede ser positivo o negativo.

Al convertirlo a 32 bits, el bit más significativo debe copiarse a los 16 bits superiores para mantener la información del signo.

+0

que quería decir ¿por qué tenemos que convertirlo a 32 bits? El otro registro (registro base) que entra en la ALU no es de 32 bits, sino de solo 5 bits. ¿Por qué necesita ser 32 bits? –

+2

El contenido del registro base es de 32 bits, y eso es lo que realmente entra en ALU. – jpa

10

No estoy seguro si es útil para usted ahora, pero lo estoy publicando de todos modos.

Consideremos en un sentido muy general, una serie de instrucciones en C++, es decir, A [0], A [1], A [2] ..... La distancia "figurativa" entre dos instrucciones cualquiera es 1 UNIDAD.

Tomemos esta analogía a MIPS. En MIPS, figurativamente, cada instrucción está separada por "1 UNIDAD", sin embargo, 1 UNIDAD = 4 bytes en MIPS. Cada instrucción tiene 4 bytes de longitud y esta es la razón por la cual al pasar de la instrucción a la instrucción, la PC se incrementa en 4, es decir, PC + 4. Entonces, la brecha entre la instrucción i y la instrucción i + 2 es "figurativamente" 2 pero en realidad 2 * 4 = 8, es decir PC + 4 + 4

Volviendo a las compensaciones que se especifican en las instrucciones de la Rama, la compensación representa el distancia "figurativa" de la siguiente instrucción (la instrucción que sigue a la Rama). Entonces, para obtener la distancia "real", el desplazamiento se multiplicará por 4. Esta es la razón por la que se nos instruye a "extender-firmar" el desplazamiento en 2 bits a la "IZQUIERDA", ya que, a la izquierda, se desplaza cualquier valor binario n bits resulta en multiplicar ese valor por 2^n. En nuestro caso 2^2 = 4

Por lo tanto, la dirección de destino real de una instrucción de bifurcación es PC + 4 + 4 * Offset.

Espero que esto ayude.

0

Según mi mejor conocimiento, en las instrucciones de carga o almacenamiento, el valor de compensación se agrega al valor en el registro temporal, como temp. el registro es de 32 bits y no es posible la operación de adición de 16 bits y 32 bits, el valor es signo extendido.

0

Creo que aquí sus conceptos están un poco equivocados.

Los 5 bits que cree que van dentro de la ALU, entran realmente dentro de la memoria de registro para seleccionar uno de los 32 [2^5] registros.

Cada registro en sí es de 32 bits. Por lo tanto, para agregar el desplazamiento al valor de registro, debe firmar extenderlo a 32 bits.

El funcionamiento de la ALU se realiza siempre entre dos registros del mismo tamaño en la ruta de datos de un solo ciclo para MIPS.

0

En el hardware de una máquina de 32 bits, la mayoría de las ALU toman entradas de 32 bits, y todos los registros son registros de 32 bits.

Para trabajar con sus datos debe tener 32 bits de ancho, esta es la razón por la que SIGN-extends, sin embargo, otro enfoque sería ZERO-extender, pero SIGN-extend se usa cuando se trata de operaciones inmediatas y compensaciones para preservar el signo en complemento a 2.

0

La extensión de signo se produce, p. en el caso de máquinas M68xxx solo en caso de cargar los registros de direcciones. No es así en el caso de los registros de datos.

teniendo, p.

movea.w addr,a0 
move addr,d0 
addr: 
dc.w $FFFF 

cables en caso de registro de datos de carga a $ 0000ffff, en el caso de la dirección del registro de carga sin embargo a $ FFFFFFFF.

Para entender esto, construya los dos complementos de la presentación negativa firmada, $ FFFF, amplíe el número a 32 bit y vuelva a hacer el complemento dos , encontrando la representación correspondiente en 32 bit.

Saludos y saludos cordiales, Stephan S.

Cuestiones relacionadas