x86 Assembler中是否有类似模运算符的东西?汇编语言 - 如何进行模数?
27
A
回答
54
DIV
指令(以及它对应的有符号数IDIV
)给出了商和余数(模)。 DIV r16
用一个16位操作数将DX:AX
中的一个32位数除,并将商存储在AX
中,其余部分存储在DX
中。
实施例:
mov dx, 0
mov ax, 1234
mov bx, 10
div bx ; Divides 1234 by 10. DX = 4 and AX = 123
在32位组件可以做div ebx
通过EBX
划分在EDX:EAX
64位操作数。有关更多信息,请参阅英特尔Architectures Software Developer’s Manuals。
+2
但GCC不使用div,因为它很慢:http://stackoverflow.com/questions/4361979/how-does-在-GCC-与实施的模块,工作和为什么 - 做 - 它 - 不使用,该 –
13
如果计算模2的幂次,则使用按位AND更简单并且通常比执行除法更快。如果b
是2的幂,a % b == a & (b - 1)
。
例如,我们在寄存器EAX中,取模64。
最简单的方法是AND EAX, 63
,因为63是二进制的111111。
被掩盖的高位数对我们没有兴趣。试试看!
类比而言,不是使用MUL或DIV的二次幂,而是使用位移。不过,请注意签名的整数!
相关问题
- 1. 以汇编语言进行比较
- 2. 汇编语言?
- 3. 汇编语言Bubblesort
- 4. 汇编语言
- 5. CMP汇编语言
- 6. SPARC汇编语言
- 7. 汇编语言:cbw
- 8. 汇编语言 - LDI
- 9. LC3汇编语言
- 10. ARMv6汇编语言
- 11. 汇编语言数组
- 12. 汇编语言环
- 13. 汇编语言 - 乘
- 14. MIPS汇编语言
- 15. 汇编语言IA32
- 16. 功能汇编语言
- 17. 如何用汇编语言编写
- 18. sicxe汇编语言编程
- 19. .NET汇编语言
- 20. LC3汇编语言程序
- 21. x86汇编语言
- 22. MIPS汇编语言
- 23. 8086汇编语言
- 24. AVR汇编语言代码
- 25. 以汇编语言输入
- 26. 将汇编语言宏转换为纯汇编语言
- 27. 汇编语言[EMU 8086]
- 28. 与汇编语言拼搏
- 29. 分割用汇编语言
- 30. 汇编语言加法
http://stackoverflow.com/questions/4361979/calculating-modulo-in-assembly –