如何检查寄存器是否可被7整除?

时间:2016-10-15 18:23:47

标签: math assembly x86 division

我想检查寄存器ax的值是否可被7整除,余数= 0.我该怎么办?

2 个答案:

答案 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