Título: ASM con vb6
Publicado por: arfgh en 1 Marzo 2012, 16:26 pm
sabéis si es posible usar código asm desde vb6 tal y como se hace desde C ? tenéis algún buen ejemplo, a ser posible sencillo de comprender ?
gracias
Título: Re: ASM con vb6
Publicado por: raul338 en 1 Marzo 2012, 16:33 pm
Si se puede y hay varios ejemplos, aunque no se si sean facilmente entendibles para los que sepan ASM :xD
Re: Ayuda[Loadlibrary] Cargar apis sin declararlas. (http://foro.elhacker.net/programacion_vb/t-t282797.0.html;msg1397130#msg1397130) [VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline] (http://foro.elhacker.net/programacion_vb/t-t347173.0.html;msg1693770#msg1693770)
y hay mas buscando en google n.n
Título: Re: ASM con vb6
Publicado por: karmany en 1 Marzo 2012, 20:01 pm
Hay dos formas principales:
1.- Usando un complemento 2.- Haciéndolo a mano directamente.
Del 2º ejemplo tienes una explicación clara aquí: Ensamblador en VB6 (http://www.karmany.net/index.php/programacion-software/25-programacion-vb6/132-codigo-ensamblador-en-visual-basic-6)
De la forma 1, es muy sencillo y en breve también escribiré sobre esto.
Título: Re: ASM con vb6
Publicado por: arfgh en 1 Marzo 2012, 21:33 pm
me ha parecido genial el método hecho a mano. no obstante tengo curiosidad por ver ese método por medio de un complemento. No obstante... y que hay de la velocidad de ejecución del código asm ? sigue siendo igual de rápido aún usándolo desde vb6 ? por ejemplo, que sería más rápido, hacer un shr por medio de asm desde vb6 o usar el código shr como este ? Private Function SHL(ByVal Value As Long, ByVal ShiftCount As Long) As Long ' by Jost Schwider, jost@schwider.de, 20011001 Select Case ShiftCount Case 0& SHL = Value Case 1& If Value And &H40000000 Then SHL = (Value And &H3FFFFFFF) * &H2& Or &H80000000 Else SHL = (Value And &H3FFFFFFF) * &H2& End If Case 2& If Value And &H20000000 Then SHL = (Value And &H1FFFFFFF) * &H4& Or &H80000000 Else SHL = (Value And &H1FFFFFFF) * &H4& End If Case 3& If Value And &H10000000 Then SHL = (Value And &HFFFFFFF) * &H8& Or &H80000000 Else SHL = (Value And &HFFFFFFF) * &H8& End If Case 4& If Value And &H8000000 Then SHL = (Value And &H7FFFFFF) * &H10& Or &H80000000 Else SHL = (Value And &H7FFFFFF) * &H10& End If Case 5& If Value And &H4000000 Then SHL = (Value And &H3FFFFFF) * &H20& Or &H80000000 Else SHL = (Value And &H3FFFFFF) * &H20& End If Case 6& If Value And &H2000000 Then SHL = (Value And &H1FFFFFF) * &H40& Or &H80000000 Else SHL = (Value And &H1FFFFFF) * &H40& End If Case 7& If Value And &H1000000 Then SHL = (Value And &HFFFFFF) * &H80& Or &H80000000 Else SHL = (Value And &HFFFFFF) * &H80& End If Case 8& If Value And &H800000 Then SHL = (Value And &H7FFFFF) * &H100& Or &H80000000 Else SHL = (Value And &H7FFFFF) * &H100& End If Case 9& If Value And &H400000 Then SHL = (Value And &H3FFFFF) * &H200& Or &H80000000 Else SHL = (Value And &H3FFFFF) * &H200& End If Case 10& If Value And &H200000 Then SHL = (Value And &H1FFFFF) * &H400& Or &H80000000 Else SHL = (Value And &H1FFFFF) * &H400& End If Case 11& If Value And &H100000 Then SHL = (Value And &HFFFFF) * &H800& Or &H80000000 Else SHL = (Value And &HFFFFF) * &H800& End If Case 12& If Value And &H80000 Then SHL = (Value And &H7FFFF) * &H1000& Or &H80000000 Else SHL = (Value And &H7FFFF) * &H1000& End If Case 13& If Value And &H40000 Then SHL = (Value And &H3FFFF) * &H2000& Or &H80000000 Else SHL = (Value And &H3FFFF) * &H2000& End If Case 14& If Value And &H20000 Then SHL = (Value And &H1FFFF) * &H4000& Or &H80000000 Else SHL = (Value And &H1FFFF) * &H4000& End If Case 15& If Value And &H10000 Then SHL = (Value And &HFFFF&) * &H8000& Or &H80000000 Else SHL = (Value And &HFFFF&) * &H8000& End If Case 16& If Value And &H8000& Then SHL = (Value And &H7FFF&) * &H10000 Or &H80000000 Else SHL = (Value And &H7FFF&) * &H10000 End If Case 17& If Value And &H4000& Then SHL = (Value And &H3FFF&) * &H20000 Or &H80000000 Else SHL = (Value And &H3FFF&) * &H20000 End If Case 18& If Value And &H2000& Then SHL = (Value And &H1FFF&) * &H40000 Or &H80000000 Else SHL = (Value And &H1FFF&) * &H40000 End If Case 19& If Value And &H1000& Then SHL = (Value And &HFFF&) * &H80000 Or &H80000000 Else SHL = (Value And &HFFF&) * &H80000 End If Case 20& If Value And &H800& Then SHL = (Value And &H7FF&) * &H100000 Or &H80000000 Else SHL = (Value And &H7FF&) * &H100000 End If Case 21& If Value And &H400& Then SHL = (Value And &H3FF&) * &H200000 Or &H80000000 Else SHL = (Value And &H3FF&) * &H200000 End If Case 22& If Value And &H200& Then SHL = (Value And &H1FF&) * &H400000 Or &H80000000 Else SHL = (Value And &H1FF&) * &H400000 End If Case 23& If Value And &H100& Then SHL = (Value And &HFF&) * &H800000 Or &H80000000 Else SHL = (Value And &HFF&) * &H800000 End If Case 24& If Value And &H80& Then SHL = (Value And &H7F&) * &H1000000 Or &H80000000 Else SHL = (Value And &H7F&) * &H1000000 End If Case 25& If Value And &H40& Then SHL = (Value And &H3F&) * &H2000000 Or &H80000000 Else SHL = (Value And &H3F&) * &H2000000 End If Case 26& If Value And &H20& Then SHL = (Value And &H1F&) * &H4000000 Or &H80000000 Else SHL = (Value And &H1F&) * &H4000000 End If Case 27& If Value And &H10& Then SHL = (Value And &HF&) * &H8000000 Or &H80000000 Else SHL = (Value And &HF&) * &H8000000 End If Case 28& If Value And &H8& Then SHL = (Value And &H7&) * &H10000000 Or &H80000000 Else SHL = (Value And &H7&) * &H10000000 End If Case 29& If Value And &H4& Then SHL = (Value And &H3&) * &H20000000 Or &H80000000 Else SHL = (Value And &H3&) * &H20000000 End If Case 30& If Value And &H2& Then SHL = (Value And &H1&) * &H40000000 Or &H80000000 Else SHL = (Value And &H1&) * &H40000000 End If Case 31& If Value And &H1& Then SHL = &H80000000 Else SHL = &H0& End If End Select End Function
Título: Re: ASM con vb6
Publicado por: karmany en 2 Marzo 2012, 00:51 am
1.- -"que hay de la velocidad de ejecución del código asm ? sigue siendo igual de rápido aún usándolo desde vb6 ?"
En el caso hecho a mano, se ejecuta el código directamente en ensamblador.
Los pasos son los siguientes: -Visual Basic escribe byte a byte el código ensamblador en memoria y mediante la API CallWindowProc ejecuta ese código recién escrito.
Es decir, aparte de la ejecución del código, se pierde tiempo en escribir esos datos en memoria. (pero a no ser que el código sea extenso, el proceso es rápido).
Mi respuesta sería: es casi igual de rápido.
2.- "que sería más rápido, hacer un shr por medio de asm desde vb6 o usar el código shr como este ?". Tienes una solución muy sencilla: haz los dos ejemplos y comparas el código ensamblador generado. Yo creo que será más rápido el asm en vb6. (pero no lo aseguro al 100%)
Título: Re: ASM con vb6
Publicado por: Karcrack en 4 Marzo 2012, 00:29 am
Específicamente esa función es realmente rápida. Pero aún así podrás comprobar que ejecutando el ensamblador es ligeramente más rápido, sobretodo si haces muchísimas llamadas (ya que el código sólo ha de meterse una vez en memoria)
Título: Re: ASM con vb6
Publicado por: arfgh en 6 Agosto 2014, 17:40 pm
al final no pusiste como hacer de la manera sencilla con el complemento :(
|