Como detectar tecnologia MMX
Como podem ver este artigo nao esta directamente relacionado com o
hacking puro e duro como toda a gente gosta!:)) Porem, e como esta no
titulo este artigo e apenas uma curiosidade!
E' facil encontrar, em qualquer site que dedique um pouco de espaco
a' programacao em assembly, pequenos programas ou rotinas que se destinam
a' determinacao da familia a que pertence o processador onde o codigo
esta a correr (alguns trabalhos mais completos como e' o caso do famoso
codigo disponibilizado pela propria Intel, permitem inclusive testar a
presenca de co-processador matematico (FPU - floating point unit)).
No entanto ainda nao encontrei nenhuma rotina que permitisse determinar
a existencia ou nao, de tecnologia MMX!
Com certeza sabem o que sao as tao famosas, e desejadas, extensoes
multimedia, designadas por extensoes MMX! Se nao sabem estao com azar,
pois esta fora do ambito deste artigo, estar a explicar pormenorizadamente
as inovacoes trazidas pelas novas instrucoes MMX, porem podem-se salientar
assim por alto algumas vantagens:
Bla, bla, bla...isto nao e nada de novo!
Tornou-se entao necessario criar rotinas que permitissem ao software
determinar a existencia ou nao destas extensoes.
Entao o que os programas preparados para usufruir destas extensoes
fazem e terem todas as rotinas em duplicado:
Em que consiste entao esta "maneira" de verificar a existencia de MMX:
Ora, o dominio desta funcao, assim lhe poderemos chamar pois e o que
vai determinar o que a instrucao ira fazer, e' o valor do registo de 32
bits EAX! E' assim que se detecta a existencia de MMX:
Em baixo encontra-se entao o programa, que mostra como isto tudo o
que foi descrito, se passa na "vida real"!:)
O programa tambem detecta se o processador corrente e um "puro
Intel": tambem esta utilidade se deve a' instrucao CPUID, basta colocar
em EAX o valor 0 (zero), que se se tratar de um "puro Intel", sera colo-
cada ao longo dos registos EBX, EDX e ECX a string "GenuineIntel". Dai'
o facto de no codigo se comparar o registo bl (8 bits) com o caracter
'G'.
Mais uma vez, digo que este artigo nao esta relacionado directamente
com o hacking, porem e um empurrao para o desenvolvimento de aplicacoes,
cada vez mais poderosas e rapidas!!
Aqui esta o programa ja compilado - mmx.exe .
--------------------------------CORTE AQUI-------------------------------
--------------------------------------
by Elektro
Simples nao e'????
; Por Elektro (elektro@null.net)
;
; Este pequeno excerto de codigo apenas detecta a existencia de tecnologia
; MMX, em processadores Pentium (caso o processador currente seja um genuino
; Intel).
;
; IMPORTANTE: este codigo apenas corre em maquinas com processadores
; Pentium!!
; Caso seja corrido em maquinas inferiores ocorrera e excepcao
; 6 (codigo de instrucao invalido)!
TITLE CPUID
.model tiny
.stack
.586
.data
GENUINO db "GenuineIntel(TM)", 13,10,"$"
SIM_MMX db "Possui extensoes MMX", 13,10,"$"
NAO_MMX db "Nao possui extensoes MMX", 13,10,"$"
NAO_INTELP db "Este processador nao e um genuino Intel!!", 13,10,"$"
;inicio
start: mov ax,@data
mov ds,ax
mov eax,0
cpuid
cmp bl,'G'
jnz nao_intel
mov dx,OFFSET GENUINO
mov ah,9h
int 21h
mov eax,1
cpuid
test edx,00800000h ;mask -> bit 23 ser 1
je not_mmx
mov dx,OFFSET SIM_MMX
mov ah,9h
int 21h
jmp fim
nao_intel: mov dx,OFFSET NAO_INTELP
mov ah,9h
int 21h
jmp fim
not_mmx: mov dx,OFFSET NAO_MMX
mov ah,9h
int 21h
fim: mov ax,4c00h
int 21h
end start