Pregunta: | 18978 - COMO AVERIGUO LA VELOCIDAD DEL PROCESADOR? |
Autor: | Carlos Jaramillo |
Por favor me dicen con qué comando puedo averiguar la velocidad del procesador de un equipo con Windows ME sin necesidad de entrar por el set up?
Gracias. |
Respuesta: | claudio romero |
Hola aca va el fuente en Delphi, perdon por los nombres de las variables.
Se basa en la instruccion de los procesadores Pentium y superiores RDTSC (Read Time Stamp Counter) o algo asi. Esta instruccion devuelve en los registros EDX:EAX un nro de 64 bits que representa la cantidad de ciclos de procesador ejecutado. En un Pentium 300, seran 300.000.000 millones ciclos por segundo, asi que solo mido el tiempo inicial y el final para sacar la diferencia. No tengo ahora el EXE compilado si lo quieres te lo envio. procedure TForm1.Button1Click(Sender: TObject); var HI_Inicio,LO_Inicio,C:dword;cantidad:real; begin asm db $0F, $31 // opcode para RDTSC mov HI_inicio,edx mov LO_inicio,eax end; Sleep(500); asm db $0F, $31 // opcode para RDTSC sub eax,lo_inicio jnc @no_carry dec edx @no_carry: sub edx,hi_inicio mov ecx,1000 // en eax cuantos miles de ciclos pasaron en medio seg. div ecx //edx:eax / ecx mov C,eax end; cantidad:=C; cantidad:=(cantidad / 1000)*2; button1.caption:=floattostr(cantidad); end; |
Respuesta: | claudio romero |
Hola aca va el fuente en Delphi, perdon por los nombres de las variables.
Se basa en la instruccion de los procesadores Pentium y superiores RDTSC (Read Time Stamp Counter) o algo asi. Esta instruccion devuelve en los registros EDX:EAX un nro de 64 bits que representa la cantidad de ciclos de procesador ejecutado. En un Pentium 300, seran 300.000.000 millones ciclos por segundo, asi que solo mido el tiempo inicial y el final para sacar la diferencia. No tengo ahora el EXE compilado si lo quieres te lo envio. procedure TForm1.Button1Click(Sender: TObject); var HI_Inicio,LO_Inicio,C:dword;cantidad:real; begin asm db $0F, $31 // opcode para RDTSC mov HI_inicio,edx mov LO_inicio,eax end; Sleep(500); asm db $0F, $31 // opcode para RDTSC sub eax,lo_inicio jnc @no_carry dec edx @no_carry: sub edx,hi_inicio mov ecx,1000 // en eax cuantos miles de ciclos pasaron en medio seg. div ecx //edx:eax / ecx mov C,eax end; cantidad:=C; cantidad:=(cantidad / 1000)*2; button1.caption:=floattostr(cantidad); end; |