Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-01-2021
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Revertir números mágicos matemáticamente

Buenas, he visto que los compiladores pueden optimizar las divisiones con constantes, por ejemplo, si divides entre 9 al optimizar se vería algo así:
Código PHP:
mov eax38e38e38
mul esi
mov eax
,edx
shr eax
,
La cosa es invertir eso y que cuando vea ese código pueda obtener el divisor.
He encontrado informacion en inglés y con un nivel de matemáticas que no comprendo y que el inglés no me ayuda porque no sé mucho.
Hasta ahora hago algo como:
(2^(32+s))/M=D
D es divisor
s es el valor de desplazamiento lógico
M es el número mágico .
Esto funciona pero no para todos, por ejemplo con el 62, 63, 70...
Dónde esa formula no sirve y el compilador no hace lo mismo y hace algo así por ejemplo para el 63:
Código PHP:
mov eax,41041041
mul esi
sub esi
,edx
shr esi
,1
add esi
edx
shr esi
,
Como ven enreda bastante más y no sé a que fórmula equivale ni como decidir cuándo debo usar una u otra.
¿Alguien que entienda y pueda ayudarme?

Última edición por aguml fecha: 04-01-2021 a las 22:34:15.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Suma de números pares que hay entre dos números Daniel2622 Lazarus, FreePascal, Kylix, etc. 21 26-04-2017 22:47:29
Tablas de multiplicar para todos los números entre dos números Daniel2622 Lazarus, FreePascal, Kylix, etc. 3 22-04-2017 00:47:59
Comparar 2 numeros jzginez OOP 6 18-02-2010 01:41:11
Revertir numeros Jose Meneses Varios 4 23-04-2009 00:01:25
¿Cómo pintar un círculo matemáticamente? aeff Varios 11 12-01-2009 01:06:05


La franja horaria es GMT +2. Ahora son las 07:07:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi