Autor
|
Tema: Movimiento de mascara (Leído 3,626 veces)
|
xv0
Desconectado
Mensajes: 1.027
|
Hola Tengo que mover los byte que tengan el bit 7 en 1, ya tengo una funcion aplicada con maskmovq que hace precisamente lo que quiero, pero lo malo de esa instruccion es que a la CPU le cuesta 32 OPS. ; %mm0 = 0x8001018080010180 maskmovq %mm0, %mm0 ; (%rdi) = 0x8000008080000080
Hay otra instruccion llamada pmovmskb es 1 OPS, que copia el bit 7 en un registro de 32 bits haciendo un octeo con los registros que tienen ese bit en 1. ; %mm0 = 0x8001018080010180 pmovmskb %mm0, %esi ; %esi = 0x99
Bien alguien me da alguna idea de como construir una mascara, a partir de ese octeo para copiar los byte tal y como lo hace maskmovq? Un saludo.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
He visto varios temas tuyos acerca de cómo optimizar con extensiones asi que te recomiendo este foro: http://www.masm32.com/board/index.phpUsuarios con bastante conocimiento en ensamblador en general.
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Si por lo que he visto hay buenas preguntas, aun estoy con AES tengo todas las funciones menos la mixcolumns, multiplico el registro xmm por 2 y 3, ahora solo me queda ordenarlo corriendo los bits. https://www.ecs.csus.edu/csc/iac/docs/students/Vinit_Azad_MS_Report.pdf Si miran ese pdf en la pagina 29 veran una tabla con los ciclos de cada funcion, no se de donde sera esa tabla pero la he visto por muchos lados, sumando todas las funciones 1 ronda cuesta unos 222, yo calculo que mi ronda estara en unos 170 - 180. Tambien cree una funcion strlen con los xmm para el mismo AES, no he calculado la potencia porque no se hacerlo, pero segurisimo que peta mil veces a la de C/C++. Pero todo esto son para mis proyectos, me gustaria compartirlos, pero no, a no ser que se conbinen con algun code como puede ser un malware. Un saludo.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Si por lo que he visto hay buenas preguntas, aun estoy con AES tengo todas las funciones menos la mixcolumns, multiplico el registro xmm por 2 y 3, ahora solo me queda ordenarlo corriendo los bits. https://www.ecs.csus.edu/csc/iac/docs/students/Vinit_Azad_MS_Report.pdf Si miran ese pdf en la pagina 29 veran una tabla con los ciclos de cada funcion, no se de donde sera esa tabla pero la he visto por muchos lados, sumando todas las funciones 1 ronda cuesta unos 222, yo calculo que mi ronda estara en unos 170 - 180. Mira esta clase hecha por MichaelW: http://masm32.com/board/index.php?topic=49.msg10832;topicseen#msg10832Sirve para calcular los ciclos que require el procesador para ejecutar un bloque de código. Tambien cree una funcion strlen con los xmm para el mismo AES, no he calculado la potencia porque no se hacerlo, pero segurisimo que peta mil veces a la de C/C++.
Pues habria de ver si activamos las extensiones en el compilador y a comparar. Pero todo esto son para mis proyectos, me gustaria compartirlos, pero no, a no ser que se conbinen con algun code como puede ser un malware.
Un saludo.
Pues si lo vas a compartir, compartelo, de ninguna manera podes controlar que tu código sea sólo usado para aplicaciónes legitimas y no para malware, es como decir que los creadores que compiladores, ensambladores sólo los programaron para crear aplicaciónes legitimas y no para malware. Pero para que despreocuparte te doy mi punto de vista, nunca usaria un código que utilizaria extensiones tan recientes para malware ya que estaria sujeto a funcionar sólo en cierto tipo de procesadores, además de dejarle bastante facil el trabajo a las compañias de AV de agregar sus firmas en mi ejecutable, etc. ellos no van de la mano
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
No, me referia en compartir el codigo para algun proyecto como puede ser en malware, o en otro y sacar algo de dinero. Las extensiones son de la SSE a la SSE2, son compatibles, no estoy usando las AVX. Por lo que veo aqui hay muchos desarrolladores, pero por lo que veo a nadie le interesa las implementaciones que creo, bueno como hay muchas strlen por hay comparto la mia, si alguien quiere hacer algo pues que me comente. http://foro.elhacker.net/asm/aporte_strlen_xmm-t411158.0.html Ya puedes analizarla si quieres x64Core, pero las funciones AES no digo nada. Un saludo.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
No, me referia en compartir el codigo para algun proyecto como puede ser en malware, o en otro y sacar algo de dinero. Las extensiones son de la SSE a la SSE2, son compatibles, no estoy usando las AVX. Por lo que veo aqui hay muchos desarrolladores, pero por lo que veo a nadie le interesa las implementaciones que creo, bueno como hay muchas strlen por hay comparto la mia, si alguien quiere hacer algo pues que me comente. http://foro.elhacker.net/asm/aporte_strlen_xmm-t411158.0.html Ya puedes analizarla si quieres x64Core, pero las funciones AES no digo nada. Un saludo. No es que a nadie le interese, sino que estas en el foro incorrecto, conozco a muchos programadores amantes del lenguaje ensamblador como tú, ellos que se toman un tiempo para optimizar un bloque de código, que toman el lenguaje ensamblador como un 'arte' y aquí hay muy pocas personas o ninguna. Ve al foro que te mencione ellos tomaran más interes y aprenderas mucho más cosas con ellos ^^. no digo que un foro es mejor que otro, simplemente son diferentes.
|
|
|
En línea
|
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Bueno ya la optimize, de 64 OPS que consume maskmovdqu yo lo hice en 4 OPS jeje. .section .data bts0_: .quad 0x8080808080808080,0x8080808080808080 .section .text .globl _start _start: movdqa %xmm0, %xmm1 pand bts0_, %xmm0 pcmpeqb bts0_, %xmm0 pand %xmm0, %xmm1
Por cierto, deje la respuesta en este foro y en el otro, buen foro tienes razon, pero lo saque todo yo jeje. Un saludo.
|
|
|
En línea
|
|
|
|
|
|