¿Hay algo así como un operador de módulo en el ensamblador x86?Lenguaje ensamblador - ¿Cómo hacer Modulo?
Respuesta
La instrucción DIV
(y es la contraparte IDIV
para números con signo) proporciona tanto el cociente como el resto (módulo). DIV r16
divide un número de 32 bits en DX:AX
por un operando de 16 bits y almacena el cociente en AX
y el resto en DX
.
Ejemplo:
mov dx, 0
mov ax, 1234
mov bx, 10
div bx ; Divides 1234 by 10. DX = 4 and AX = 123
En 32-bit de montaje se puede hacer div ebx
para dividir un operando de 64 bits en EDX:EAX
por EBX
. Consulte Intels Architectures Software Developer’s Manuals para obtener más información.
Pero GCC no usa div porque es lento: http://stackoverflow.com/questions/4361979/how-does- the-gcc-implementation-of-module-work-and-why-does-it-not-use-the –
Si calcula el módulo una potencia de dos, usar AND a nivel de bit es más simple y generalmente más rápido que realizar la división. Si b
es una potencia de dos, a % b == a & (b - 1)
.
Por ejemplo, tomemos un valor en el registro EAX, módulo 64.
La manera más simple sería AND EAX, 63
, porque 63 es 111111 en binario.
Los dígitos más altos y enmascarados no nos interesan. ¡Pruébalo!
Analógicamente, en lugar de usar MUL o DIV con potencias de dos, el cambio de bit es el camino a seguir. Sin embargo, ¡cuidado con los enteros firmados!
- 1. lenguaje ensamblador y optimización
- 2. ¿Cómo hacer un ciclo en el lenguaje ensamblador x86?
- 3. Lenguaje ensamblador a C
- 4. ¿Qué lenguaje ensamblador aprender?
- 5. cómo se implementó lisp en lenguaje ensamblador?
- 6. ¿Vale la pena aprender el lenguaje ensamblador?
- 7. Símbolos reubicables en formato ELF (lenguaje ensamblador)
- 8. Linux de 64 bits, Lenguaje ensamblador, ¿Problemas?
- 9. ¿Hay un lenguaje ensamblador para CUDA?
- 10. Lenguaje ensamblador: intente comprender una función pequeña
- 11. Terminología: "registros" en programación en lenguaje ensamblador
- 12. Cómo verificar una "longitud de matriz" en lenguaje ensamblador (ASM),
- 13. ¿Cómo funciona `Skipcond` en el lenguaje ensamblador MARIE?
- 14. ¿Cómo verificar el valor EIP con lenguaje ensamblador?
- 15. C Objetivo: Modulo sesgo
- 16. Resultado devuelto a eax (lenguaje ensamblador IA-32)
- 17. ¿Cambios de 128 bits utilizando el lenguaje ensamblador?
- 18. Desarrollo de aplicaciones de Android con lenguaje ensamblador
- 19. Acaba de aprender el lenguaje ensamblador x86. ¿Qué puedo hacer con eso?
- 20. Cómo instalar el modulo py2exe en Linux
- 21. Linux system call table o cheetsheet en lenguaje ensamblador
- 22. ¿Alguna vez necesita escribir código real en lenguaje ensamblador?
- 23. Incremento de 0 a 100 en lenguaje ensamblador
- 24. Diseño de patrón para hacer un ensamblador
- 25. ¿Cómo hacer tu propio lenguaje de programación?
- 26. ¿Cómo hacer un lenguaje .Net o JVM?
- 27. ¿Cómo funciona un ensamblador?
- 28. ¿Cómo se implementa la sincronización de subprocesos en el nivel de lenguaje ensamblador?
- 29. Cómo escribir el lenguaje ensamblador hello world program para 64 bit Mac OS X usando printf?
- 30. ¿Cómo vincular un archivo de objeto C con un archivo de objeto de lenguaje ensamblador?
http://stackoverflow.com/questions/4361979/calculating-modulo-in-assembly –