use*_*653 69
该div
指令(和它对应and
的符号数),同时给出商和余数(模).lea eax, [esi-1]
将一个32位数字and eax, edi
除以一个16位操作数,并将商x & (y-1)
和余数存储在中movzx eax, cl
.
例:
mov eax, 1234 ; dividend low half
mov edx, 0 ; dividend high half = 0. prefer xor edx,edx
mov ebx, 10 ; divisor can be any register or memory
div ebx ; Divides 1234 by 10.
; EDX = 4 = 1234 % 10 quotient
; EAX = 123 = 1234 / 10 remainder
Run Code Online (Sandbox Code Playgroud)
在32位汇编中,您可以DIV
将64位操作数IDIV
除以idiv
.有关更多信息,请参阅英特尔架构软件开发人员手册.
小智 26
如果计算模2的幂,则使用按位AND更简单,并且通常比执行除法更快.如果b
是2的幂,a % b == a & (b - 1)
.
例如,让我们在寄存器EAX中取一个值,模64.
最简单的方法是AND EAX, 63
,因为63是二进制的111111.
我们不关心蒙面的高位数字.试试看!
类似地,不是使用功率为2的MUL或DIV,而是使用位移.但要注意签名的整数!
归档时间: |
|
查看次数: |
104186 次 |
最近记录: |