Estoy aprendiendo MIPS 32 bit. Quería preguntar por qué firmamos Extiende el desplazamiento de 16 bits (en Single Cycle Datapath) antes de enviarlo a la ALU en caso de Store Word.¿Por qué firmamos Extender en instrucción de palabra de carga?
Respuesta
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.
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.
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.
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.
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.
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.
- 1. MIPS palabra de carga sintaxis
- 2. ¿Por qué extender la clase de excepción?
- 3. ¿Por qué existe la palabra clave 'sellado' en .Net?
- 4. ¿Por qué un rasgo de Scala puede extender una clase?
- 5. ¿Por qué no es posible extender anotaciones en Java?
- 6. ¿Por qué no puedo extender bool en Python?
- 7. ¿Por qué no funciona esta instrucción SQL?
- 8. ¿Por qué es lenta una instrucción de bifurcación de CPU?
- 9. Instrucción SQL para encontrar la última palabra en la cadena
- 10. ¿Por qué palabra clave "paquete" y .h?
- 11. ¿Por qué existe la palabra clave async
- 12. palabra clave LIMIT en MySQL con instrucción preparada
- 13. Excepciones a C++: ¿Por qué usar o extender std :: exception?
- 14. ¿Por qué no debería extender JFrame y otros componentes?
- 15. ¿Por qué dos? S en una instrucción IF al usar &&?
- 16. ¿por qué usar WHERE 1 = 0 instrucción en SQL?
- 17. ¿Por qué esta instrucción SELECT se bloqueará en SQL Server?
- 18. ¿Por qué el 'BINARY' en una instrucción SELECT?
- 19. ¿Por qué BITMAPS carga "hacia arriba"?
- 20. Palabra clave auto de C++. ¿Por qué es magia?
- 21. ¿Por qué CSS no se carga?
- 22. ¿Qué es una "carga útil"? por ejemplo, la carga útil XML
- 23. ¿Por qué no hay palabra clave "no es" en C#?
- 24. ¿Por qué es accesible una palabra reservada en mysql?
- 25. ¿Qué tipo de mecanismo de bloqueo usa instrucción de bloqueo?
- 26. ¿Extender Backbone.sync a la sincronización por lotes?
- 27. Barrier de memoria por instrucción de bloqueo
- 28. ¿Por qué WebView de Android no carga algunas URL?
- 29. ¿Por qué no puedo extender el bolsillo de todos en nowjs?
- 30. ¿Qué hace la instrucción de montaje ORG?
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? –
El contenido del registro base es de 32 bits, y eso es lo que realmente entra en ALU. – jpa