assembly - palabras - recursividad en mips
donde puedo encontrar una descripción de*todas*las instrucciones de MIPS, (5)
¿Alguien sabe de un sitio web donde puedo encontrar una lista de instrucciones / códigos de operación MIPS de 32 bits, con las siguientes características:
- Claramente distingue entre códigos de operación reales y macros en lenguaje ensamblador
- Describe el comportamiento de la instrucción, incluidas las diferencias según el nivel de privilegio.
- Indica en qué revisión de conjunto de instrucciones se introdujo / revisó la instrucción (p. Ej., MIPS I, MIPS II, MIPS32, etc.)
- Incluye instrucciones privilegiadas como syscall.
Conozco numerosos sitios web que documentan "parte de" el conjunto de instrucciones, principalmente con fines didácticos. Tienden a omitir o solo describen parcialmente el punto flotante y las instrucciones privilegiadas.
En caso de que te lo estés preguntando, estoy buscando el código Verilog para un subconjunto de procesador MIPS, y tratando de averiguar exactamente hasta qué punto cumple con los conjuntos de instrucciones de cualquier procesador MIPS real. Gracias por cualquier puntero.
De acuerdo, ¡encontré algo!
MIPS ofrece un conjunto de "manuales de referencia MIPS 32" que se refieren al último conjunto de instrucciones estandarizadas (MIPS32v2): aquí
Estos incluyen casi todo, excepto la información sobre la versión en la que se originaron las instrucciones :-(
ESPERA UN SEGUNDO...
Este sitio web de clase en Cornell incluye enlaces a lo que parece ser el mismo manual, pero de hecho es una versión anterior de él , y el volumen 2 de esa versión anterior de hecho incluye información sobre cuándo se introdujeron las instrucciones por primera vez. Woohoo!
¿Por qué el MIPS eliminaría esta información de la documentación revisada? No parece haber ninguna explicación en el historial de revisión.
El manual de referencia del juego de instrucciones actual es gratuito en línea: Arquitectura MIPS® para programadores Volumen II-A: El manual de conjunto de instrucciones MIPS32® . Ese enlace es la Revisión 6.06 del 15 de diciembre de 2016. (es decir, documenta la versión 6 de MIPS32 ).
Documenta todas las instrucciones de usuario y supervisor / modo kernel, y todo el punto flotante, con todo detalle, incluida su codificación de código de máquina, y con una sección de Operación que muestra lo que hacen. Todavía documenta todas las instrucciones que se eliminaron en la versión 6 de MIPS32. (La versión 6 de MIPS32 también se movió alrededor de una gran cantidad de códigos de operación, y esto está bien documentado).
Consulte https://www.mips.com/products/architectures/mips32/ para obtener la última versión. mips.com tiene una sección para "núcleos clásicos", pero parece que solo regresa a MIPS32, no a material histórico.
Ejemplo de la sección "disponibilidad y compatibilidad" para balc
(Branch y Link Compact: sin ranura de retardo de rama, y GRP31 es el destino implícito, liberando 26 bits para un offset<<2
):
Esta instrucción es introducida y requerida a partir de la versión 6. Instrucción de liberación 6
BALC
ocupa la misma codificación que la instrucciónSWC2
anterior a la versión 6. La instrucciónSWC2
se ha movido al código de operación principal de laCOP2
en la versión 6 de MIPS
O para LDXC1 fd, index(base)
(Load Doubleword Indexed to Floating Point)
Esta instrucción se eliminó en la Versión 6. Se requiere en todas las versiones de MIPS64 desde MIPS64 Versión 1. No está disponible en MIPS32 Versión 1. Se requiere en MIPS32 Versión 2 y todas las versiones posteriores de MIPS32. Cuando sea necesario, se requiere siempre que esté presente FPU, ya sea una FPU de 32 bits o de 64 bits, ya sea en modo de registro FP de 32 bits o de 64 bits (FIRF64 = 0 o 1, StatusFR = 0 o 1).
Para cosas históricas, encontré el conjunto de instrucciones MIPS IV Revisión 3.2 de septiembre de 1995 en una página web de cmu.edu. Enumera cuándo se introdujeron las instrucciones, por ejemplo, MIPS I para div
, MIPS III para dmult
y otras instrucciones de 64 bits, MIPS II para ll
/ sc
.
Este sitio web describe el conjunto de instrucciones MIPS y su codificación. No creo que esté completo sin embargo.
El sitio web de MIPS también tiene documentos técnicos sobre los diversos núcleos.
Por ejemplo, descargué el manual para el núcleo MIPS 4KE (documento # MD00103) "MIPS32® 4KE ™ Processor Core Family Software User Manual" y el capítulo 10 contiene una descripción detallada del conjunto de instrucciones. Tenga en cuenta que debe registrarse para acceder a los documentos.
No incluye descripciones de instrucciones, pero la fuente del ensamblador GNU es probablemente tan detallada como pueda obtener con respecto a qué instrucciones están disponibles en qué CPU específicos.
Obtenga binutils y mire opcodes / mips - *. C
Solo puedo responder parcialmente a la pregunta: recomendaría See MIPS Run, de Dominic Sweetman, si todavía no te estás refiriendo a él. Tengo la primera edición del libro, la segunda edición es actual.
- La tabla 8.2 enumera cada código de operación y comportamiento esperado, diferenciando las macros del ensamblador y enumerando las instrucciones a las que se descomponen. Desafortunadamente no diferencia al usuario del modo kernel.
- La tabla 8.6 enumera el nivel de ISA donde se introdujo cada instrucción, incluidas variantes poco claras como el MiniRISC de LSI.
- syscall está presente en la tabla, aunque carece de mucha descripción
La primera edición menciona el kernel. el supervisor y los niveles de privilegio del usuario pero no discute qué operaciones están permitidas en cada uno. No sé qué cambios se hicieron en la segunda edición.