Autor
|
Tema: Acesso a un bit concreto del registro (Leído 3,810 veces)
|
silver2050
Desconectado
Mensajes: 28
|
Buenas a todos,
A ver si alguien puede echarme una mano, necesito saber como podría acceder a un bit concreto de un registro, es decir, acceder al bit 20 del registro EDX para saber su valor por ejemplo.
Saludos y gracias.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Buenas a todos,
A ver si alguien puede echarme una mano, necesito saber como podría acceder a un bit concreto de un registro, es decir, acceder al bit 20 del registro EDX para saber su valor por ejemplo.
Saludos y gracias.
usando una mascara: MOV EAX,293829382 AND EAX,100000h TEST EAX,EAX JE NOHAY ; bit activo ...
|
|
|
En línea
|
|
|
|
silver2050
Desconectado
Mensajes: 28
|
Muchas gracias compañero, aunque me he perdido un poco. A ver si puedo explicarme mejor:
Necesito hacer una función con código C y ASM, la cual hace varias funcionalidades y recibe un entero de entrada, entonces necesitaría acceder al bit del registro correspondiente al entero (0-31) de forma dinámica, tendría que realizar la máscara de forma dinámica, en lugar de intentar hacer 32 máscaras diferente. Soy novato en ensamblador y no sé si sería posible utilizando SHR (desplazamientos a la derecha) y luego aplicando una máscara. ¿Cómo lo véis?
Saludos y muchas gracias por vuestro tiempo y ayuda
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Por supuesto, si puedes determinar en tiempo de ejecución la posición del bit a procesar, haces un shift right con el número de desplazamiento correspondiente al calculado en tiempo de ejecución y siempre utilizas el AND con el número 1. Así podrás saber si está activado el bit en cualquier posición.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Seria SHL, no SHR, y recordar establecer el registro a 1. tambíen se podria hacer con SHR pero seria de forma inversa aunque lo más correcto seria SHL
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Seria SHL, no SHR, y recordar establecer el registro a 1. tambíen se podria hacer con SHR pero seria de forma inversa aunque lo más correcto seria SHL
En realidad, depende. Al menos lo que yo dije que le entendí a el, sería hacer un shift right del registro donde posee el valor correspondiente (el bit que quiere identificar). Claro que se puede hacer un shift left al registro que contenga el "1" y "construir dinámicamente" la máscara. Pero bueno, son opciones
|
|
|
En línea
|
|
|
|
silver2050
Desconectado
Mensajes: 28
|
Gracias a ambos.
Entonces si quiero obtener el bit 17 de edx, podría utilizar:
SHL edx, 17 //¿podría utilizar [ebp+8], en lugar del 17?, sería donde se guarda el parámetro de entrada. La función que contiene mi código ASM sería "mi_función(int posicion)" AND edx, 0x80000000 TEST edx,edx
|
|
« Última modificación: 24 Noviembre 2012, 21:50 pm por silver2050 »
|
En línea
|
|
|
|
|
|