SoloCodigo
Programación General => ASM (Ensamblador) => Mensaje iniciado por: JuanK en Jueves 5 de Abril de 2007, 21:40
-
Saludos
estoy haciendo unas operaciones matemáticas y parte de ellas es dividir un entero de 32 bit entre 8, para lo cual o bien puedo utilizar DIV entre 8 o bien puedo usar SHR con 3 bytes.
Con ambos me funciona OK, pero quiero saber cual me es mas eficiente a nivel de procesamiento ya que es es un modulo critico de la aplicación que estoy haciendo.
Utilizo procesadores PENTIUM 4, he revisado el código generado por el compilador y en ambos casos me genera código binario diferente, es decir en efecto al compilar el código generado utiliza los operadores DIV o SHR correspondientes según el caso.
gracias.
-
Bueno, mientras tanto les cuento que acabo de encontrar en un lugar de internet que los procesadores cuando ejecutan div con divisores potencia de dos resuelven usar SHR en lugar de DIV, sera cierto?
-
SHR.
http://home.comcast.net/~fbui/intel.html (http://home.comcast.net/~fbui/intel.html)
-
La respuesta es bastante lógica, SHR es una operacion con bits (consumira un par de ciclos reloj nomas), en cambio DIV es una operacion matemática que consiste en realizar varias restas. Por ejemplo si quieres dividir 800 por 8, lo que va realizar el procesador es algo similar a hacer 100 restas. (Poco eficaz no?)
-
Si.
Pero según leí si el operando es potencia de 2 DIV actuara como SHR, pero para el poder hacer eso hace validaciones adicionales?
supongo que si.
entonces a la final sea como se sera mas rápido usar SHR :)
-
Lo de la comprobación, te lo podría llegar a hacer el ensamblador o el compilador. El procesador no creo, tendría qeu añadir más ciclos reloj a una instruccion con lo que no sería lo más eficaz, para eso que se encargue el programador.
-
Por ejemplo si quieres dividir 800 por 8, lo que va realizar el procesador es algo similar a hacer 100 restas. (Poco eficaz no?)
y de hecho el procesador no resta, solo suma :)
La resta puede lograrse por medio de la suma de complementos. El complemento de 10 de un número dado es la diferencia entre dicho numero y la potencia de 10 inmediatamente superior.