¿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. ¿Hay un lenguaje ensamblador para CUDA?
- 9. Terminología: "registros" en programación en lenguaje ensamblador
- 10. Lenguaje ensamblador: intente comprender una función pequeña
- 11. Linux de 64 bits, Lenguaje ensamblador, ¿Problemas?
- 12. Cómo verificar una "longitud de matriz" en lenguaje ensamblador (ASM),
- 13. ¿Cómo verificar el valor EIP con lenguaje ensamblador?
- 14. ¿Cómo funciona `Skipcond` en el lenguaje ensamblador MARIE?
- 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. ¿Alguna vez necesita escribir código real en lenguaje ensamblador?
- 22. Incremento de 0 a 100 en lenguaje ensamblador
- 23. Linux system call table o cheetsheet en lenguaje ensamblador
- 24. Diseño de patrón para hacer un ensamblador
- 25. ¿Cómo hacer un lenguaje .Net o JVM?
- 26. ¿Cómo hacer tu propio lenguaje de programación?
- 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 puedo obtener una lista en lenguaje ensamblador de mis Arduino Sketches en Windows?
- 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 –