En diferentes idiomas de ensamblaje MUL (x86)/MULT (mips) se refieren a la multiplicación. Es una caja negra para el programador. Estoy interesado en cómo en realidad una CPU logra una multiplicación independientemente de la arquitectura. Digamos que tengo dos valores de 16 bits en mis registros y soy la CPU, así que tengo que implementar MUL usando las otras instrucciones de bits que tengo (y, o, xor, no, shl, shr, etc.). ¿Qué debo hacer?¿Cómo implementan las CPU Instrucciones como MUL/MULT?
Respuesta
http://en.wikipedia.org/wiki/Multiplication_ALU en la Wikipedia enumera diferentes métodos para hacer la multiplicación en un circuito digital.
Cuando trabajé en un proyecto para agregar instrucciones SIMD a un procesador tipo DEC Alpha en Verilog en la universidad, implementamos un Wallace tree multiplier, la razón principal era que funcionaba en un número fijo de ciclos y era fácil de canalizar.
EDITAR: Usted mencionó el uso de las otras instrucciones de manipulación de bits, en los procesadores modernos la multiplicación no se microcodificará así; sería una forma de ralentizar y el procesador sería sacrificado en puntos de referencia.
This page muestra las puertas lógicas para un multiplicador combinacional 4 * 4. Puedes trabajar desde allí.
Here is somebody's lab donde describen la construcción de un multiplicador de 16 bits a partir de 4 multiplicadores de 4 bits, cada uno construido con compuertas AND y sumadores completos. Diseño completo, diseño de chips y formas de onda de simulación.
ambos enlaces están ahora muertos: / –
- 1. Xcode Debugger: cómo hacer un solo paso al nivel de las instrucciones de la CPU
- 2. ¿Las matrices de JavaScript realmente se implementan como matrices?
- 3. ¿Cómo se implementan las matrices en Java?
- 4. ¿Cómo se implementan las enumeraciones en Java?
- 5. ¿Cómo se implementan las matrices en Perl?
- 6. ¿Cómo se implementan las referencias débiles?
- 7. Donde las instrucciones SSE superan las instrucciones normales
- 8. ¿Qué instrucciones de CPU usan la mayor potencia?
- 9. ¿Cómo implementan JVM IdentityHashMap?
- 10. JAXB: las clases generadas implementan la interfaz
- 11. ¿Cómo se implementan las categorías en el Objetivo C?
- 12. unscope solo las instrucciones de orden
- 13. ¿Las tarjetas gráficas tienen conjuntos de instrucciones propios?
- 14. ¿Cómo se implementan las expresiones regulares en .NET?
- 15. Cómo se implementan las funciones de la biblioteca en Haskell
- 16. ¿Cómo se implementan las clases en los compiladores
- 17. ¿Cómo se implementan las consolas de depuración en Python?
- 18. ¿Cómo encontrar todas las clases que implementan IDisposable?
- 19. ¿Cómo se implementan las matrices asociativas en PHP?
- 20. ¿Cómo se implementan las listas en Haskell (GHC)?
- 21. ¿Cómo encontrar todas las clases que implementan una interfaz determinada?
- 22. ¿Cómo implementan las bases de datos SQL 'ORDER BY x'?
- 23. ¿Cómo implementan las transacciones los proveedores de base de datos?
- 24. ¿Las JVM de Linux realmente implementan las prioridades de subprocesos?
- 25. ¿Por qué no se implementan los mapas C++ como intentos?
- 26. Revertir todo el procedimiento (todas las instrucciones)
- 27. ¿Por qué no usar GPU como CPU?
- 28. ¿Cómo se definen las instrucciones de uso en web.config?
- 29. C# - ¿Cómo verifico si faltan las instrucciones scope.Complete()?
- 30. android - Cómo mostrar las instrucciones en la vista web
Creo que las CPU no llaman a sus propias instrucciones por razones de eficiencia. Simplemente no tenía otra forma de expresarme, ya que el nivel más bajo que he tenido hasta ahora es asm. ¡Gracias por la ayuda! – George
A veces lo hacen. x86 es un ISA complicado y tiene algunas instrucciones muy extrañas. Estas instrucciones se traducen en un programa interno de microcódigo. Mira http://en.wikipedia.org/wiki/File:Intel_Nehalem_arch.svg, verás una unidad de decodificación compleja y un secuenciador de microcódigos, que hace esto – Michael
Es incluso peor que en las CPUs modernas, otorgadas de ejecución de orden, predicción de bifurcación, hyperthreading, etc., junto con microcódigo, es casi correcto decir que el ISA x86 se ejecuta en una máquina virtual implementada en microcódigos y circuitos. Pero casi nunca es necesario preocuparse por eso ... –