我想检查寄存器ax的值是否可被7整除,余数= 0.我该怎么办?
答案 0 :(得分:6)
您可以使用this answer中显示的相同方式,当然也有不同的常量。
7 mod 2 16 的模乘法逆是0x6db7,(根据定义)表示x = n * 7
形式的数字将服从x * 0x6db7 = n
,其中{{1} }}将小于或等于n
。因此,如果你得到0xffff / 7
以外的更大的东西,你知道它不是7的倍数。而且,7的非倍数也不能映射到低结果,因为乘以2的幂的奇数乘法是双射的
所以你可以使用(未经测试)
x * 0x6db7
这适用于无符号数字。
作为奖励,imul ax, ax, 0x6db7
cmp ax, 0x2492
ja not_multiple_of_7
将是原始值除以7 iff 它是7的倍数。
答案 1 :(得分:1)
localhost